C ++ Как избежать арифметической ошибки с плавающей точкой

Я пишу цикл, который увеличивается с плавающей запятой, но я столкнулся с арифметической проблемой с плавающей запятой, показанной в следующем примере:

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? Я знаю, что это как-то связано с ошибками с плавающей точкой, но я не могу понять, почему это происходит и что я должен сделать, чтобы предотвратить это (если есть способ). Может кто-нибудь объяснить (или указать мне ссылку), который поможет мне понять? Любой вклад приветствуется. Спасибо!

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

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