atan2(0, -55) is different from atan2(-1*0, -55)

2 views (last 30 days)
Just found that
>> atan2(0, -55)
ans =
3.1416
>> atan2(-1*0, -55)
ans =
-3.1416
I don't understand how is this possible? -1 *0 doesn't equal to 0?? How can I convert such behaviour to C++?

Accepted Answer

Steven Lord
Steven Lord on 9 Sep 2016
Numerically they are equal.
z = 0;
mz = -0;
z == mz
However, they are not identical.
format hex
z
mz
Note that the sign bits are different. You can see this:
format
plusInf = 1/z
minusInf = 1/mz
As for how you can translate this to C++ ... why not just call std::atan2?
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
...
If y is ±0 and x is negative or -0, ±π is returned
This is specifically called out in section 9.2.1 of IEEE 754-2008.
  1 Comment
Kyle
Kyle on 9 Sep 2016
Edited: Kyle on 9 Sep 2016
Your answer explains well, thank you. std::atan2(-1*0, -55) will be the same as std::atan2(1*0, -55), although I tried all kinds of data type in the two inputs. My current solutions is std::atan2(-1*(0 + 0.000000001), -55).

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!