Heim > Backend-Entwicklung > C++ > Warum wird 0,1 in der Gleitkommaarithmetik nicht genau dargestellt, 0,5 hingegen schon?

Warum wird 0,1 in der Gleitkommaarithmetik nicht genau dargestellt, 0,5 hingegen schon?

Mary-Kate Olsen
Freigeben: 2025-01-15 07:49:13
Original
137 Leute haben es durchsucht

Why is 0.1 not represented exactly in floating-point arithmetic, while 0.5 is?

Gleitkomma-Präzision: Warum 0,5 genau ist, 0,1 jedoch nicht

Gleitkomma-Arithmetik ist zwar für viele Berechnungen effizient, weist jedoch inhärente Einschränkungen bei der präzisen Darstellung aller Dezimalzahlen auf. In diesem Artikel wird untersucht, warum 0,5 eine exakte Darstellung genießt, 0,1 dagegen nicht.

Die Darstellung von 0,1 verstehen

Der IEEE 754-Standard schreibt vor, wie Gleitkommazahlen gespeichert werden. Schauen wir uns die Darstellung von 0.1 an:

<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 01111011 10011001100110011001101</code>
Nach dem Login kopieren
  • Zeichen(e): 0 (positiv).
  • Exponent (eeeee): 123. Wenn wir den Bias (127) subtrahieren, erhalten wir einen effektiven Exponenten von -4.
  • Mantisse (mmmmmmmmmmmmmmmmmmmmmm): Wird als binärer Bruch mit einer impliziten führenden „1“ interpretiert. Die Summe der Mantissenbits ergibt etwa 1,60000002384185791015625.

Die Multiplikation der Mantisse mit 2-4 ergibt ungefähr 0,100000001490116119384765625. Dies ist eine gute Annäherung an 0,1, aber keine exakte Übereinstimmung. Die inhärenten Einschränkungen der binären Darstellung verhindern eine perfekte Konvertierung von der Dezimalzahl 0,1.

Die genaue Darstellung von 0,5

Im Gegensatz dazu hat 0,5 eine einfache Darstellung:

<code>s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 01111110 00000000000000000000000</code>
Nach dem Login kopieren
  • Zeichen(e): 0 (positiv).
  • Exponent (eeeee): 126. Der effektive Exponent (nach Bias-Anpassung) ist -1.
  • Mantisse (mmmmmmmmmmmmmmmmmmmmmm): 0.

Dies entspricht 1 * 2-1 = 0,5, eine perfekte Darstellung.

Fazit: Die Grenzen der binären Präzision

Der Unterschied liegt in der Fähigkeit des Binärsystems, bestimmte Dezimalbrüche exakt darzustellen. Während 0,5 (1/2) eine Zweierpotenz ist und daher leicht binär dargestellt werden kann, ist dies bei 0,1 (1/10) nicht der Fall. Dies führt zu einem leichten Rundungsfehler beim Speichern von 0,1 im Gleitkommaformat, was zu der beobachteten Näherung führt. Programmierer müssen sich dieser inhärenten Einschränkung bewusst sein, wenn sie mit Gleitkommazahlen und präzisionsempfindlichen Anwendungen arbeiten.

Das obige ist der detaillierte Inhalt vonWarum wird 0,1 in der Gleitkommaarithmetik nicht genau dargestellt, 0,5 hingegen schon?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage