Проблема, с которой вы столкнулись, заключается в том, что 0.2
не может быть точно представлено в виде числа с плавающей запятой. Поэтому, когда вы пишете val -= 0.2
, то, что вы действительно делаете, это val -= 0.20000000298023224;
. Поэтому вы накапливаете ошибки.
Решение состоит в том, чтобы не использовать плавающую точку для управления вашим циклом. Вместо этого используйте int
и умножьте на константу, чтобы получить val
. e.g.:
int inc = -1;
int i = 10;
while (whatever)
{
if (i == 0) inc = +1;
if (i == 10) inc = -1;
i += inc;
float val = i * 0.02;
}