IEEE 754标准定义了在计算机系统中,用二进制表示浮点数的标准。
二进制浮点数表示
sign 为符号位 exponent 为指数位(以2为底) fraction为分数部分
Value=sign*exponent*fraction
一、IEEE 754的前世今生
在IEEE 754出现前,各家计算机公司自己使用自己的数值表示标准,当时在移植代码时非常困难。1976年,Intel为8086微处理器引入浮点协处理器时意识到,硬件工程师并不善于数值的定义。于是,Intel找到当时最优秀的数值专家--加州大学伯克利分校的 William Kahan 教授,Kahan教授又找了CooNaN和Stone协助,共同完成了Intel浮点数格式设计。
IEEE(Institute of Electrical and Electronics Engineers)认识到Intel的浮点表示方案的优秀,决定采用类似Intel的方案作为 IEEE 的标准浮点格式。1985 年推出了二进制浮点运算标准 IEEE 754(IEEE Standard for Binary Floating-Point Arithmetic,ANSI/IEEE Std 754-1985),该标准限定指数的底为 2,并于同年成为 ANSI 标准。目前,几乎所有的计算机都支持 IEEE 754 标准,它大大地改善了科学应用程序的可移植性。
IEEE后来又推出了与底数无关的二进制浮点运算标准--- IEEE 854。1987年,被美国引用为 ANSI 标准。1989 年,国际标准组织 IEC 批准 IEEE 754/854 为国际标准 IEC 559:1989。修订后,标准号改为 IEC 60559。目前,几乎所有的浮点处理器完全或基本支持 IEC 60559。
二、IEEE 754定义
IEEE 754定义了四种浮点数值的方式:
单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。
单精度表示(32位)
双精度表示(64)
IEEE 标准除定义了表示格式,还定义了以下特殊值:±0、反向规格化的数、±∞ 和 NaN。
十进制转换为二进制实例 (59.25)
整数部分:
59 ➗ 2 =29 -----1
29 ➗ 2 =14 -----1
14 ➗ 2 =7 -----0
7 ➗ 2 =3 -----1
3 ➗ 2 =1 -----1
1 ➗ 2 =0 -----1
小数部分:
0.25 x 2=0.5 ------0
0.5 x 2=1 ------1
按位表示(x86的字节序):
59.25------>111011.01
二进制转十进制 (111011.01)
1-->1*2*2*2*2*2-->32
1-->1*2*2*2*2---->16
1-->1*2*2*2------->8
0-->0*2*2---------->0
1-->1*2------------>2
1-->1--------------->1
.
0-->0*2的-1次方---->0
1-->1*2的-2次方---->0.25
将值求和:
111011.01---->59.25