IEEE Standard for Floating-Point Arithmetic(IEEE 754,Institute of Electrical and Electronics Engineers)是1985年建立的浮点数计算的技术标准。解决了原来浮点数实现不一致的问题,许多硬件浮点数处理单元使用IEEE 754标准。
1 基本和交换格式(basic and interchange format)
IEEE 754定义了5种基本格式,binary32也叫单精度(single-precision),binary64也叫双精度(double precision)。
2 单精度浮点数(Single-precision floating-point format,binary32)
一个binary32包括,1(符号位,sign bit) + 8(指数位,exponent width) + 24(有效精度,significand precision),明确的significand是23位。
注意下面的值:
,
,
,
计算公式,指数需要减127,小数位需要加1(凑够24位)
上图中:
- 指数位编码(exponent encoding)
指数位编码采用offset-binary
表示,binary32的0偏移(zero offset)
是127
,在IEEE 754标准中也叫exponent bias
。
为了得到真实的exponent,计算时e需要减去127。指数位范围为-126 ~ +127
,即0111 1111
表示指数位是127 - 127 = 0
。指数位0000 0000
和1111 1111
有特殊含义。
0000 0000
时,significand = 0
,此时value = 0
(也可能是-0)。significand != 0
,此时significand不再加1,表示非常小(接近0)的数字。
1111 1111
时,significand = 0
,此时value = infinity
(也可能是-infinity)。significand != 0
,此时value = NaN
。
Decimal digits是:
Decimal E max是:
最小的正常正数是:
最小的正数(指数位全0)是:
最大正数是:
3 双精度浮点数(Double-precision floating-point format, Binary64)
一个binary64包括,1(符号位,sign bit) + 11(指数位,exponent width) + 53(有效精度,significand precision),明确的significand是52位。
注意下面的值:
,
,
计算公式,指数需要减1023,小数位需要加1(凑够53位)
Binary64的指数位编码(exponent encoding)的0偏移(zero offset)
是1023
,指数位范围为-1022 ~ +1023
,即0111 1111
表示指数位是127 - 127 = 0
。指数位 000 0000 0000
和111 1111 1111
有特殊含义,参考Binary32。
Decimal digits是:
Decimal E max是:
最小的正常正数是:
最小的正数(指数位全0)是:
最大正数是:
参考:
https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats
https://en.wikipedia.org/wiki/Single-precision_floating-point_format
https://en.wikipedia.org/wiki/Double-precision_floating-point_format