cout prints „-0“ anstelle von „0“
-
09-06-2019 - |
Frage
#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
Warum dieses große Stück Code Ausgabe -0
und nicht 0
, wie man erwarten würde?
Lösung
Der IEEE 754-Standard für Gleitkommazahlen hat das Vorzeichenbit getrennt von den Mantisse, die Null, negativ sein ermöglicht. Wikipedia sollte Lage sein, dies zu erklären zu helfen.
Andere Tipps
In IEEE Gleitkomma 0
und -0
sind beide unterschiedliche Werte, von hier unter "Special Values":
Beachten Sie, dass -0 und +0 unterscheiden Werte, obwohl sie beide zu vergleichen, wie gleich.
Der IEEE-754-Standard für Gleitpunktarithmetik macht einen Unterschied zwischen +0
und -0
, kann diese verwendet werden, wenn mit sehr kleinen Zahlen gerundet auf Null zu tun, wenn das Zeichen noch eine Bedeutung hat.
Da "negative Null" ist eine gültige Zahl!
Werfen Sie einen Blick auf diesen Artikel: http://en.wikipedia.org/wiki/Floating_point . Beachten Sie, dass ein Vorzeichenbit ist, auch wenn der Wert gleich Null ist.
Da ein Doppel kann in der Tat Werte hat -0, + 0, infinity, + Unendlich und NaN, die ein Ergebnis von verschiedener interessanter Ausdrücke sein können, wie 0/0.
Schauen Sie hier für weitere Informationen.
Weil Ihre Erwartungen sind falsch.
IEEE erfordert, dass positive und negative Null separat dargestellt werden.
Das ist, was Sie hier sehen.