ich eine Schleife schreibe, die mit einem Schwimmer erhöht, aber ich habe über ein Gleitkommaarithmetik Problem dargestellt in dem folgende Beispiel kommen:C++ Wie Gleitkommaarithmetik Fehler zu vermeiden
for(float value = -2.0; value <= 2.0; value += 0.2)
std::cout << value << std::endl;
Hier ist die Ausgang:
-2
-1.8
-1.6
-1.4
-1.2
-1
-0.8
-0.6
-0.4
-0.2
1.46031e-07
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
Warum genau bin ich 1.46031e-07
statt 0
bekommen? Ich weiß, dass dies etwas mit Fließkommafehlern zu tun hat, aber ich kann nicht verstehen, warum es passiert und was ich tun sollte, um dies zu verhindern (wenn es einen Weg gibt). Kann mir jemand erklären (oder auf einen Link verweisen), der mir hilft zu verstehen? Jede Eingabe wird geschätzt. Vielen Dank!
"Wie Gleitkommaarithmetik Fehler zu vermeiden" - Sie können nicht, sorry. oft –
dies wurde. Sie können dies sehen, wenn Sie die Genauigkeit der Ausgabe erhöhen: [Beispiel] (http://liveworkspace.org/code/3ZXIxx$0). – bernie
'0.2' gestellt und beantwortet nicht exakt durch einen' float' dargestellt (unter der Annahme IEEE754 Gleitpunktarithmetik) – Mankarse