📜  IEEE 标准 754 浮点数

📅  最后修改于: 2021-09-16 10:45:31             🧑  作者: 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 的指数和全 0 的尾数表示。符号位区分负无穷大和正无穷大。具有无限值的操作在 IEEE 中有很好的定义。
  • 不是数字 (NAN) –
    值 NAN 用于表示错误的值。当指数字段全部为 1 且带有零符号位或尾数不是 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