Die Assoziativität der Gleitkomma-Arithmetik
Gleitkomma-Arithmetik wird im wissenschaftlichen Rechnen häufig eingesetzt, doch es stellt sich eine eigenartige Frage: Ist das so? Assoziativ für Addition und Multiplikation? Diese scheinbar einfache Abfrage birgt versteckte Komplexitäten.
Im Bereich der Gleitkommaaddition ist Assoziativität nicht immer garantiert. Ein markantes Beispiel ist der folgende Code:
cout << ((0.7 + 0.2 + 0.1) == 1) << endl; //output is 0 cout << ((0.7 + 0.1 + 0.2) == 1) << endl; //output is 1
Zu unserem Erstaunen führen diese beiden Aussagen zu unterschiedlichen Ergebnissen. Warum ist das so?
Die Erklärung liegt in den Einschränkungen der Gleitkommadarstellung. Gleitkommazahlen werden als Annäherung an den tatsächlichen Wert gespeichert, was zu einer gewissen Ungenauigkeit führt. Beim Addieren mehrerer Gleitkommawerte ist die Reihenfolge der Operationen aufgrund akkumulierter Fehler und Rundungen von Bedeutung.
In dem zitierten Standardpapier „What Every Computer Scientist Should Know about Floating Point Arithmetic“ heißt es treffend:
„Aufgrund von Rundungsfehlern gelten die assoziativen Gesetze der Algebra nicht unbedingt für Gleitkommazahlen.“
Das obige ist der detaillierte Inhalt vonIst Gleitkomma-Arithmetik assoziativ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!