Vorzeichenbehaftete Null
# 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 $-0$ 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. 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:

* ${\frac {-0}{\left|x\right|}}=-0$ (für $x\neq 0$)
* $(-0)\cdot (-0)=+0$
* $\left|x\right|\cdot (-0)=-0$
* $(-1)\cdot (+0)=-0$

Addition und Subtraktion werden jedoch speziell betrachtet, je nachdem ob sich Werte aufheben:

* $x+(\pm 0)=x$
* $(-0)+(-0)=(-0)-(+0)=-0$
* $(+0)+(+0)=(+0)-(-0)=+0$
* $x-x=x+(-x)=+0$ (für endliche $x$; $-0$ wenn zum Negativen gerundet wird)

Aufgrund der negativen Null können die Gleichungen $z=-(x-y)$ und $z=(-x)-(-y)$ für Gleitkommavariablen $x$, $y$, und $z$ nicht zu $z=y-x$ optimiert werden. Als Spezialfall ist ${\sqrt {-0}}=-0$ definiert.

### 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 $1/(+0)=+\infty$ oder $1/(-0)=-\infty$. Die vorzeichenbehafteten Nullen können damit als eine Variante der erweiterten reellen Zahlen betrachtet werden. Eine Division durch null ist dann nur für $\pm 0/\pm 0$ und $\pm \infty /\pm \infty$ 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.

## Verwendung in der Wissenschaft

Im wissenschaftlichen Umfeld wird die Notation $-0$ 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.

