Ben Caradoc-Davies wrote: > Vedran Furač wrote: >> 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). Also, octave: octave2.9:1> atan2(-0,-1) ans = -3.1416 or matlab: >> atan2(-0,-5) ans = -3.1416 -- http://mail.python.org/mailman/listinfo/python-list