Re: [問題] 關於IEEE-754
看板Prob_Solve (計算數學 Problem Solving)作者LPH66 ((short)(-15074))時間16年前 (2008/11/22 02:15)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
※ 引述《Williamkai (威 廉)》之銘言:
: 為什麼這套浮點表示系統
: 最小的正數不是
: 0.0000000…00001*2^-127 = 2^-23*2^-127 = 2^-150
: 而是
: 0.0000000…00001*2^-126 = 2^-23*2^-126 = 2^-149
: 我記得exponent那格是寫00000000
: 然後使用bias of 127 指數部分是0-127=-127
: 為什麼不能用-127? 而是用-126
: 使用-127可以表示的更小的正數
: 請幫幫忙解解我的疑惑
: 我想到頭快爆炸了。
要注意喔
小數部份是有一個隱藏的"整數"位的1
所以如果能讓你用-127的話 最小的正數其實是
1.000000...0001 * 2^-127 = 2^-127 + 2^-151
(別忘了我們要留一個位置給 0 )
而IEEE754現行系統中
正常的(normalized)數的指數只給用到-126
所以這部份最小的是 2^-126
特別處理的-127的部份 (叫做denormalized) 會把那個隱藏的1看成0
但是! 如果這時指數也是-127的話 請問2^-127這個數怎麼表示?
所以這時雖然指數寫著-127 其實意義是-126
因此 2^-127 才能表示成 0 00000000 10000000000000000000000
(即 0.1 * 2^-126 = 2^-127)
也就是說 這裡的指數-127表示說其實指數是-126 只是隱藏的1要看成0而已
以下列一下這附近的幾個數你比較一下
2^-124: 0 00000011 00000000000000000000000
2^-125: 0 00000010 00000000000000000000000
2^-126: 0 00000001 00000000000000000000000
2^-127: 0 00000000 10000000000000000000000
2^-128: 0 00000000 01000000000000000000000
2^-129: 0 00000000 00100000000000000000000
如此一來能表示的最小的正數就是
2^-149: 0 00000000 00000000000000000000001
就是你上面的第二個式子了
這樣一來 0 的表示法就很自然的進入這樣的系統:
0: 0 00000000 00000000000000000000000
即 0.0*2^-126 = 0
---
至於指數部份全部是1的是保留表示無限大或NaN
所以能表示的最大的正數就是
(2-2^-23)*2^127:
0 11111110 11111111111111111111111
--
"LPH" is for "Let Program Heal us"....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.250.80
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章