СИ программистам вопрос - Компьютерные вопросы

Вопрос СИ программистам вопрос

Регистрация
21 Дек 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Не могу понять почему после компиляции выводится не Ноль, а -0,000275. В чем ошибка? Спасибо

int main()
{
float y1 = 0;

float x = -5;

while(x <= 5.0f)
{
y1 = y1 + x;
x += 0.1f;
}

printf("%f", y1);

return 0;
}
 
Регистрация
24 Дек 2013
Сообщения
102
Репутация
-1
Спасибо
0
Монет
0
Числа с плавающей запятой редко сравнивают, а если и сравнивают то с определенной погрешностью. if (x + 0.000000000001 <= 5.0f ) { //Что-то делаем }
 
Регистрация
18 Сен 2013
Сообщения
97
Репутация
0
Спасибо
0
Монет
0
Я полагаю, что здесь имеет место ошибка округления. Сто раз к x прибавили 0.1, а к y1 - х. Если получилось не 0, а -0,000275, значит, с каждым из этих ста раз была ошибка в среднем на -0,00000275.
 
Регистрация
13 Июн 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0
0.1 нельзя точно перевести в двоичное число в плавающей точкой. Точность можно повысить, если float заменить на double и убрать суффикс f у числовых констант.
 
Сверху Снизу