主题:规格化浮点数究竟有几种?
我目前为止至少见过两种规格化的浮点数,如下:
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)使用浮点数格式举例”这两个小节里提到),但遗憾的是却没有区分它们,所以不能解开我的疑惑。
望各位达人不吝赐教(或讨论)!
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)使用浮点数格式举例”这两个小节里提到),但遗憾的是却没有区分它们,所以不能解开我的疑惑。
望各位达人不吝赐教(或讨论)!