C/C++ float與double的有效數字位

版權聲明:本文爲博主原創文章,未經博主 請隨意轉載!! https://blog.csdn.net/VonSdite/article/details/76575247

結論:

  1. 有些編譯器 float的有效數字位是 8位 , 有些有效數字位是 7位
  2. 有些編譯器double的有效數字位是 15位, 有些是 16位
  3. 注意printf(“%f”, x); // 默認輸出6位小數(不要和有效數字混淆)

分析

  • C/C++編譯器標準都遵照IEEE制定的浮點數表示法來進行float,double運算

    • 無論是float還是double,在內存中的存儲主要分成三部分,分別是:

      (1)符號位(Sign): 0代表正數,1代表負數
      
      (2)指數位(Exponent): 用於存儲科學計數法中的指數部分,並且採用移位存儲方式
      
      (3)尾數位(Mantissa): 用於存儲尾數部分
      

      這裏寫圖片描述

由圖可知:

  • float 是 32位, 其中有23位用於存放尾數, 帶有一個固定隱含位.. 所以float的有24個二進制有效位位數.

    • 2^24共有8個十進制位. 所以有些編譯器 float的有效數字位是 8位 , 有些有效數字位是 7位.(注意不是小數的位數, 是有效數字位)
  • double也一樣,是64位, 其中有52位用於存放尾數, 一個固定隱含位. 共有 53個二進制有效位位數.

    • 2^53次方有15個十進制位, 所以有些編譯器double的有效數字位是15位, 有些是16位
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章