Vorzeichen Null - Signed zero

Eine Null mit Vorzeichen ist eine Null mit einem zugehörigen Vorzeichen . In der gewöhnlichen Arithmetik hat die Zahl 0 kein Vorzeichen, sodass −0, +0 und 0 identisch sind. Beim Rechnen ermöglichen einige Zahlendarstellungen jedoch die Existenz von zwei Nullstellen, die oft mit -0 ( negative Null ) und +0 ( positive Null ) bezeichnet werden, die von den numerischen Vergleichsoperationen als gleich angesehen werden, jedoch mit möglicherweise unterschiedlichem Verhalten in bestimmten Operationen. Dies tritt in den Vorzeichen- und Betrags- und Einerkomplement- Darstellungen von vorzeichenbehafteten Zahlen für ganze Zahlen und in den meisten Gleitkomma-Zahlendarstellungen auf . Die Zahl 0 wird normalerweise als +0 codiert, kann aber entweder durch +0 oder –0 dargestellt werden.

Der IEEE 754- Standard für Gleitkommaarithmetik (der derzeit von den meisten Computern und Programmiersprachen verwendet wird, die Gleitkommazahlen unterstützen) erfordert sowohl +0 als auch –0. Real - Arithmetik mit signierten Nullen kann eine Variante der in Betracht gezogen werden Erweitert Reelle Zahl , so dass 1 / -0 = - und 1 / + 0 = + ∞; Die Division ist nur für ± 0/±0 und ±∞/±∞ undefiniert .

Eine Null mit negativem Vorzeichen spiegelt das mathematische Analysekonzept der Annäherung an 0 von unten als einseitige Grenze wider , die mit x  → 0 , x  → 0− oder x  → ↑0 bezeichnet werden kann. Die Notation "–0" kann informell verwendet werden, um eine negative Zahl zu bezeichnen, die auf Null gerundet wurde . Das Konzept der negativen Null hat auch einige theoretische Anwendungen in der statistischen Mechanik und anderen Disziplinen.

Es wird behauptet, dass die Aufnahme einer vorzeichenbehafteten Null in IEEE 754 es bei einigen kritischen Problemen viel einfacher macht, numerische Genauigkeit zu erreichen, insbesondere beim Rechnen mit komplexen Elementarfunktionen. Andererseits widerspricht das Konzept der Null mit Vorzeichen der allgemeinen Annahme, die in den meisten mathematischen Gebieten gemacht wird, dass eine negative Null gleich Null ist. Darstellungen, die eine negative Null zulassen, können eine Fehlerquelle in Programmen sein, wenn Softwareentwickler nicht berücksichtigen, dass sich die beiden Nulldarstellungen bei numerischen Vergleichen zwar gleich verhalten, bei einigen Operationen jedoch unterschiedliche Ergebnisse liefern.

Vertretungen

Die weit verbreitete Zweier-Komplement- Codierung erlaubt keine negative Null. In einer 1+7-Bit- Vorzeichen- und Betragsdarstellung für ganze Zahlen wird negative Null durch die Bitfolge 1000 0000 dargestellt . In einer 8-Bit-Einser -Komplement- Darstellung wird negative Null durch die Bitfolge 1111 1111 dargestellt . In allen drei Codierungen wird positive Null durch 0000 0000 dargestellt . Dies sind jedoch ungewöhnliche Formate, die gebräuchlichsten Formate einschließlich negativer Null sind die unten beschriebenen IEEE 754-Gleitkommaformate.

Negative Null durch IEEE 754-Darstellung in binär32

In binären Gleitkommazahlen nach IEEE 754 werden Nullwerte dadurch dargestellt, dass der vorgespannte Exponent und der Signifikand beide Null sind. Bei einer negativen Null wird das Vorzeichenbit auf Eins gesetzt. Man kann als Ergebnis bestimmter Berechnungen eine negative Null erhalten, beispielsweise als Ergebnis eines arithmetischen Unterlaufs bei einer negativen Zahl, oder −1.0×0.0oder einfach als −0.0.

Bei der dezimalen Gleitkommakodierung nach IEEE 754 wird eine negative Null dadurch dargestellt, dass ein Exponent jeder gültige Exponent im Bereich für die Kodierung ist, wobei der wahre Signifikand Null ist und das Vorzeichenbit eins ist.

Eigenschaften und Handhabung

Der Gleitkomma-Standard IEEE 754 spezifiziert das Verhalten von positiver Null und negativer Null bei verschiedenen Operationen. Das Ergebnis kann von den aktuellen Einstellungen des IEEE-Rundungsmodus abhängen .

Notation

In Systemen, die sowohl vorzeichenbehaftete als auch vorzeichenlose Nullen enthalten, wird die Notation und manchmal für vorzeichenbehaftete Nullen verwendet.

Arithmetik

Addition und Multiplikation sind kommutativ, es müssen jedoch einige Sonderregeln beachtet werden, sodass die üblichen mathematischen Regeln zur algebraischen Vereinfachung möglicherweise nicht gelten. Das folgende Zeichen zeigt die erhaltenen Gleitkomma-Ergebnisse (es ist nicht der übliche Gleichheitsoperator).

Beim Multiplizieren oder Dividieren wird immer die übliche Vorzeichenregel befolgt:

  • (für abweichend von ±∞)
  • (für anders als 0)

Es gibt spezielle Regeln für das Addieren oder Subtrahieren von Nullen mit Vorzeichen:

  • (für anders als 0)
  • (für jede endliche , −0 beim Runden in Richtung negativ)

Wegen negativer Null (und auch wenn der Rundungsmodus aufwärts oder abwärts ist) können die Ausdrücke −( xy ) und (− x ) − (− y ) für Gleitkommavariablen x und y nicht durch y . ersetzt werden - x . Jedoch kann (−0) + x durch x mit Rundung auf das nächste ersetzt werden (außer wenn x ein signalisierendes NaN sein kann ).

Einige weitere Sonderregeln:

  • (folgt der Vorzeichenregel für die Division)
  • (für Nicht-Null folgt die Vorzeichenregel für die Division)
  • ( Keine Zahl oder Unterbrechung für unbestimmte Form )

Die Division einer von Null verschiedenen Zahl durch Null setzt das Divisions-durch-Null- Flag , und eine Operation, die ein NaN erzeugt, setzt das Ungültige-Operation-Flag. Ein Ausnahmehandler wird aufgerufen, wenn er für das entsprechende Flag aktiviert ist.

Vergleiche

Nach dem Standard IEEE 754 sollten negative Null und positive Null mit den üblichen (numerischen) Vergleichsoperatoren, wie den ==Operatoren von C und Java, gleichgestellt werden . In diesen Sprachen sind möglicherweise spezielle Programmiertricks erforderlich, um die beiden Werte zu unterscheiden:

  • Geben Sie die Zahl in einen Integer-Typ ein, um das Vorzeichenbit im Bitmuster zu betrachten;
  • Verwenden der ISO-C- copysign()Funktion (IEEE 754-CopySign-Operation), um das Vorzeichen der Null auf eine Zahl ungleich Null zu kopieren;
  • Verwenden des ISO-C- signbit()Makros (IEEE 754 isSignMinus-Operation), das zurückgibt, ob das Vorzeichenbit einer Zahl gesetzt ist;
  • Nehmen des Kehrwerts der Null, um entweder 1/(+0) = +∞ oder 1/(−0) = −∞ zu erhalten (wenn die Division durch Null- Ausnahme nicht abgefangen ist).

Hinweis: Das Umwandeln in ganzzahligen Typ funktioniert nicht immer, insbesondere bei Zweierkomplementsystemen.

Einige Programmiersprachen können jedoch alternative Vergleichsoperatoren bereitstellen, die die beiden Nullen unterscheiden. Dies ist beispielsweise bei der Methode equals in der DoubleWrapper-Klasse von Java der Fall .

In gerundeten Werten wie Temperaturen

Informell kann man die Schreibweise "−0" für einen negativen Wert verwenden, der auf Null gerundet wurde. Diese Notation kann nützlich sein, wenn ein negatives Vorzeichen signifikant ist; zum Beispiel bei der tabellarischen Darstellung von Celsius- Temperaturen, wobei ein negatives Vorzeichen unter dem Gefrierpunkt bedeutet .

In der statistischen Mechanik

In der statistischen Mechanik verwendet man manchmal negative Temperaturen , um Systeme mit Besetzungsinversion zu beschreiben , von denen angenommen werden kann, dass sie eine Temperatur größer als positiv unendlich haben, da der Energiekoeffizient in der Besetzungsverteilungsfunktion −1/Temperatur ist. In diesem Zusammenhang ist eine Temperatur von –0 eine (theoretische) Temperatur größer als jede andere negative Temperatur, entsprechend dem (theoretisch) maximal denkbaren Ausmaß der Besetzungsinversion, dem entgegengesetzten Extrem zu +0.

Siehe auch

Verweise

Weiterlesen