1.科学记数法
IEEE 754 的开发者最终想到的方法是使用科学记数法的思想。
科学记数法是表示数字的标准方法,您可能熟悉以 10 为基数的科学记数法。
//简写±aen或±aEn
±a×10n
其中一个因数为 a(1≤|a|<10),另一个因数为 10n。例如:
3498523 = 3.498523×106
−0.0432 = −4.32×10−2
同样的方法也适用于以 2 为基数的科学记数法。例如:
−6.84 = −1.71×22
0.05 = 1.6×2−5
2.IEEE 二进制浮点算术标准
IEEE 二进制浮点算术标准 (IEEE 754) 是一种用二进制数的方式表示十进制浮点数的技术标准,由电气和电子工程师协会 (IEEE)于 1985 年制定。
(-1)sign(1 + fraction)×2exponent-bias
IEEE 754 有 3 个基本组成部分:
- 符号(sign)
如果sign bit为 0,则该数字为正数,(−1)0=1。如果sign bit为 1,则该数字为负数,(−1)1=−1。 - 小数(fraction)
又名尾数(mantissa)。 - 指数(exponent)
power(幂指数) = exponent(指数) – bias
IEEE 754 基于以上三个组成部分分为两个:单精度和双精度。
TYPES | SIGN | EXPONENT | FRACTION | 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 |
3.示例:转换到IEEE 754 格式
假设我们希望把0.085(十进制)转换成单精度格式。
3.1查看数字的符号
因为 0.085 是正数,所以sign = 0。
3.2base-2 科学记数法
0.085 = (−1)0(1+fraction)×2power
或
0.085/2power = (−1)0(1+fraction)
0.085/2−1 = 0.17
0.085/2−2 = 0.34
0.085/2−3 = 0.68
0.085/2−4 = 1.36
所以,0.085 = (-1)0(1+0.36)×2−4
//0.36转换成二进制
0.010111000010100011110101110000101000111101011100001011
3.3计算指数
exponent=−4+127=123=01111011
然而,单精度格式只为我们提供 23 位来表示我们数字的小数部分。我们将不得不接受一个近似值,四舍五入到第 23 位数字。所以 IEEE 754 格式的 0.085 是:
0 01111011 01011100001010001111011
4.特殊值
类似的双精度,只是用 2049 替换 255。
VALUE | EXPONENT | FRACTION |
---|---|---|
Exact 0 | 0 | 0 |
Denormalised(非规范化) | 0 | 不全部是 0 |
Infinity(无穷) | 255 | 0 |
Not a Number (NaN) | 255 | 不全部是 0 |
5.浮点数范围
非规范化 | 规范化 | 近似基数10 | |
---|---|---|---|
单精度 | ± 2 -149至 (1 – 2 -23 )×2 -126 | ± 2 -126至 (2 – 2 -23 )×2 127 | ± 约 10 -44.85至约 10 38.53 |
双精度 | ± 2 -1074至 (1 – 2 -52 )×2 -1022 | ± 2 -1022至 (2 – 2 -52 )×2 1023 | ± 约 10 -323.3至约 10 308.3 |
有五个不同的数字范围,单精度浮点数无法用迄今为止提出的方案表示:
- 小于 – (2 – 2 -23 ) × 2 127 的负数(负溢出)
- 大于 – 2 -149 的负数(负下溢)
- 零
- 小于 2 -149 的正数(正下溢)
- 大于 (2 – 2 -23 ) × 2 127 的正数(正溢出)
溢出通常意味着值变得太大而无法表示。下溢是一个不太严重的问题,因为它只是表示精度的损失,它保证接近于零。
有限IEEE浮点数的总有效范围表如下所示:
基数2 | 基数10 | |
---|---|---|
单精度 | ± (2 – 2-23) × 2127 | 大约 ±3.402823466385288598×1038.53 |
双精度 | ± (2 – 2-52) × 21023 | 大约 ±1.797693134862315708×10308.25 |
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/osexp/8711.html