1. 程式人生 > >為什麼能精確表示的浮點數有效位數是7位

為什麼能精確表示的浮點數有效位數是7位

首先明確,7位有效位是整數部分和小數部分位數的和。例如:

float a=61.420001f。列印輸出a=61.420002(62.420001機器無法表示,會自動向最近的能表示的數舍入成61.420001)  

(整數部分2位+小數部分6位=8位>7位,所以不能精確表示)

為了深入理解原理,我們首先要了解浮點數在計算機內的表示。在計算機內,浮點數是以32位二進位制數來儲存表示的,其中32位分為符號位(1位)、階碼(8位)和尾數(23位)三個部分組成,參考計算機組成原理教材,格式如下,:

符號位          階碼          尾數

1位                8位           23位

比如130.0可表示為:130.0=1000  0010B=1.000  0010*(2^7)  //都要轉化為1.xxx*(2^yy)這種形式

符號位(正負號)                  階碼(指數7+127)                                            尾數(小數部分) 

0                                             1000 0110                                                        0000 0100 0000 0000 0000 000

從浮點數二進位制表示格式可以知道,尾數部分表示的是23位效位數,因為23位尾數表示的是小數點右邊的數,小數點左邊是預設是1,所以一共能表示24位有效數,

      而 2^(24) = 16777216,轉化為十進位制10^7 < 16777216 < 10^8,所以只能精確表示7位。

注意事項:以上只能說明超過7位一定不能精確表示,而小於7位時有可能被精確表示,為什麼這麼說,比如0.1就不能被精確表示,這是因為浮點數表示的並不是連續的數,而是離散的數。

以上純屬個人見解,還有些東西因為解釋起來太複雜就所以就沒說。