C ++ Jak uniknąć błędu arytmetycznego zmiennoprzecinkowego

Piszę pętlę, która zwiększa się z pływakiem, ale natknąłem się na arytmetyczny problem zmiennoprzecinkowy zilustrowany w następującym przykładzie:

for(float value = -2.0; value <= 2.0; value += 0.2)
    std::cout << value << std::endl;

Oto wyjście:

-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

Dlaczego właśnie dostaję1.46031e-07 zamiast0? Wiem, że ma to coś wspólnego z błędami zmiennoprzecinkowymi, ale nie mogę zrozumieć, dlaczego tak się dzieje i co powinienem zrobić, aby temu zapobiec (jeśli istnieje sposób). Czy ktoś może wyjaśnić (lub wskazać mi link), który pomoże mi zrozumieć? Każdy wkład jest doceniany. Dzięki!

questionAnswers(6)

yourAnswerToTheQuestion