Но если вы допустите val = 12,5 и вычтете 0,125 в цикле, вы можете достичь нуля.

ющая программа:

#include <stdio.h>

int main()
{
    double val = 1.0;
    int i;

    for (i = 0; i < 10; i++)
    {
        val -= 0.2;
        printf("%g %s\n", val, (val == 0.0 ? "zero" : "non-zero"));
    }

    return 0;
}

Производит этот вывод:

0.8 non-zero
0.6 non-zero
0.4 non-zero
0.2 non-zero
5.55112e-17 non-zero
-0.2 non-zero
-0.4 non-zero
-0.6 non-zero
-0.8 non-zero
-1 non-zero

Может кто-нибудь сказать мне, что вызывает ошибку при вычитании 0,2 из 0,2? Это ошибка округления или что-то еще? Самое главное, как мне избежать этой ошибки?

РЕДАКТИРОВАТЬ: Похоже, что вывод не стоит беспокоиться, учитывая, что 5.55112e-17 очень близко к нулю (спасибо @therefromhere за эту информацию).

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

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