Heim  >  Artikel  >  Backend-Entwicklung  >  Gleitkommaarithmetik und Assoziativität in C, C++ und Java

Gleitkommaarithmetik und Assoziativität in C, C++ und Java

王林
王林nach vorne
2023-08-28 09:09:111223Durchsuche

Gleitkommaarithmetik und Assoziativität in C, C++ und Java

In C, C++ und Java verwenden wir Gleitkommazahlen, um einige mathematische Operationen auszuführen. Jetzt prüfen wir, ob Gleitkommazahlen den Assoziativitätsregeln folgen.

Die Antwort ist nein. In manchen Fällen folgen Gleitkommazahlen nicht den Assoziativitätsregeln. Hier sehen wir einige Beispiele.

Beispielcode

#include<iostream>
using namespace std;
main() {
   float x = -500000000;
   float y = 500000000;
   float z = 1;
   cout << "x + (y + z) is: " << x + (y + z) << endl;
   cout << "(x + y) + z is "<< (x + y) + z << endl;
}

Ausgabe

x + (y + z) is: 0
(x + y) + z is 1

Hier können wir sehen, dass die Ergebnisse nicht gleich sind, aber theoretisch können wir sagen, dass sie immer 1 sind. Nun stellt sich die Frage, wie geht das?

Im ersten Fall wird x + (y + z), (500000000 + 1) ausgeführt. Aber für Gleitkommazahlen Nach dem Runden wird wieder auf 500000000 umgerechnet. Fügen Sie nun -500000000 hinzu und es wird 0. Im zweiten Ausdruck ist der Wert (-500000000 + 500000000) = 0, dann wird 1 hinzugefügt, also das Endergebnis Das Ergebnis ist 1.

Wenn wir ganze Zahlen verwenden, geben beide Ausdrücke das gleiche Ergebnis zurück, nämlich 1.

Das obige ist der detaillierte Inhalt vonGleitkommaarithmetik und Assoziativität in C, C++ und Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen