我們知道,十進位制的小數部分轉換成計算機的二進位制儲存時,採用的是乘2取整法。直到積為1為止。例如,0.8125的轉換過程如下。
0.8125*2=1.625 1
0.625*2=1.25 1
0.25*2=0.5 0
0.5*2=1 1
於是,二進位制的結果為0.1101,也就是1.101*2^(-1),如果以float型別變數儲存該值,只需占用23位有效位數中的3位就夠了,其餘位為0,結果為:
0 01111110 10100000000000000000000
我們來計算下小數值0.3,過程如下。
0.3*2=0.6 0
0.6*2=1.2 1
0.2*2=0.4 0
0.4*2=0.8 0
0.8*2=1.6 1
…… 乘積的結果永遠不為1,這也就意味著,該小數值不能準確地用二進位制來表示,就算double型別有52位有效位數,依然不能準確儲存,只能在精度上比23位有效位數的float型別更接近實際值而已。這也就是浮點型別資料不能夠準確儲存的原因。
1 浮點數近似規則
保留位 guard bit 近似位 round bit 和粘滯位 sticky bit 保留位 近似後的最低位 近似位 保留位的後一位 粘滯位 近似位後的所有位進行或運算後視作一位 truncation 截斷,捨去,因為浮點數的位數是固定的,計算中多出來的位數需要利用一些規則進行捨去 比如四捨五入 ...
浮點數 儲存
關鍵字 體系結構 ieee754 浮點數 儲存 main 如果不執行上面的 讓我們來直接判斷,輸出的結果會是什麼?而在你執行程式之後,結果卻很讓人詫異 123.456001。為什麼會是123.456001?有六位小數可以理解,最後那個1是為何?有很多人解釋說最後那個1是亂碼,隨機的。嘿嘿 其實無論你...
浮點數的儲存
浮點數在計算機中的儲存格式 符號位 指數字 尾數字 符號位 指數字 尾數字 float 1位 8位 23位 共32位 double 1位 11位 52位 共64位 任何浮點數都可表示為 1.m 2e 符號位 sign 表示式中的 0表示正數,1表示負數。指數字 exponent 表示式中的e,指數字...