回覆列表
  • 1 # 雪域匆匆客

    浮點數7位有效數字。

    雙精度數16位有效數字。

    浮點數取值範圍:

    負數取值範圍為 -3.E+38 到 -1.E-45,正數取值範圍為 1.E-45 到 3.E+38。

    雙精度數取值範圍:

    負值取值範圍-1.E+308 到 -4.E-324,正值取值範圍為 4.E-324 到 1.E+308。

    C/C++中浮點數的表示遵循IEEE 754標準。

    一個浮點數由三部分組成:符號位S、指數部分E(階碼)以及尾數部分M(如下)。

    Floating

    S--------E-------M

    1位-----8位-----23位

    Double

    S--------E-------M

    1位-----11位----52位

    十進位制數的換算計算公式為(n^m表示n的m次冪,B表示前面的數字是二進位制):

    S * 2^(E-127) * (1.M)B

    浮點數的精度取決於尾數部分。尾數部分的位數越多,能夠表示的有效數字越多。

    單精度數的尾數用23位儲存,加上預設的小數點前的1位1,2^(23+1) = 。因為 10^7 < < 10^8,所以說單精度浮點數的有效位數是7位。

    雙精度的尾數用52位儲存,2^(52+1) = ,10^16 < < 10^17,所以雙精度的有效位數是16位。

    另外:

    如果你在PI值的有效位後增加數字的話,結果是不會變化的,由於PI值是以常數方式賦值,可以在常數後面加個"f",如PI = 3.f;否則編譯器會先把常數當作double型別,然後再截斷後面的值變為浮點值,這樣的話,就有可能PI的值會有不同,造成你看到的現象。

  • 中秋節和大豐收的關聯?
  • 縱橫江湖22年,服宋國、弱衛國、敗周王,為何鄭莊公卻無法稱霸?