計算機中浮點數的表示,IEEE 754標準
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)是: