[問題] C 的float範圍有涵蓋單精的非正規化嗎?

看板C_and_CPP作者 (鋼鐵人史塔克)時間15年前 (2011/02/17 12:03), 編輯推噓6(6014)
留言20則, 6人參與, 最新討論串1/1
大家好, 請問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 兩者的正確關係我還沒摸索出來。) meanwhile,我也不懂為何說C float的小數點有效位數是七位數或..?這跟正規化有關嗎 ? 請幫我看看我哪裡講錯了,並教我一下, 謝謝。 (我上一篇同的標題格式不對,所以我重發,請幫我刪掉那一篇 謝謝) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.194.226

02/17 13:06, , 1F
標題不對可以大T修改標題
02/17 13:06, 1F

02/17 13:25, , 2F
結果我回到你上面那篇去了...我自己改標題好了@_@
02/17 13:25, 2F

02/17 14:20, , 3F
我用T改好標題了 感謝^^
02/17 14:20, 3F

02/17 16:08, , 4F
02/17 16:08, 4F

02/17 17:05, , 5F
C float正負範圍(非正規化延長了接近零範圍)寫成:
02/17 17:05, 5F

02/17 17:06, , 6F
正 +1.0*(2的-149次方) ~ +1.11...1*(2的127次方)
02/17 17:06, 6F

02/17 17:06, , 7F
負 -1.0*(2的-149次方) ~ -1.11..11*(2的127次方)
02/17 17:06, 7F

02/17 17:07, , 8F
對嗎?
02/17 17:07, 8F

02/17 22:46, , 9F
我覺得寫得還算清楚 http://ppt.cc/b@O5
02/17 22:46, 9F

02/17 22:50, , 10F
↑ 第四點應可以解決你的疑惑
02/17 22:50, 10F

02/17 23:45, , 11F
Er~~那個網站的第四點剛好略過了最小正數與最大負數的部
02/17 23:45, 11F

02/17 23:46, , 12F
份(簡單的說就是從0+到0與0-到0最接近0又非0的數).
02/17 23:46, 12F

02/17 23:46, , 13F
所以其實並沒有回答到樓主的問題XD
02/17 23:46, 13F

02/17 23:47, , 14F
denorm的數簡言之就是exp全為0的數, 這時候exp不以bias
02/17 23:47, 14F

02/17 23:48, , 15F
127的方式做計算, 而是直接以2^(-127)開始再往後算最多
02/17 23:48, 15F

02/17 23:49, , 16F
22位(扣掉全為0的+-0.0), 所以如果小弟沒記錯的話, 樓主
02/17 23:49, 16F

02/17 23:49, , 17F
推文說的那兩行應該是對的沒錯:)
02/17 23:49, 17F

02/17 23:50, , 18F
至少印象中以前用VC測是這樣, 至於是不是by implement就
02/17 23:50, 18F

02/17 23:51, , 19F
不清楚了; 只是我記得denorm本身也定義在IEEE754裡, 所
02/17 23:51, 19F

02/17 23:52, , 20F
以推測應該不是by implement才對....@_@"
02/17 23:52, 20F
文章代碼(AID): #1DN9uapa (C_and_CPP)