Точность 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 раз - результат будет больше, чем должен быть.

Почему это? И как получить правильный результат в этом случае?

Ответы на вопрос(0)

Ваш ответ на вопрос