概念
- 定点数: 小数点位置事先已有约定,不可再改变。
- 浮点数: 小数点位置可以改变。
- 定点整数:小数点位置约定在最低数值位的后面。
- 定点小数:小数点位置约定在最高数值位的前面。
科学计数法表示
如,123.45 = 1.2345*10^2,其中,
尾数:1.2345(有效数字)
基数:10
指数:2
规范化浮点数表示形式
+-d.dd…d*β^e,(0<=d<β)
尾数中数字的个数称为精度,每个数字d介于0和基数之间。小数点左侧数字不为0。
单精度与双精度存储格式及说明
符号域:
0表示正数,1表示负数。
指数域:
对于单精度为8位,双精度为11位。8位指数可以表示0-255。考虑到正负指数,实际的指数值
按要求需要加上一个偏差值(Bias)作为保存在指数域中的值,对于单精度来说,该偏差值为127,
而双精度则为1023。因此,单精度的某个变量实际指数值0则存储在内存中的指数域中,其值为
127。而保存在指数域中的64则表示实际的指数值-63。由于偏差的引入,对于实际的单精度可
表示的指数值的范围就变为了-127到128之间。而-127(全0)和128(全1)一般保留用作特殊值的
处理。因此,最终实际可用表达的有效指数范围就在-126(emin)到127之间(emax)(包含两端)。尾数域:
单精度为23位,双精度为52位。除却某些特殊情况,IEEE标准要求浮点数必须是规范的。这意
味着尾数的小数点左侧必须为1,因此我们在保存尾数的时候,可以忽略小数点前面的1,从而
多腾出一位来保存更多的尾数。这样我们实际上用23位长的尾数域表达出了24位的尾数。
举例:对于单精度的9.625(dec),转化为二进制浮点数为1001.101,其规范化二进制浮点数表示
形式为1.001101x2^3,实际保存在尾数域中的值为0011 0100 0000 000 0000 0000,
去掉小数点左侧的1,并在右侧用0补齐。表示范围:
对于单精度数,可以表达的最大指数值为2^24-1 = 16777215。由于16777216是偶数,可以
通过除以2,然后调整指数的方式来保存,因此16777216可以被精确保存。因而,单精度的
有效数字不高于8位。转化过程,16777215.0(dec)=111111111111111111111111.0(bin)
调整成规范化形式,1.11111111111111111111111(bin),尾数域全部被占满。不能精确表示时,舍入的标准
当遇到不能准确表示的数值时,必须向最接近的可保存的值进行舍入。当需要舍入的值刚好是
一半时,在前后两个等距接近的可保存的值中,取最后一位有效数字为0者。
举例:16777216的二进制浮点数表示为1.00000000000000000000000
16777218的二进制浮点数表示为1.00000000000000000000001,则16777217的二进制浮点数表示
应舍入为1.000000000000000000000000。