2015-09-29 8 views
1

Я пытаюсь написать программу C, чтобы найти наименьшее положительное целое число x, так что (1/x) * x не равно 1, используя одинарную точность. И я делаю это снова с двойной точностью. Я знаю, что х для одинарной точности является 41, однако, когда я проверить его написания кода C, я все еще получаю 1.00000Округление с плавающей запятой

Это мой тестовый код

int main() 
{ 
    float x = 41; 
    float div = 1/x; 
    float test = div * x; 

    printf("%f\n", test); 
} 

я получаю 1,0000 вместо 0,999999

+1

см. Http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - это просто представление числа –

+0

@EdHeal Как мне получить значение 0.999999? – jqdc2224

+0

@ jqdc2224, попробуйте 'printf ("%. 10f \ n ", test);' –

ответ

1

Вы не видите проблему с помощью

printf("%f\n", test); 

поскольку точность по умолчанию используется printf для чисел с плавающей точкой является 6. Если вы увеличите точность до 10, вы увидите, что номер не 1.0.

printf("%.10f\n", test); 

отпечатки 0.9999999404 для меня.

Смежные вопросы