在C語言中關於float型有一處不明 就是單精度的有效位數是7位,為什麼在下面的例子中這8位都是準確的呢

2021-04-30 21:11:45 字數 964 閱讀 7809

1樓:匿名使用者

它是說保證7位準確,並不是說第8位就肯定不準確。

2樓:

type exponent length mantissa length

float 8 bits 23 bits

浮點數的有效位:23bits,合24位

其解析度為:1/(2^24)=0.000,000,059,604644775390625

=0.000,000,06

即浮點數可表示的最小數的單位為0.000000059604644775390625;

其他的數都由0.000000059604644775390625 * 2^x來表示的,

12345678920

12345678900

000000059604644775390625

=12345678848

12345678848=0.000000059604644775390625 * 2^x

具體計算略,原理如此

3樓:匿名使用者

因為計算機儲存浮點數時,是把數看作a*2^b這樣的形式,不是以10為底數,而是以2為底數。即將數轉換成以2為底的「科學計數法」的形式,再由這個形式反轉換成10進位制形式,但資料又有位數限制,所以有些數轉換成二進位制計數法形式後位數超出了限制的位數,那麼轉換回來時得到的數就會與原數有偏差,不同的數這個偏差是不同的,有可能在小數點後第7位,也有可能在第8位,也有可能在其他位數,但能保證第6位之前是正確的。

c語言中,float型別的有效位數不是7位,double的有效位數不是16位嗎?為什麼這個輸出結果 50

4樓:匿名使用者

這個有效位是指小數點後的位數

5樓:匿名使用者

建議搜尋一下 ieee754 看看浮點數的詳細定義。

C語言中如何實現將浮點數float轉成int型別

強制型別轉換 比如 float a 10.5 int b int a 這樣 就轉換了,但是不推薦高精度轉低精度 會丟失精度的就像這個,a是10.5 轉換後變成10了小了太多 c語言中將一個浮點型賦值給整型時,會不會四捨五入?c語言中將一個浮點型賦值給整型時,不會四捨五入,會直接捨去小數部分的資料,也...

C語言中fabs的用法,關於c語言中fabs函式的用法

要包含一個標頭檔案 include,沒有這個標頭檔案是不能使用fabs函式的。加上 include這個標頭檔案 fabs函式是一個求絕對值的函式,求出x的絕對值,和數學上的概念相同,函式原型是extern float fabs float x 用法是 include fabs 函式的宣告 doubl...

C語言中函式宣告的位置有幾種,在C語言中,函式定義跟函式宣告有什麼區別有什麼不同之出?

1.把子函式放主函式main函式外並且是之前定義,無需宣告。2.如果你把子函式放到main函式外,則必須在定義的時候先宣告。3.如果把 子函式放在main函式中就不需要提前宣告瞭。首先,你提的問題就有問題。c是一門程式語言,函式是在源 裡面宣告的。所以你該問在c語言編寫的源 裡,函式宣告的位置有幾種...