我们都知道科学计数法是用于在科学领域中记录过大或者过小的数字的计数方法。在计算机中,我们同样要面对处理过大或过小数字的情况,这时我们也需要一种计数方法来处理这种情况,这就是小数的浮点表示。
在计算机中,对小数的表示通常有两种方法:定点表示和浮点表示。顾名思义,这两种表示法的不同之处在于对小数点的处理方法的不同,定点表示时小数点在数字位中的位置是固定的,浮点表示时小数点在数字位中的位置是浮动和不固定的。
1.定点表示法
在定点表示法中,小数点的位置是预先约定好的,这个位置在整个计算过程中是不变的。对小数点位置的不同约定就构成了不同的定点表示法,其中比较常用的有两种:定点(纯)小数法和定点整数法。
定点小数法对小数点位置的约定是在符号位之后、数字位之前,因此数据是纯小数,故又称定点纯小数法,其格式为:
在使用定点小数法表示小数时,由于小数点位于所有数字位之前,所以数据的真值永远是绝对值小于1的纯小数。而实际需要计算的数据不一定能够满足这种条件,这就需要我们预先选择合适的比例因子,将参与计算的数据都缩小若干倍,以保证这些参与计算的数据以及所有的中间结果和最终结果都是绝对值小于1的纯小数,最后再将计算结果按比例因子进行放大,恢复应有的数值。
比例因子的选择对于定点小数的运算至关重要,如果比例因子选择不当,将对计算结果的正确性和精度造成影响。如果比例因子选得太大,参与计算的数据在缩小的时候将损失过多的有效精度,给计算结果的精度造成不利影响;而如果比例因子选得过小,计算过程中将会出现结果超过1而溢出的情况,导致机器无法表示而发生错误。
定点整数法对小数点的约定与定点小数法刚好处于两个极端:定点整数法约定小数点在数字位的最低位之后,也就是说,表示的数是没有小数位的纯整数。其格式为:
使用定点整数法进行运算同样也需要通过选取比例因子来将参与计算的数据放大到纯整数,这时对比例因子的选取也是非常重要的。无论是定点小数法还是定点整数法,计算机中实际上都并不表示小数点的位置,小数点的位置是程序编制时由编程人员实现约定的(即选取比例因子)。由于对运算过程中数值范围估计上的困难,比例因子的选取很难做到适当,即既能保证不在计算过程中发生溢出,又尽可能减小运算过程中的精度损失。解决这个问题的办法,就是从根本上避免预先约定比例因子的需要,将比例因子和数值放在一起来表示,这就引入了当前通行的浮点表示法。(www.xing528.com)
2.浮点表示法
和定点表示法不同,浮点表示法更加接近我们所熟悉的科学记数法。在科学记数法中,我们用诸如6.67×10-23,3.086×1013之类的方法来表示特别大或者特别小的数值,同样,我们也可以用诸如0.11011×210或者0.10110×2-11之类的方法,在计算机中表示具有不同真值的小数。在浮点记数法中,一个二进制小数可以被表示成为:
N=2P×S。
这里,P被称为阶码、S被称为尾数。阶码和尾数有各自的符号位和表示法(原码、反码或补码),阶码的符号位又称为阶符,一般用Pf来表示。阶码由Pm-1Pm-2…P0表示,一般是整数;尾数的符号位一般又称数符,用Sf表示,尾数一般由Sn-1Sn-2…S0表示,一般为纯小数。浮点数在计算机中一般表示为:
以当前使用最为广泛的IEEE-754标准规定的单精度浮点数为例:
IEEE-754标准所规定的单精度浮点数由三个部分组成:符号位、阶码和尾数。符号位用来表示整个浮点数的符号,0表示正数、1表示负数。阶码8位,用移码表示。移码是原码的一种变种,它不用符号位来表示真值的正负,而是预先约定一个偏移量,将二进制数的值减去这个偏移量得到真值。比如在IEEE-754规定的单精度浮点数中,阶码采用偏移量为127(7FH)的移码表示,也就是说,127的偏移量使得阶码的值从1~254变为-126~+127,这样就可以在不使用符号位的情况下实现对带符号的阶码的表示。(请考虑一下,移码的加减法计算需要注意些什么问题?)
IEEE-754标准规定的单精度浮点数尾数为23位,但实际上它表示了24位的有效位数,这是依靠尾数的规格化和隐藏位来实现的。根据IEEE-754的规定,浮点数的尾数必须被规格化到1.M的形式,也就是说,规格化的IEEE-754浮点数的尾数真值必须在1和2之间。这样,尾数中小数点前的那一位1就可以被隐藏,成为隐藏位,实现用23位来表示24位有效位数的目的。
下面给出两个IEEE-754标准规定的单精度浮点数的例子。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。