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

2 ビュー (過去 30 日間)
Kyle
Kyle 2016 年 9 月 8 日
編集済み: Kyle 2016 年 9 月 9 日
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++?

採用された回答

Steven Lord
Steven Lord 2016 年 9 月 9 日
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 件のコメント
Kyle
Kyle 2016 年 9 月 9 日
編集済み: Kyle 2016 年 9 月 9 日
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).

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeNumbers and Precision についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by