回 帖 发 新 帖 刷新版面

主题:规格化浮点数究竟有几种?

我目前为止至少见过两种规格化的浮点数,如下:
1、在IEEE754标准中,单精度的规格化浮点数被定义成下面的形式:
                      (-1)^S*2(P-127)*1.M
其中:
    S是符号位,只有0和1,分别表示正负。
    P是阶码,通常使用移码表示(移码和补码只有符号位相反,其余都一样。对于正数而言,原码、反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1)。阶码可以为正数,也可以为负数,为了处理负指数的情况,实际的指数值按要求需要加上一个偏差(Bias)值作为保存在指数域中的值,单精度数的偏差值为127,双精度数的偏差值为1023。例如,单精度的实际指数值0在指数域中将保存为127,而保存在指数域中的64则表示实际的指数值-63,偏差的引入使得对于单精度数,实际可以表达的指数值的范围就变成-127到128之间(包含两端)。
    M为尾数,其中单精度数为23位长,双精度数为52位长。IEEE标准要求浮点数必须是规范的。这意味着尾数的小数点左侧必须为1,因此在保存尾数的时候,可以省略小数点前面这个1,从而腾出一个二进制位来保存更多的尾数。这样实际上用23位长的尾数域表达了24位的尾数。例如对于单精度数而言,二进制的1001.101(对应于十进制的9.625)可以表达为1.001101 × 2^3,所以实际保存在尾数域中的值为00110100000000000000000,即去掉小数点左侧的1,并用0在右侧补齐。
2、而实际上我看到的很多习题,是这么来规格化浮点数的:
比如:
     例题:格式 阶码5位包含一位符号位 尾数5位含一位符号 全部用补码表示 
           顺序为 阶符1位 阶码4位 数符1位 尾数4位 
           (X)10=15/32 (Y)10 =-1.25 求X 和Y的规格化浮点数表示形式
     解答:(X)2=+0.01111 X=+0.1111*2^-1 [X]浮=1,1111 0.1111 
           (Y)2=-1.01    Y=-0.1010*2^1  [Y]浮=0,0001 1.0110

我的问题是:
    为什么同样是规格化浮点数,在IEEE754标准中的尾数是1.……(省略号代表若干位二进制数),而上面这个习题中的尾数却是0.1……(省略号代表若干位二进制数),如果规格化的浮点数只有一种,那么这两处的不同怎么解释,如果规格化的浮点数有不止一种,那么以后遇到需要规格化浮点数的时候究竟该选择哪一种呢?
如果大家还不明白我的问题,可以看看这个帖子:
http://hi.baidu.com/sampras1212/blog/item/5fce0c1f4ecd500c314e157a.html
里面同时提到了两种规格化(分别在“(1)典型的浮点数格式”和“(4)使用浮点数格式举例”这两个小节里提到),但遗憾的是却没有区分它们,所以不能解开我的疑惑。
望各位达人不吝赐教(或讨论)!

回复列表 (共6个回复)

沙发

没人肯给指点一、二吗?哎,自己真的是搞不定啊。

板凳


哎,偌大一个论坛,竟没有人来回答我的问题吗?哪怕我的问题描述的不清楚,也可以给我指出来嘛。不行,一定要顶起来,不得到满意的答案誓不罢休。希望高手们帮帮我啊。。。哎,想学点东西真的好难啊。

3 楼


高手们啊,如果会的话麻烦您给我指点一下好吗?我每天都来看,可是每天都看不到有人回答。。。郁闷啊。

4 楼


自己顶到底!!!

5 楼


我这么虚心地向大家请教问题。。。

6 楼

这个问题楼主自己不是都说了吗?第一种是IEEE的标准,是国际标准。

我来回复

您尚未登录,请登录后再回复。点此登录或注册