IEEE 754 為廣泛採納的浮點數表達及運算標準,看似了無新意的「小數點」,卻蘊含大學問。舉例來說,在符合IEEE 754 標準的環境(如主流的C 語言編譯器及作業系統) 中, ... ... <看更多>
ieee 754教學 在 Re: 【問題】 關於IEEE-754 - TransCSI板 - WEB批踢踢(PTT) 的推薦與評價
IEEE -75432bits --> sign|Exponent|Mantissa 1bit 8bits 23bits又IEEE-754的Mantissa的正規化部份是小數點左邊第一個一隱藏=> 1. ... <看更多>
ieee 754教學 在 [轉錄][教學] 計概IEEE754 表示式- 看板CYCU-IM 的推薦與評價
※ [本文轉錄自 Army-Sir 看板]
作者: Liroy (Liroy) 看板: Army-Sir
標題: [教學] 計概 IEEE754
時間: Sun Jan 27 20:53:36 2008
IEEE754為一種二進位小數的標準表示式,以精確度分成單倍精和雙倍精。
單倍精(32bit):以32個bit來表示一個二進位小數,格式如下
s(1 bit) exp(8 bit) fraction(23 bit) => 1+8+23=32 bit(沒錯吧XXXD)
化簡方式分成幾步驟(十進位->IEEE754):
1. 十進位->二進位
2. 二進位正規化
3. exp加上bias值
4. fraction扣去隱藏位元
eg: -5(10)化成IEEE754表示式
1. -5(10) = -101
2. -101 = -1.01 x 2^2
3. 2 + 127 = 129(10) = 10000001(2) - 這個只要一般二進位表示即可
不需用二的補數,因為你已經加上bias了
4. 1.01 -> .01 (1被隱藏起來了,剩下小數點後面的東西)
s exp fraction
=> 1 10000001 01000000000000000000000
ps:可能有人會問127是什麼?127為bias,再化成IEEE754時都固定要加上這個值
又有人問,幹麻加這個,因為這樣的化簡可以簡化兩個IEEE754小數做運算時的步驟
怎樣的簡化,就不在這裡討論範圍內了。(詳見白算盤XXXXD)
ps2:有人會問幹麻把小數點前的那個1隱藏起來呀。答案是,因為正規化時,小數點前
一定是1,所以可以省略,這樣就可以多一個bit來表示小數,可增加小數精確度
ps3:exp只需要用二進位表示就好了,因為你已經加上bias了,所以不會變負的,
不需要用到二的補數來表示這個部份。
----
雙倍精(64 bit):以64個bit來表示一個二進位小數,格式如下
s(1 bit) exp(11 bit) fraction(52 bit) => 1+11+52=64 bit(沒錯吧XXXD)
化簡方式分成幾步驟(十進位->IEEE754):
1. 十進位->二進位
2. 二進位正規化
3. exp加上bias值
4. fraction扣去隱藏位元
eg: -5(10)化成IEEE754表示式
1. -5(10) = -101
2. -101 = -1.01 x 2^2
3. 2 + 1023 = 1025(10) = 10000000001(2) - 這個只要一般二進位表示即可
4. 1.01 -> .01 (1被隱藏起來了,剩下小數點後面的東西)
s exp fraction
=> 1 10000000001 0100...0(好多零~囧 1後面一共有50 bit,自己算吧)
備註:雙倍精bias為1023 (因為exp bit一共有11個)
----
另外單倍精exp最多只能到11111110 ,最小也只能到達00000001
妳會納悶11111111 和 00000000 怎麼不用- -a
因為呀!! 這兩個拿來當另外處理的
exp=255 fraction≠0 =>NaN (表非數字)
exp=255 fraction=0 =>±∞(依s來區別是正還是負)
exp=0 fraction≠0 =>不足位,underflow,denormalized(太小了,小到無法表示)
exp=0 fraction=0 =>用來表示0.0這個數 (有的版本還會分正負零)
雙倍精依此類推,exp無法使用11111111111 和 00000000000
例外處理所表示的跟單倍精一樣,只是255改成2047
......|-------------------|..|..|-------------------|......
*--可用IEEE754表示--* 0 *--可用IEEE754表示--*
亮粉紅表示overflow,數字太大無法表示,∞
亮黃色表示underflow,數字太小無法表示,denormalized number
-- 表示可用IEEE754正規表示式表示的範圍 (中間的0也可以表示喔!!別把他忽略了)
----
此外補充:
IEEE754 單倍精正規表示範圍最大正數:≒ 2 x 10^38
最小正數:≒ 2 x 10^-38
最大負數:≒ -2 x 10^-38
最大負數:≒ -2 x 10^38
IEEE754 雙倍精正規表示範圍最大正數:≒ 2 x 10^308
最小正數:≒ 2 x 10^-308
最大負數:≒ -2 x 10^-308
最大負數:≒ -2 x 10^308
----
最大數和最小數證明:
IEEE754單倍精最大正數->0 11111110 11111111111111111111111 (IEEE754)
=> + 1.11111111111111111111111 x 2^(254-127) ≒ 2.0 x 2^127 ≒ 2 x 10^38
^^^^^^^^^^^^^^^^^^^^^^^^^->大約等於2.0,大家應該沒異議吧!
IEEE754單倍精最小正數->0 00000001 00000000000000000000000 (IEEE754)
=> + 1.00000000000000000000000 x 2^(1-127) ≒ 1.0 x 2^-126 ≒ 2 x 10^-38
其他依此類推,我懶著打了ˊˋ。數零數到我眼睛都花了~ε(┬┬_┬┬)3
這應該就全部IEEE754的精隨了!!~有問題再問吧<(_._)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.105.172.111
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.234.177
... <看更多>