作者LPH66 ((short)(-15074))
看板Prob_Solve
标题Re: [问题] 关於IEEE-754
时间Sat Nov 22 02:14:57 2008
※ 引述《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