Doc #53208 [Asn->Csd]: Modulo does not calc right (C99 not mathematical correct)
| From: | aharvey@php.net | Date: | Mon, 08 Nov 2010 10:05:49 +0000 |
| Subject: | Doc #53208 [Asn->Csd]: Modulo does not calc right (C99 not mathematical correct) | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-5501@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53208&edit=1
ID: 53208
Updated by: aharvey@php.net
Reported by: fibrefox at dynamicfiles dot de
Summary: Modulo does not calc right (C99 not mathematical
correct)
-Status: Assigned
+Status: Closed
Type: Documentation Problem
Package: Documentation problem
Operating System: any
PHP Version: Irrelevant
Assigned To: aharvey
Block user comment: N
New Comment:
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
Previous Comments:
------------------------------------------------------------------------
[2010-11-08 11:05:41] aharvey@php.net
Automatic comment from SVN on behalf of aharvey
Revision: http://svn.php.net/viewvc/?view=revision&revision=305195
Log: Expanded the discussion of the modulus operator's handling of
negative operands
per doc bug #53208.
------------------------------------------------------------------------
[2010-11-08 10:42:37] aharvey@php.net
Agreed; this is a documentation issue, since there's no way this is
going to be changed at this point in PHP's life. There's already a
minimal note about this on the arithmetic operators page; I'll expand it
out to note that this is the same as the C99 implementation of %.
------------------------------------------------------------------------
[2010-10-31 00:05:24] rasmus@php.net
Note also that the example you gave of a BC break was a very minor one.
It was a
BC break for people who had written code specifically for PHP 5.3.x
using an old-
style constructor. The number of people who would write 5.3-specific
code with a
PHP4-style constructor is tiny. It may in fact be the case that nobody
had
written code like that. That's why we deemed it ok to break this to fix
a
mistake. Changing the modulus operator is a completely different thing
as it
would touch every piece of PHP code ever written that uses modulus.
------------------------------------------------------------------------
[2010-10-30 23:57:49] cataphract@php.net
PHP doesn't have a formal specification; so the "correct" behavior is an
fluid concept. What the documentation says has some weight, but it's not
normative.
Definitions can be more or less consistent, but they are arbitrary.
Considering only the case when the second operand n is positive, it is
indeed more common in mathematics to define the modulus so it's a number
between 0 and n - 1 (and that's indeed the behavior of e.g. gmp_mod).
In this case, it would certainly break a lot applications to make the
change you propose and the benefits just aren't compelling enough,
especially given that several other programming languages define the
modulus operator in the same fashion.
------------------------------------------------------------------------
[2010-10-30 22:40:11] fibrefox at dynamicfiles dot de
I see the problem in here, but as i see on the website there are changes
anyway in meanings:
"Backwards incompatible change: Methods with the same name as the last
element of a namespaced class name will no longer be treated as
constructor."
The term "modulus" which the symbol "%" stands for is just wrong here.
To gain the compatibility the documentation should be remade ... or the
"real-modulus" has to be added in the core by offering a new function,
maybe "euclid_mod" or something like that.
It is really important to NOT make programming in some kind of
struggeling through the documentation or the code to find the problem,
as you mentioned, of such a basic operator.
I really think there a lot of coders are wondering about this flaw in
PHP (but it is a sign of C99) and are trying to make workarounds to
"fix" this. Built-in functions should be a little bit faster in here, so
there also will be some kind of performance-boost here.
Anyway, i think the operator should do what he says he would do ...
producing the modulus, and not the remainder.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=53208
--
Edit this bug report at http://bugs.php.net/bug.php?id=53208&edit=1