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

1 view (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)

Categories

Find more on Author Block Masks in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!