浮点数表示方法总结
计算机中数据的表示之关于浮点数
1. 关于浮点数的问题 浮点数的一般格式:
格式(1) 格式(2) 阶码符号
尾数符号
尾数符号阶码符号
数值
注意:(1)一般浮点数尾数采用纯小数(隐含位为0)来表示,即尾数M 与定点小数表示方法相同,由于
尾数的符号位决定整个浮点数的符号,故有时采用格式(2)的形式;
(2)当尾数真值为0(不论阶码何值),或阶码的值比能在机器中表示的最小值还小,计算机把该浮
点数看成零值,称为机器零,即浮点数表示不了真值绝对值很接近0的数,只能看成0处理; (3)尾数通常用原码或补码表示,阶码一般用移码或补码表示,如无特别说明,采用课本44页移码
表示方法。
浮点数表示范围:
0最大正数=最大正尾数⨯2最大阶码 最小正数=最小正尾数⨯2最小阶码 最大负数=最大负尾数⨯2最小阶码 最小负数=最小负尾数⨯2最大阶码
那么给定一浮点数的表示形式,包括符号、阶码、尾数各占位数及其采用哪种机器码表示,如求其能表示最大负数,转化为求这种表示形式的能表示的最大负尾数,最小阶码。 浮点数规格化表示:
为了提高数据的表示精度,当浮点数尾数的真值不为 0 时,满足条件1≤尾数真值≤1,称为一般
2浮点数的规格化表示。如没特别说明,指的是一般的非规格化浮点数。注意规格化浮点数与一般浮点数一样,隐含位也是0,仅仅对尾数真值加上这一约束条件而已。对于不同码制,特征如下: (1)尾数原码表示: (采用形式(1),按照尾数数值位为n 位)
尾数符号
1位
尾数数值n 位
①尾数>0时,其尾数部分形式
01XXXXXXXXXXXXXXXXXX
-n
称为规格化
最大:尾数部分0111…11,真值为1-2最小:尾数部分0100…00,真值为
;
12
;
尾数数值n 位
尾数符号1位
②尾数
11XXXXXXXXXXXXXXXXXX
称为规格化
最大:尾数部分1100…00,真值为-
1; 2
-n
最小:尾数部分1111…11,真值为-(1-2) ;
(2)尾数补码表示: (采用形式(1),按照尾数数值位为n 位)
尾数符号1位
尾数数值n 位
①尾数>0时,其尾数部分形式
01XXXXXXXXXXXXXXXXXX
-n
称为规格化
最大:尾数部分0111…11,真值为1-2最小:尾数部分0100…00,真值为
;
12
;
尾数数值n 位
尾数符号1位
②尾数
10XXXXXXXXXXXXXXXXXX
称为规格化
(注意:某些书上对此含糊其辞,参考清华(郑纬民:计算机系统结构)与上交大的书,以此为准!)
最大:尾数部分1011…11,真值为-(
1
+2-n ) ; 2
最小:尾数部分1000…00,真值为-1;
关于IEEE745浮点数:
表示形式
1位
数值
(1)IEEE754浮点数短浮点数和长浮点数尾数隐含位为1,临时浮点数没有隐含位,注意阶码的偏置值与一般浮点数不同,对于单精度和双精度数
表示真值=(-1) ⨯1. m ⨯2
m s
E -偏置值
;
短浮点数和长浮点数尾数采用隐含位为1称之为规格化的IEEE 短浮点数与长浮点数(注意区别一般的规格化浮点数)。IEEE 标准中也引入了非规格化浮点数,规定当浮点数的指数为允许的最小指数值时,尾数不必是规格化(Normalized )的。有了非规格浮点数,去掉了隐含的尾数位的制约,可以保存绝对值更小的浮点数。
(2)机器零表示为全0;
(3)无限大数阶码全1,尾数全0,符号位指示正无穷或者负无穷。若阶码全1,尾数不全0,表示NaN (非数字)。
(4)由于(2)(3)原因,单精度数阶码部分不能使用11111111和00000000,双精度阶码不能使用[1**********]和[1**********]。 2. 课本习题3-4解答
以下解答采用浮点数表示形式(1),注意本题目不是IEEE754的格式!!!!!指的是一般浮点数。 (1)根据浮点数的表示范围,实质上是找到最大正尾数、最大阶码的表示及其真值(没有特别指出指的是一般格式浮点数,不用考虑规格化)
阶码:移码(课本44-45页),故全1时最大;尾数:补码
二进制表示为:
[***********][1**********]111真值:(1-2-23)2127
(2)实质上是找到最小负尾数、最大阶码(没有特别指出指的是一般格式浮点数,不用考虑规格化)
二进制表示为:
[***********][1**********]000真值:-2127
(3)规格化需要特别注意其尾数的形式!!!尾数为补码,注意其正、负的表示形式
最大正数形式:
[***********][1**********]111真值:(1-2-23)2127 [***********][1**********]000真值:12-128
最小正数形式:
2
最大负数形式:
[***********][1**********]111真值:-(1+2-23)2-128
2
最小负数形式:
[***********][1**********]000真值:-2127
3. 关于IEEE754标准表示范围的讨论(以短浮点数为例)
IEEE754标准的短浮点数采用偏置值为127的移码作为阶码,尾数采用原码表示,规格化的IEEE 短浮点数有隐含位为1。(注意区别于一般的浮点数的特点)故规格化的IEEE 短浮点数表示范围讨论如下: 最大正数,考虑到阶码的取值限制,只能取00000001-11111110,故形式为
[***********][1**********]111真值:(2-2-23)2127 [***********][1**********]000真值:2-126 [***********][1**********]000真值:-2-126
[***********][1**********]111真值:-(2-2-23)2127
最小正数:最大负数:
最小负数:
另,当全0时,用来表示浮点0
关于规格化的IEEE 长浮点数的范围,请大家自行推理研究。
上次考试原题:IEEE754标准规定32位浮点数格式中,符号位1位,阶码为8位,尾数为23位,则能表示的最大规格化正数为: A. +(2-24. 更多>>
(1)数据表示这部分机器码中补码作为重点及难点,对于数据的表示,着重从其设计思想上理解,如果实在是不能够理解和推导出这几种机器码的表示方式及范围,只能记住了;对于求数值的机器数,比如负数的补码,可以采用公式,也可采用符号位为1,数值位取反末位加1去得到,反过来求机器数的真值道理亦然;
(2)浮点数这部分是难点,请大家仔细阅读本文,应该能区别开一般的作为理论研究的浮点数,一般的规格化浮点数以及在IEEE754标准下的浮点数之不同;
(3)关于数据表示的内容,课堂上只学到了最基本的,其实还有很多,比如按照某种要求设计一种浮点数,某种浮点数的表示方法的评价标准包括表数精度、表数效率、基值选择、格式设计等等,计算机系统结构学科关于这部分的内容很多很多,有兴趣同学可参考清华大学教授郑纬民编写的《计算机系统结构》一书。
-23
) ⨯2+127 B. +(1-2-23) ⨯2+127 C. +(2-2-23) ⨯2+255 D. 2+127-223