浮點數小記

2021-10-07 12:11:32 字數 822 閱讀 8849

學習當中會碰到浮點數,之前不理解,這次集中查資料終於弄懂了,在這裡做下記錄。

浮點數float分為 半精度浮點數(16位)、單精度浮點數(32位)以及雙精度浮點數(64位)。

浮點數由符號位(signed)、指數字(exponent)、尾數字(mantissa)以及基數構成,二進位制浮點數基數是2,十進位制浮點數基數是10。

半精度浮點數:符號位1位 指數字5位 尾數字10位

單精度浮點數:符號位1位 指數字8位 尾數字23位

雙精度浮點數:符號位1位 指數字11位 尾數字52位

浮點數二進位制轉十進位制公式:

n=(-1)s*m*2^e
這裡以單精度浮點數為例:

1. 規格化:當指數字e表示的二進位制序列不全為0或者不全為1時,此時浮點數表示為規格化形式,e被解釋為表示偏置形式的整數。

比如:單精度浮點數bias=2^7-1=127,e=1000_0001 =129,e=129-127=2.

對於規格化的浮點數,規定m左邊隱藏了乙個"1",即m=|1.m|。比如

m=23』b1001_00…000,則m=1+0.5+0.0625=1.5625。

所以單精度規格化浮點數計算公式為;

這裡舉乙個簡單地例子:

機器碼=1_1000_0010_1001_0000_0000_0000_0000_000

s=1,e=130,m=0.5625

n=-1*(1.5625)*2^(130-127)=-12.5

2. 非規格化

當e表示的二進位制序列全為0時,此時非規格化,

浮點數 儲存

關鍵字 體系結構 ieee754 浮點數 儲存 main 如果不執行上面的 讓我們來直接判斷,輸出的結果會是什麼?而在你執行程式之後,結果卻很讓人詫異 123.456001。為什麼會是123.456001?有六位小數可以理解,最後那個1是為何?有很多人解釋說最後那個1是亂碼,隨機的。嘿嘿 其實無論你...

浮點數操作

float fx 49.03f int nx fx 100 printf d nx 執行上述 結果 4902。用vc6.0,2005,gcc編譯執行結果都是一樣。為什麼會這樣呢,是因為浮點數運算具有不精確性。其實編譯上面的 編譯器會有警告的。warning c4244 initializing co...

浮點數比較

在數 算當中經常會涉及到判斷兩個數是否相等的情況 對於整數很好處理 a b這樣的乙個語句就可以解決全部的問題 但是對於浮點數是不同的 首先,浮點數在計算機當中的二進位制表達方式就決定了大多數浮點數都是無法精確的表達的 現在的計算機大部分都是數字計算機,不是模擬機,數字機的離散化的資料表示方法自然無法...