Effacer les filtres
Effacer les filtres

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

1 vue (au cours des 30 derniers jours)
Kyle
Kyle le 8 Sep 2016
Modifié(e) : Kyle le 9 Sep 2016
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++?

Réponse acceptée

Steven Lord
Steven Lord le 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 commentaire
Kyle
Kyle le 9 Sep 2016
Modifié(e) : Kyle le 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).

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Author Block Masks dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by