Re: [問題] C 的float涵蓋單精的非正規化denormalized嗎?
※ 引述《ironmanstock (鋼鐵人史塔克)》之銘言:
: hi,大家好
: 請問C 的float就是代表了IEEE 754單精的正規化嗎?
: C float 可以表達的範圍也包含了 IEEE 754的非正規化的那部份嗎?
: 還是 C 的 float僅僅是 IEEE 754的 正規化的實現?
: 以下是我對IEEE 754 normalize 跟 denormalize 的認知:
: IEEE 754 的單精 可以分成
: 正規化跟非正規化,非正規化應該就是為了表達比正規化更小的值(先不談正負),
: 所以它的數值大小範圍是 承接了正規化的範圍往下走(愈來愈小),也就是更小更接近零,
: (不管正規還是非正規,正負的差別只是Sign bit 是1或0不同而已,
: IEEE 754 數值大小的E 跟 M的欄位的表示跟正負毫無關係,只要先表示好大小,
: 再把sign bit改成1,就變成負的值了。)
: 我不知以上的了解對不對?目前我的疑惑是 C 的float 是 IEEE 754 的全部實現嗎?
: 我對於C 的 float的範圍看到書講 :C 的float就是單精準確,
: 其他的我還弄不清楚? ( C float IEEE 754 兩者的正確關係我還沒摸索出來。)
目前你的理解差不多都是對的
C 語言來說理論上都是 IEEE754 沒錯 (而且都有實作)
除非是在一些比較奇怪的機器上預設不用 IEEE754 的可能才會有差
: meanwhile,我也不懂為何說C float的小數點有效位數是七位數或..?這跟正規化有關嗎?
這倒不是
首先一個觀念是: IEEE754 其實就是二進位的科學記號表示法
例如十進位的 19.25 = 二進位的 10011.01 科學記號記做 1.001101 x 2^4
所以在 mantissa 欄位就記下 0011010000.....0 即小數之後的部份
(那個 4 則經過 bias 127 之後存進 exp 欄位裡 這就不需多說了)
也就是說 mantissa 欄位就是科學記號裡前方數字的部份
它的位數就是你的數字的有效位數
那麼對 float 來說 這裡有 23+1 個 bit
(記得那個一定會在小數點前的 1 也得算進去)
因此它一共是二進位 24 位有效 換算成十進位就是 24*log2 = 24*0.301 = 7.224 位了
也就是說 轉換成十進位之後 七位是準的 第八位不怎麼準 之後都不準
所以有效位數就會說是十進位的七位
: 請幫我看看我哪裡講錯了,並教我一下, 謝謝。
--
有人喜歡邊玩遊戲邊上逼;
也有人喜歡邊聽歌邊打字。
但是,我有個請求,
選字的時候請專心好嗎?
-- 改編自「古 火田 任三郎」之開場白
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.254.23.234
推
02/17 14:55, , 1F
02/17 14:55, 1F
→
02/17 14:56, , 2F
02/17 14:56, 2F
→
02/17 14:59, , 3F
02/17 14:59, 3F
→
02/17 15:02, , 4F
02/17 15:02, 4F
→
02/17 15:03, , 5F
02/17 15:03, 5F
→
02/17 15:04, , 6F
02/17 15:04, 6F