C: Was bedeutet es, dass ein Doppel == -0 ist?

7

Ich habe nur gdb verwendet, um einen Wert von einem Doppel zu drucken und zu meiner Überraschung -0

gedruckt

Was ist ein doppelter Wert von -0 in C?

Übrigens, als ich überprüft habe, ob es gleich 0 ist, ist es wahr: Um den Vergleich zu machen, habe ich einfach folgendes gemacht:

in gdb

%Vor%     
hhafez 06.03.2009, 00:33
quelle

3 Antworten

16

Negative Null ist ein nützliches Konzept für das numerische Rechnen und ist eine gültige Gleitkommazahl in C.

    
Randolpho 06.03.2009, 00:34
quelle
3

Dies ist ein bekanntes Problem mit printf . Da Sie eine Gleitkommazahl verwenden, ist keine binäre Darstellung möglich. Und meistens ist die Binärdarstellung nicht perfekt. Also wird 0 manchmal als 0.00000000000000...0042 und als -0.000000000000000000000123 gespeichert. Wenn printf den zweiten druckt, erhalten Sie die ungeraden -0.

Ich weiß nicht wirklich, wie Sie mit 0 vergleichen, denken Sie daran, ein Epsilon hinzuzufügen, wenn Sie Fließkomma-Vergleiche durchführen, um sich auf Kuriositäten einzustellen. Zum Beispiel: um zu testen, ob zwei Gleitkommazahlen gleich sind, schreibe niemals a == b , aber fabs(a-b) < 1e-13 , wobei 1e-13 das Epsilon ist (wähle einen Exponenten, der zu dir passt).

    
dirkgently 06.03.2009 00:35
quelle
2

Wenn man das Buch "Schreiben von großartigem Code, Band 1" in Kapitel 4 liest, gibt der Autor die Antwort ganz klar, weil es ein 1-Komplement ist, um den signierten Float im IEEE FP Standard darzustellen. Er sagt:

  

Die Mantisse verwendet ein Zweierkomplement anstelle eines Zweierkomplements. Dies bedeutet, dass der 24-Bit-Wert der Mantisse einfach eine vorzeichenlose Binärzahl ist und das Vorzeichenbit in der Bitposition 31 bestimmt, ob dieser Wert positiv oder negativ ist. Einerkomplementzahlen haben die ungewöhnliche Eigenschaft , dass es zwei Repräsentationen für null gibt (wobei das Vorzeichenbit gesetzt oder gelöscht ist) . Im Allgemeinen ist dies nur für die Person wichtig, die das Fließkomma-Software- oder Hardwaresystem entwickelt.

Hervorhebung von mir

    
hhafez 14.01.2010 00:58
quelle

Tags und Links