Точность C ++ с плавающей запятой [дубликат]
Возможный дубликат:
Примеры неточностей с плавающей точкой
double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;
результат: 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;
результат: 15.000000000000014211
Итак, «а» меньше, чем должно быть. Но если мы возьмем «а» 50 раз - результат будет больше, чем должен быть.
Почему это? И как получить правильный результат в этом случае?