文档介绍:
浮点数在计算机中的存储
十进制浮点数格式:
浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数(exponent)两部分。比如 3.684*10^2. 在十进制中,指数的基数为 10,并且表示小数点移动多少位以生成系数。每次小数点向前移动时,指数就递增;每次小数点向后移动时,指数就递减。例如,25.92 可表示为 2.592 * 10^1,其中 2.592 是系数,值 10^1 是指数。必须把系数和指数相乘,才能得到原始的实数。另外,如 0.00172 可表示为 1.72*10^-3,数字 1.72 必须和 10^-3 相乘才能获得原始值。
二进制浮点格式:
计算机系统使用二进制浮点数,这种格式使用二进制科学计数法的格式表示数值。数字按照二进制格式表示,那么系数和指数都是基于二进制的,而不是十进制,例如 1.0101*2^2.
在十进制里,像 0.159 这样的值,表示的是 0 + (1/10) + (5/100) + (9/1000)。相同的原则也适用二进制。比如,1.0101 乘以 2^2 后,生成二进制值 101.01 ,这个值表示二进制整数 5,加上分数(0/2) + (1/4) 。这生成十进制值 5.25 。下表列出几个二进制小数以及它们对应的十进制值:
二进制
十进制分数
十进制值
0.1
1/2
0.5
0.01
1/4
0.25
0.001
1/8
0.125
0.0001
1/16
0.0625
0.00001
1/32
0.03125
0.000001
1/64
0.015625
几个二进制浮点例子:二进制
十进制分数
十进制值
10.101
2+1/2+1/8
2.625
10011.001
19+1/8
19.125
10110.1101
22+1/2+1/4+1/16
22.8125
1101.011
13+1/4+1/8
13.375
编写二进制浮点值时,二进制通常被规格化了。这个操作把小数点移动到最左侧的数位,并且修改指针进行补偿。例如 1101.011 变成 1.101011*2^3
浮点数的存储
IEEE 标准754 浮点数标准使用 3 个成分把实数定义为二进制浮点值:
符号
有效数字
指数
符号位表示值是负的还是正的。符号位中的 1 表示负值,0 表示正值。
有效数字部分表示浮点数的系数(coefficient)(或者说尾数(mantissa))。系数可以是规格化的(normalized),也可以是非规格化的(denormalized)。所谓规格化,就是任何一个数的科学计数法的表示都可为1.xxx*2^n,既然小数点左边的一位都是1,就可以把这一位省略。单精度浮点数23bit的尾数部分,可表示的精度却为24位,道理就在这里。
指数表示浮点数的指数部分,是一个无符号整数。因为指数值可以是正值,也可以是负值,所以通过一个偏差值对它进行置偏,及指数的真实值=指数部分的整数—偏差值。对于32位浮点数,偏差值=127;对于64位浮点数,偏差值=1023.
浮点数的这 3 个部分被包含在固定长度的数据格式之内。IEEE 标准754
内容来自淘豆网www.taodocs.com转载请标明出处.