Wie breitet sich ein Gleitkomma-Fehler aus, wenn mathematische Operationen in C ++ ausgeführt werden?
Nehmen wir an, wir haben die folgenden Variablen deklariert
float a = 1.2291;
float b = 3.99;
float
-Variablen haben die Genauigkeit 6, was (wenn ich das richtig verstehe) bedeutet, dass die Differenz zwischen der Zahl, die der Computer tatsächlich speichert, und der tatsächlichen Zahl, die Sie möchten, kleiner als @ is10^-6
das bedeutet, dass beidea
undb
habe einen Fehler, der kleiner als @ i10^-6
so im Computera
könnte eigentlich @ se1.229100000012123
undb
könnte sein3.9900000191919
Jetzt nehmen wir an, Sie haben den folgenden Code
float c = 0;
for(int i = 0; i < 1000; i++)
c += a + b;
meine Frage ist
werdenc
as Endergebnis von @ hat einen Genauigkeitsfehler von weniger als10^-6
auch oder nicht?
und wenn die Antwort negativ ist, wie können wir diesen Präzisionsfehler tatsächlich erkennen und was genau passiert, wenn Sie Operationen beliebig oft und in beliebiger Reihenfolge ausführen?