IEEE浮点算术标准(IEEE 754)是浮点计算的技术标准,由电气和电子工程师协会(IEEE)于1985年建立。该标准解决了在各种浮点实现中发现的许多问题,这些问题使它们难以可靠使用并降低了可移植性。 IEEE标准754浮点数是当今计算机上实数最常见的表示形式,包括基于Intel的PC,Mac和大多数Unix平台。
有几种表示浮点数的方法,但是IEEE 754在大多数情况下是最有效的。 IEEE 754具有3个基本组件:
- 尾数的标志–
这和名称一样简单。 0代表正数,而1代表负数。 - 偏差指数–
指数字段需要代表正指数和负指数。为了获得存储的指数,将偏差添加到实际指数。 - 标准化尾数–
尾数是科学计数法数字或浮点数的一部分,由有效数字组成。在这里,我们只有2个数字,即O和1。因此,规范化的尾数是一个只有小数点左侧为1的尾数。
IEEE 754数字根据上述三个组成部分分为两个:单精度和双精度。
TYPES | SIGN | BIASED EXPONENT | NORMALISED MANTISA | BIAS |
---|---|---|---|---|
Single precision | 1(31st bit) | 8(30-23) | 23(22-0) | 127 |
Double precision | 1(63rd bit) | 11(62-52) | 52(51-0) | 1023 |
例子 –
85.125
85 = 1010101
0.125 = 001
85.125 = 1010101.001
=1.010101001 x 2^6
sign = 0
1. Single precision:
biased exponent 127+6=133
133 = 10000101
Normalised mantisa = 010101001
we will add 0's to complete the 23 bits
The IEEE 754 Single precision is:
= 0 10000101 01010100100000000000000
This can be written in hexadecimal form 42AA4000
2. Double precision:
biased exponent 1023+6=1029
1029 = 10000000101
Normalised mantisa = 010101001
we will add 0's to complete the 52 bits
The IEEE 754 Double precision is:
= 0 10000000101 0101010010000000000000000000000000000000000000000000
This can be written in hexadecimal form 4055480000000000
特殊值: IEEE保留了一些可能含糊的值。
- 零 –
零是一个特殊的值,用指数和尾数0表示。-0和+0是不同的值,尽管它们都是相等的。 - 非正规化–
如果指数全为零,但尾数不是零,则该值是非正规数。这意味着该数字在二进制点之前没有假定的前导数字。 - 无限 –
值+ infinity和-infinity用全1的指数和全零的尾数表示。符号位区分负无穷大和正无穷大。在IEEE中,定义了无穷大的运算。 - 不是数字(NAN)–
值NAN用于表示错误值。当指数字段为全零且带零符号位或尾数不是1后跟零的尾数时,将表示此值。这是一个特殊值,可用于表示尚不包含值的变量。
EXPONENT | MANTISA | VALUE |
---|---|---|
0 | 0 | exact 0 |
255 | 0 | Infinity |
0 | not 0 | denormalised |
255 | not 0 | Not a number (NAN) |
与双精度(用2049代替255)类似,浮点数范围:
Denormalized | Normalized | Approximate Decimal | |
---|---|---|---|
Single Precision | ± 2-149 to (1 – 2-23)×2-126 | ± 2-126 to (2 – 2-23)×2127 | ± approximately 10-44.85 to approximately 1038.53 |
Double Precision | ± 2-1074 to (1 – 2-52)×2-1022 | ± 2-1022 to (2 – 2-52)×21023 | ± approximately 10-323.3 to approximately 10308.3 |
正浮点数的范围可以分为归一化数和非归一化数,它们仅使用分数精度的一部分。由于每个浮点数都有一个对应的负值,因此上述范围在零附近对称。
有五个不同的数值范围,单精度浮点数不能用到目前为止提出的方案表示:
- 负数小于–(2 – 2 -23 )×2 127 (负溢出)
- 负数大于– 2 -149 (负下溢)
- 零
- 正数小于2 -149 (正下溢)
- 正数大于(2 – 2 -23 )×2 127 (正溢出)
溢出通常意味着值已变得太大而无法表示。下溢是一个不太严重的问题,因为它仅表示精度损失,可以保证将其近似为零。
有限IEEE浮点数的总有效范围表如下所示:
Binary | Decimal | |
---|---|---|
Single | ± (2 – 2-23) × 2127 | approximately ± 1038.53 |
Double | ± (2 – 2-52) × 21023
approximately ± 10308.25 |
|
特别行动–
Operation | Result |
---|---|
n ÷ ±Infinity | 0 |
±Infinity × ±Infinity | ±Infinity |
±nonZero ÷ ±0 | ±Infinity |
±finite × ±Infinity | ±Infinity |
Infinity + Infinity Infinity – -Infinity |
+Infinity |
-Infinity – Infinity -Infinity + – Infinity |
– Infinity |
±0 ÷ ±0 | NaN |
±Infinity ÷ ±Infinity | NaN |
±Infinity × 0 | NaN |
NaN == NaN | False |