Heim > Backend-Entwicklung > C++ > Warum führt die Gleitkommaaddition je nach Reihenfolge der Operationen zu unterschiedlichen Ergebnissen?

Warum führt die Gleitkommaaddition je nach Reihenfolge der Operationen zu unterschiedlichen Ergebnissen?

Barbara Streisand
Freigeben: 2024-12-29 06:17:15
Original
598 Leute haben es durchsucht

Why Does Floating-Point Addition Produce Different Results Depending on the Order of Operations?

Assoziativität in der Gleitkomma-Arithmetik

Gleitkomma-Arithmetik wird zur Darstellung reeller Zahlen in der Informatik verwendet. Aufgrund interner Rundungsfehler kann die Assoziativität von Gleitkommaoperationen fraglich sein.

Problem:

Betrachten Sie den folgenden Code, der drei Gleitkommazahlen addiert und vergleicht ihre Summe zu 1:

cout << ((0.7 + 0.2 + 0.1) == 1) << endl;     //output is 0
cout << ((0.7 + 0.1 + 0.2) == 1) << endl;     //output is 1
Nach dem Login kopieren

Warum ergeben diese Ausdrücke unterschiedliche Ergebnisse? Ergebnisse?

Antwort:

Es ist nicht garantiert, dass die Gleitkommaaddition assoziativ ist. Eine Änderung der Reihenfolge, in der Zahlen addiert werden, kann das Ergebnis aufgrund von Rundungsfehlern verändern.

Laut dem Artikel „What Every Computer Scientist Should Know about Floating Point Arithmetic“ können sogar die Klammern in einem Ausdruck das Ergebnis beeinflussen . Beispielsweise erzeugen die folgenden Ausdrücke unterschiedliche Werte:

(x+y)+z
x+(y+z)
Nach dem Login kopieren

wobei x = 1e30, y = -1e30 und z = 1. Der erste Ausdruck ergibt 1, während der zweite 0 ergibt.

Das obige ist der detaillierte Inhalt vonWarum führt die Gleitkommaaddition je nach Reihenfolge der Operationen zu unterschiedlichen Ergebnissen?. 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