📜  IEEE标准754浮点数

📅  最后修改于: 2021-06-28 14:30:52             🧑  作者: Mango

IEEE浮点算术标准(IEEE 754)是浮点计算的技术标准,由电气和电子工程师协会(IEEE)于1985年建立。该标准解决了在各种浮点实现中发现的许多问题,这些问题使它们难以可靠使用并降低了可移植性。 IEEE标准754浮点数是当今计算机上实数最常见的表示形式,包括基于Intel的PC,Mac和大多数Unix平台。

有几种表示浮点数的方法,但是IEEE 754在大多数情况下是最有效的。 IEEE 754具有3个基本组件:

  1. 尾数的标志–
    这和名称一样简单。 0代表正数,而1代表负数。
  2. 偏差指数–
    指数字段需要代表正指数和负指数。为了获得存储的指数,将偏差添加到实际指数。
  3. 标准化尾数–
    尾数是科学计数法数字或浮点数的一部分,由有效数字组成。在这里,我们只有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

正浮点数的范围可以分为归一化数和非归一化数,它们仅使用分数精度的一部分。由于每个浮点数都有一个对应的负值,因此上述范围在零附近对称。

有五个不同的数值范围,单精度浮点数不能用到目前为止提出的方案表示:

  1. 负数小于–(2 – 2 -23 )×2 127 (负溢出)
  2. 负数大于– 2 -149 (负下溢)
  3. 正数小于2 -149 (正下溢)
  4. 正数大于(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