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?

War es hilfreich?

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!

http://en.wikipedia.org/wiki/% E2% 88% 920_ (Anzahl)

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top