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
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)
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!