Heim >Backend-Entwicklung >C++ >Ist Gleitkomma-Arithmetik assoziativ?

Ist Gleitkomma-Arithmetik assoziativ?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 04:47:09378Durchsuche

Is Floating-Point Arithmetic Associative?

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!

Stellungnahme:
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