Vorzeichenbehaftete Null
Eine vorzeichenbehaftete Null ist in der Mathematik und Informatik die Zahl Null mit einem assoziierten Vorzeichen. In der Arithmetik ist die Zahl Null weder positiv noch negativ und hat demnach kein Vorzeichen. Bei Maschinenzahlen werden jedoch oft +0 (positive Null) und −0 (negative Null) als zwei verschiedene Zahlen angesehen. Beim Datentyp Integer ist die Null in der Betrags-Vorzeichendarstellung und beim Einerkomplement vorzeichenbehaftet, bei Gleitkommazahlen ist es auch meistens der Fall. Die Notation ist auch in manchen Anwendungen gebräuchlich, wenn eine negative Zahl auf Null gerundet wurde. Auch in der Infinitesimalrechnung ist das Vorzeichen der 0 von Bedeutung.
Darstellungen
Das oft genutzte Zweierkomplement zur Darstellung von Integern erlaubt keine vorzeichenbehaftete Null, in anderen Darstellungen ist dies jedoch möglich. In der 1+7-Bit Betrags-Vorzeichendarstellung wird die negative Null durch den Bitstring 1000 0000 repräsentiert. Im 8-Bit Einerkomplement wird die negative Null durch 1111 1111 dargestellt. In allen drei Darstellungen steht 0000 0000 für eine positive Null.
In der Norm IEEE 754 für binäre Gleitkommazahlen sind die Mantisse und der Exponent null für beide Fälle der vorzeichenbehafteten Null. Bei der negativen Null ist dabei das Vorzeichenbit auf 1 gesetzt, bei der positiven Null auf 0. Eine negative Null kann durch arithmetischen Unterlauf bei einer negativen Zahl, durch Rechenoperationen wie (−1.0)*0.0
oder durch Verwenden von −0.0
auftreten.
In der Norm IEEE 754-2008 für binäre Gleitkommazahlendarstellung wird eine negative Null durch einen beliebigen validen Exponenten, einer Mantisse von Null und ein Vorzeichenbit vom Wert Eins repräsentiert.
Eigenschaften
Die Norm IEEE 754 spezifiziert das Verhalten der positiven und negativen Null für zahlreiche Operatoren, das Ergebnis hängt aber auch von der verwendeten Rundungsmethode ab. Es wird angenommen, dass die Verwendung der vorzeichenbehafteten Null in einigen kritischen Situationen geholfen hat, eine höhere numerische Genauigkeit zu erzielen, besonders bei elementaren komplexen Funktionen.[1][2] Andererseits sind sich viele Programmierer des Konzepts einer negativen Null nicht bewusst, was zu unerwarteten Fehlern führen kann. Während die beiden Darstellungen der Null identisch bei numerischen Vergleichen sind, bewirken sie unterschiedliche Ergebnisse bei einigen Berechnungen und haben unterschiedliche Bitmuster.
Arithmetik
Multiplikation und Division folgen den üblichen Regeln der Arithmetik:
- (für )
Addition und Subtraktion werden jedoch speziell betrachtet, je nachdem ob sich Werte aufheben:
- (für endliche ; wenn zum Negativen gerundet wird)
Aufgrund der negativen Null können die Gleichungen und für Gleitkommavariablen , , und nicht zu optimiert werden. Als Spezialfall ist definiert.[3]
Vergleichsoperatoren
Nach der Norm IEEE 754 sollten numerische Vergleichsoperatoren wie ==
in C oder Java die positive und negative Null als gleich ansehen. In diesen Fällen kann die positive von der negativen Null auf folgende Arten unterschieden werden:
- Typ-Konvertierungen der Zahl in einen Integer, um die Bits der Zahlendarstellung zu vergleichen. Dies funktioniert nicht bei der Darstellung im Zweierkomplement.
- Kopieren des Vorzeichens durch die IEEE 754 standardisierte Funktion
copysign()
auf eine Zahl ungleich Null. - Berechnen des Kehrwerts ergibt entweder oder . Die vorzeichenbehafteten Nullen können damit als eine Variante der erweiterten reellen Zahlen betrachtet werden. Eine Division durch null ist dann nur für und unbestimmt, diese ergeben meistens NaN.
Einige Programmiersprachen haben alternative Vergleichsoperatoren, sodass man die beiden vorzeichenbehafteten Nullen voneinander unterscheiden kann. Dies ist beispielsweise in Java bei der equals
-Methode der Double
-Klasse der Fall.[4]
Verwendung in der Wissenschaft
Im wissenschaftlichen Umfeld wird die Notation verwendet für eine negative Zahl, die zu Null gerundet wurde. In einigen Fällen ist das negative Vorzeichen entscheidend, bei Temperaturangaben in Celsius bedeutet eine negative Null beispielsweise eine Temperatur unterhalb des Gefrierpunkts von Wasser.
In der statistischen Mechanik verwendet man manchmal negative Temperaturen als rechnerisches Hilfsmittel, um Besetzungsinversionen zu beschreiben. In diesem Kontext ist die Temperatur −0 größer als jede andere Temperatur und das Gegenteil zu +0. Die Temperaturskala von kalt nach heiß ist dann +0 K, ..., +300 K, ..., +∞ K, −∞ K, ..., −300 K, ..., −0 K.[5]
Literatur
- John Walker: Minus Zero. UNIVAC Memories – Einerkomplement auf UNIVAC 1100 Computern (englisch)
- Michael F. Cowlishaw: Decimal Arithmetic Specification. Version 1.70 vom 7. April 2009 (englisch)
- Bruce Dawson: Comparing floating point numbers vom 25. Februar 2012 (englisch)
Einzelnachweise
- ↑ William Kahan, „Branch Cuts for Complex Elementary Functions, or Much Ado About Nothing’s Sign Bit“, in The State of the Art in Numerical Analysis (eds. Iserles and Powell), Clarendon Press, Oxford, 1987.
- ↑ William Kahan, Derivatives in the Complex z-plane (PDF; 68 kB), Seite 10
- ↑ Mike Cowlishaw: Decimal Arithmetic: Arithmetic operations – square-root. speleotrove.com (IBM Corporation). 7. April 2009. Abgerufen am 27. Juni 2013.
- ↑ Java 7 Dokumentation. abgerufen 27. Juli 2013
- ↑ Charles Kittel und Herbert Kroemer: Thermal Physics (2nd ed.). W. H. Freeman Company, 1980, ISBN 0-7167-1088-9, S. 462.