c語言程式,請問為什麼我用float時會出現誤差

時間 2022-02-11 09:50:02

1樓:小城小閱

這個你得知道浮點型資料的儲存格式;

我簡單給你說下,具體不懂你再問我;

11.2的小數部分0.2轉換為2進位制則是無限迴圈的00110011001100110011...

單精度在儲存的時候用23bit來存放這個尾數部分(前面9位元儲存指數和符號);同樣0.6也是無限迴圈的;

而列印格式為%f的時候,資料會以8位元組出棧!這個時候後32bit都是0,(正常來講原數是一直迴圈的)所以列印出的結果就這樣了;

而你定義成雙精度,它本身就是8位元組儲存,(相比單精度儲存,他後32bit是有資料的!)所以這個時候取出的8位元組,四捨五入直接就是0.6!

就好比你定義輸出%.1f一樣,也會列印出0.6,是一個道理!

不知你明白沒。單精度雙精度轉換的時候,一般小數末位不是5的話,都會丟失資料的!原理就像上面說的一樣。記得采納哦親!

2樓:

浮點數,你就別指望他給你算出你想要的值,它都講究精確到小數點後幾位的

3樓:匿名使用者

把輸出改為printf("%.1f",y);

4樓:與子如初見

不是對著呢麼?

浮點型參與運算會有誤差。

請問這C語言程式錯在哪,請問我這C語言程式錯在哪

冬一又二分之一 首先 int a 要加分號 else下面有多條語句,應該加上 include int main int a printf input a scanf d a if a 0 a 100 printf error n else switch a 10 case 10 case 9 pri...

C語言程式問題,我的c語言程式有什麼問題?

fun x,y,1 求每一行的最小值放進y裡面 fun x,y,0 求每一行的最大值放進y裡面 伺服器 這個應該是判斷條件有問題,那個判斷形式應該是?前後返回的是判斷條件為真的時候的值,後面返回的是判斷條件不成立的時候的值,你這個寫法根本沒有改變flag的值,因為根本就沒有做賦值的操作。我的c語言程...

用C語言編寫程式資料結構,用C語言編寫程式 資料結構

第5 題 include include define max 256 typedef int list max typedef int elemtype typedef int status define overflow 1 define ok 1 define list init size 8...