当前位置:文档之家› 浮点数表示方法的分析研究

浮点数表示方法的分析研究

浮点数表示方法的分析研究.txt13母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。

浮点数表示方法的分析研究
[日期:2006-06-10] 来源:作者: [字体:大中小]
摘要:在《计算机组成原理》课程的教学中,浮点数的表示与运算是一个重点,也是难点。

本文对浮点数的一般表示及标准表示的方法、范围、存储格式等进行了比较深入地比较、分析和研究,力求给读者一个清晰的概述。

关键词:浮点数,表示方法,符号,尾数,阶码,范围
《计算机组成原理》课程是计算机科学与技术专业的一门必修专业基础课,主要是讲述计算机系统几大硬件的组成结构和工作原理。

在其核心部件——运算器(Arithmetician)的运算机制中,浮点数(Floating-point)的表示与运算方法是一个重点,也是难点,笔者在查阅了大量中外文文献的基础上,根据多年的教学实践经验,对浮点数的表示方法、规格化处理方法、表示范围进行了比较详细地分析研究,以方便学生的学习,共同行们参考。

1、浮点数的一般表示方法
在数学中,表示一个浮点数需要三要素:尾数(mantissa)、指数(exponent,又称阶码)和基数(base),都用其第一个字母来表示的话,那么任意一个浮点数N可以表示成下列形式:N=M×BE,例如N1=1.234×10-6, N2= -0.001011×2011等,同样的数字对于不同的基数是不相同的,移动小数点的位置,其指数相应地跟着变化。

在计算机中,表示一个浮点数,同样需要以上三要素,只是阶码与尾数一同存储,基数常有2、8、16等数值,下面的讨论以2为基数进行。

将浮点数放在计算机中存储时,尾数M用定点(Fixed-point)小数的形式,阶码E用有符号整数形式,改变M中小数点的位置,同时需要修改E的值,可以给出有效数字(significant number)的位数,因此M和E决定了浮点数的精度(precision),E指明小数点在B进制数据中的位置,因而E和B决定了浮点数的表示范围(range),浮点数的符号(Sign)是单独考虑,设阶码有m+1位,尾数有n+1位,则一般浮点数的表示方法如图1所示,其中,下标s代表符号位,下标数字代表数字所处的位数,尾数的小数点默认最高数字位M1之前。

图(b)是将尾数的符号位提在最前面,其它部分与图(a)一样,是目前常用的一种表示形式。

图1 浮点数的一般表示形式
在这种表示方法中,阶码的二进制编码(binary code)一般是原码(sign magnitude)、补码(twos complement)或移码(bias),尾数的编码一般是原码或补码。

2、浮点数的规格化处理
在浮点数系统中,小数点的浮动使数值的表示不能惟一,从而给数据处理带来困难,因此有必要使浮点数的表示与存储有一定的标准,考虑到阶码、尾数之间的关系,常将尾数的最高数字位是有效值的数值称为规格化(normalization),由于尾数可以是原码或补码,所以有两种规格化的形式,如表1所示。

表1 规格化数据的形式
尾数编码尾数代码形式说明
正数负数
原码 0.1××× 1.1×××最高数治槐匦胛?
补码 0.1××× 1.0×××符号位与最高数字位必须相反
对于二进制尾数,规格化限制了其范围是:1/2≤|M|<1,通过左右移动小数点,增减阶码的值来进行规格化处理。

在浮点数中,零的表示比较特殊。

一个是零浮点数,一般地,对于规格化的浮点数来说,无论阶码为任何值,尾数为零就认为该浮点数是零,但这实际上是由尾数的舍入而近似的值,要让总体浮点数趋近于零,其阶码必须是一个不超出表示范围的最大的负数才行。

设阶码含符号为n位,则整数阶码所表示的范围是:至或至,即是或。

另一个问题产生于零的唯一表达问题,为了实现用指令测试零,约定在定点数和浮点数格式中零具有相同的表达式,将浮点数的阶码值进行余编码,就像BCD码中余3码加3一样,阶码被描述为E加上,这个就叫偏移(bias),由上面分析可知的取值有两种,浮点数的标准表示形式(IEEE754标准)所采用的是偏移值。

3 浮点数的表示范围
浮点数的表示有一定的范围,超出范围时会产生溢出(flow),一般称大于绝对值最大的数据为上溢(overflow),小于绝对值最小的数据为下溢(underflow)。

浮点数表示范围一般分以下几种情况考虑,设浮点数的阶码和尾数均用补码表示(原码表示比较简单),阶码为m+1位(其中1位是符号),尾数为n+1(其中1位是符号),则浮点数的典型范围值如表2所示。

表2 浮点数的典型范围值
典型范围浮点数代码真值
数符(Ms) 阶码(E) 尾数(M)
最大正数
最小正数
规格化的最小正数
绝对值最大的负数
绝对值最小的负数
规格化的绝对值最小负数 0
1
1
1 011 (11)
100 (00)
100 (00)
011 (11)
100 (00)
100...00 11 (11)
00 (01)
10 (00)
00 (00)
11 (11)
01 (11)
4、标准表示法
为便于软件的移植,浮点数的表示格式应该有统一标准。

1985年IEEE(Institute of Electrical and Electronics Engineers)提出了IEEE754标准。

该标准规定基数为2,阶码E用移码表示,尾数M用原码表示,根据原码的规格化方法,最高数字位总是1,该标准将这个1缺省存储,使得尾数表示范围比实际存储的一位。

实数的IEEE754标准的浮点数格式为:
具体有三种形式:
表3 IEEE754三种浮点数的格式参数
浮点数
类型存储位数偏移值( )
阶码E的取值范围真值表达式
数符(s) 阶码(E) 尾数(M) 总位数十六进制十进制
短实数 1 8 23 32 7FH 127 1~254
长实数 1 11 52 64 3FFH 1023 1~2046
临时实数 1 15 64 80 3FFFH 16383 1~32766
对于阶码为0或为255(2047)的情况,IEEE有特殊的规定,由于篇幅有限,在此不讨论。

在浮点数总位数不变的情况下,其精度值与范围值是矛盾的,因此一般的机器都提供有单、双精度两种格式。

表4中列出了IEEE754单精度浮点数的表示范围,对于双精度只需要修改一下偏移值和尾数位数即可。

表4 IEEE754单精度、双精度浮点数范围
典型范围浮点数代码真值
数符(Ms) 阶码(E) 尾数(M)
最大正数
最小正数
绝对值最大的负数
绝对值最小的负数 0
1
1 11111110
00000001
11111110
00000001 11 (11)
00 (00)
11 (11)
00 (00)
标准浮点数的存储格式与图1(b)相似,只是在尾数中隐含存储着一个1,因此在计算尾数的真值时比一般形式要多一个整数1。

对于阶码E的存储形式因为是127的偏移,所以在计算其移码时与人们熟悉的128偏移不一样,正数的值比用128偏移求得的少1,负数的值多1,为避免计算错误,方便理解,常将E当成二进制真值进行存储。

例如:将数值-0.5按IEEE754单精度格式存储,先将-0.5换成二进制并写成标准形式:-0.510=-0.12=-1.0×2-12,这里s=1,M为全0,E-127=-1,E=12610=011111102,则存储形式为:
1 01111110 000000000000000000000000=BE00000016
这里不同的下标代表不同的进制。

综上所述,笔者通过多年的教学实践,对学生特别容易迷惑的地方进行了分析研究,并给出了结论性的总结,弥补了大多数教课书中讲不明白的问题。

参考文献:
1. John P. Hayes. Computer Architecture and Organization. Third Edition. 北京:清华大学出版社影印,2001.173~178
2. [美]David A. Patterson, John L. Hennessy著.郑纬民等译. COMPUTER ORGANIZATION & DESIGN. Second Edition. 北京:清华大学出版社,200
3.212~214
3.白中英. 计算机组成原理. 网络版,北京:科学出版社,2002.20~21
4.胡越民. 计算机组成与系统结构,北京:电子工业出版社, 2002.58~62。

相关主题