Blatt · Zahlen

Nachkomma — was in einer Fließkommazahl wirklich steht

0.1 + 0.2 ist nicht 0.3, und das ist kein Fehler, sondern die Bauart. Hier liegt die Zahl offen: jedes Bit anklickbar, daneben der exakte Wert — nicht gerundet dargestellt, sondern mit BigInt vollständig ausgerechnet. Dazu die Frage, die man selten gestellt bekommt: wo genau sitzen die darstellbaren Zahlen, und was kostet es, viele davon zu addieren.

Zahl Vorlagen
Die Zahl, Bit für Bit
Vorzeichen · 1 Bit Exponent · 11 Bit Mantisse · 52 Bit
Wert
Vorzeichen · Exponent · Mantisse
als Bruch
Abstand zum Nachbarn (ULP)
Der exakte Wert

Wo die Zahlen sitzen

Summieren
VerfahrenErgebnisFehler in ULP

Der Vergleichswert ist keine bessere Fließkommazahl, sondern die mit BigInt exakt gerechnete Summe.

Beweis statt Behauptung

Die exakte Darstellung ist nur etwas wert, wenn sie stimmt. Geprüft wird deshalb gegen das Verfahren selbst: jede ausgerechnete Dezimalzahl muss beim Zurücklesen dasselbe Bitmuster ergeben, jeder Nachbar muss genau ein Bitmuster entfernt liegen, und die exakte Summe muss mit der schrittweise aufaddierten Bruchsumme übereinstimmen.

noch nicht geprüft

Warum 0.1 nicht 0.1 ist

Eine binäre Bruchzahl kann nur Summen von Zweierpotenzen darstellen. Ein Zehntel ist im Zweiersystem periodisch — wie ein Drittel im Zehnersystem. Gespeichert wird deshalb die nächstgelegene darstellbare Zahl, und die ist um rund 5.55e-18 zu groß.

Warum die Abstände wachsen

Zwischen zwei Zweierpotenzen liegen immer gleich viele Zahlen: 252. Nach oben wird derselbe Vorrat über einen doppelt so langen Abschnitt verteilt — der Abstand verdoppelt sich mit jeder Oktave. Ab 253 ist er größer als 1, und ganze Zahlen fallen aus dem Raster.

Was hier gemessen wird

Der Fehler beim Summieren wird nicht geschätzt, sondern gegen die mit BigInt exakt gerechnete Summe gestellt und in ULP angegeben — in Vielfachen des Abstands zum Nachbarn. Das ist das einzige Maß, das über Größenordnungen hinweg vergleichbar bleibt.

Eine einzelne HTML-Datei. Kein Build, keine Bibliothek, nichts verlässt den Browser. Alle Blätter: ssims437.github.io