2015-09-29 54 views
1

我正在嘗試編寫一個C程序來查找最小正整數x,以便(1/x)* x不等於1,使用單精度。而且我以雙精度再次做到這一點。我知道,對於單精度x是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對我來說。