Gleitkomma-Diskrepanzen in Java: Genauigkeitseinschränkungen
In einem Java-Programm kann es beim Summieren von Gleitkommawerten zu eigenartigen Verhaltensweisen kommen . Wie in der Abfrage beobachtet, führt eine einfache Schleife, die 0,04 zu einem Array von 25 Double-Werten hinzufügt, zu Ergebnissen mit unerwartetem Verhalten.
Gleitkommawerte wie IEEE-Einzel- und -Doppelwerte werden häufig in Programmiersprachen verwendet. Allerdings stellen diese Formate die meisten Dezimalbrüche nicht exakt dar. Dies liegt an ihrer binären Gleitkomma-Darstellung, die sich grundlegend von der dezimalen Gleitkomma-Darstellung unterscheidet.
Konkret sind die einzigen Bruchwerte, die im binären Gleitkomma exakt dargestellt werden können, Summen negativer Zweierpotenzen , beispielsweise 0,5 (2^-1), 0,125 (2^-3) oder 0,625 (2^-1 2^-3). Wenn Dezimalbrüche nicht genau als solche Summen dargestellt werden können, handelt es sich um eine leichte Näherung.
Im bereitgestellten Beispiel kann der Wert 0,96 nicht genau als Summe negativer Zweierpotenzen ausgedrückt werden. Wenn daher der Wert zu 0,04 addiert und mit voller Dezimalgenauigkeit gedruckt wird, weicht das Ergebnis geringfügig von seinem ursprünglichen Wert ab.
Diese Genauigkeitseinschränkung ist in der binären Gleitkommadarstellung inhärent und sollte bei der Arbeit mit berücksichtigt werden Gleitkommaberechnungen. In Fällen, in denen es auf genaue Präzision ankommt, kann die Verwendung alternativer Darstellungen oder Algorithmen erforderlich sein.
Das obige ist der detaillierte Inhalt vonWarum führt das wiederholte Hinzufügen von 0,04 in Java zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!