C ++ Gleitkommapräzision [duplizieren]
Mögliches Duplizieren:
Floating Point Ungenauigkeit Beispiele
double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;
result: 0.2999999999999999889
double a, b;
a = 0.3;
b = 0;
for (char i = 1; i <= 50; i++) {
b = b + a;
};
std::cout.precision(20);
std::cout << b << std::endl;
Ergebnis: 15.000000000000014211
So .. 'a' ist kleiner als es sein sollte. Aber wenn wir 50 mal 'a' nehmen, wird das Ergebnis größer sein als es sein sollte.
Warum ist das? Und wie bekomme ich in diesem Fall das richtige Ergebnis?