Я пишу цикл, который увеличивается с плавающей запятой, но я столкнулся с арифметической проблемой с плавающей запятой, показанной в следующем примере:
for(float value = -2.0; value <= 2.0; value += 0.2)
std::cout << value << std::endl;
Вот результат:
-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
Почему именно я получаю 1.46031e-07
вместо 0
? Я знаю, что это как-то связано с ошибками с плавающей запятой, но я не могу понять, почему это происходит и что мне делать, чтобы этого не произошло (если есть способ). Может ли кто-нибудь объяснить (или указать мне ссылку), что поможет мне понять? Любой вклад приветствуется. Спасибо!
0.2
не может быть точно представленfloat
(при условии арифметики с плавающей запятой IEEE754). Вы можете увидеть это, если увеличите точность вывода: пример. - person Mankarse   schedule 13.02.2013