為什麼能精確表示的浮點數有效位數是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就不能被精確表示,這是因為浮點數表示的並不是連續的數,而是離散的數。
以上純屬個人見解,還有些東西因為解釋起來太複雜就所以就沒說。