Ben said:
Vedran said:
I think that this results must be the same:
In [3]: math.atan2(-0.0,-1)
Out[3]: -3.1415926535897931
In [4]: math.atan2(-0,-1)
Out[4]: 3.1415926535897931
-0 is converted to 0, then to 0.0 for calculation, losing the sign. You
might as well write 0.0 instead of -0
The behaviour of atan2 conforms to the ISO C99 standard (Python is
implemented in C). Changing the sign of the first argument changes the
sign of the output, with no special treatment for zero.
http://www.ugcs.caltech.edu/manuals/libs/mpfr-2.2.0/mpfr_22.html
Well, here I can read:
Special values are currently handled as described in the ISO C99 standard
for the atan2 function (note this may change in future versions):
* atan2(+0, -0) returns +Pi.
* atan2(-0, -0) returns -Pi. /* wrong too */
* atan2(+0, +0) returns +0.
* atan2(-0, +0) returns -0. /* wrong too */
* atan2(+0, x) returns +Pi for x < 0.
* atan2(-0, x) returns -Pi for x < 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
And the formula (also from that site):
if x < 0, atan2(y, x) = sign(y)*(PI - atan (abs(y/x)))
^^^^^^^
So, you can convert -0 to 0, but you must multiply the result with sign of
y, which is '-' (minus).