【发布时间】:2021-07-05 03:25:50
【问题描述】:
有人可以澄清一下吗:
- 为什么次正规数的格式是
±(0.F) × 2^-126而不是±(1.F) × 2^-127? - 为什么正常数字的格式是:
±(1.F) × 2^exp,而不是±(11.F) × 2^exp,或者±(10.F) × 2^exp?
【问题讨论】:
标签: format ieee-754 rationale design-rationale subnormal-numbers
有人可以澄清一下吗:
±(0.F) × 2^-126而不是±(1.F) × 2^-127?±(1.F) × 2^exp,而不是±(11.F) × 2^exp,或者±(10.F) × 2^exp?【问题讨论】:
标签: format ieee-754 rationale design-rationale subnormal-numbers
浮点格式使用符号(- 或 +)、指数(某个范围内的整数 emin 到 e em>max,包括)和一个有效数字,它是 b 中 p 个数字的数字,其中 b 是格式的固定基数,p 称为精度。我们将考虑一种二进制格式,其中 b 为二。
设有效位数为f0, f-1, f-2,... f1-p,所以有效数字是 sum-p fi•bi,以及表示的值为 (-1)s•be•sum−p fi•bi sup>,其中 s 是符号位,e 是指数。
如果f0为零,我们可以从总和中省略它,表示的值等于(-1)s•be•sum-p fi•bi = (−1)s•be-1•sum-p fi•bi+1 = (−1) s•be−1•sum1−p fi-1•bi。因此,当f0为零,且e不是emin时,该数字有两种表示形式。对它们都进行编码会很浪费,因此我们需要一种不对这两种表示进行编码的编码方案。
我们做到了:
这个表示和这个编码方案回答了这些问题:
为什么次正规数的格式是±(0.F) × 2− 126 而不是±(1.F) × 2−127 ?
±(1.F) × 2−127 形式的次正规数将无法包含零,并且将包含不在格式中表示的数字中的数字,因为它们的数字不包含- 低于所选集合中最低非零数字的零位。 (第一段描述的形式的最低位对应bemin+(1−p),而 ±(1.F) × 2−127 形式的数字将具有对应于 bemin-1+(1-p).)
为什么正常数字的格式是:±(1.F) × 2exp 而不是,比如说,±(11.F) × 2exp,或者说,±(10.F) × 2exp?
小数点(或“小数点”)在有效位数中的位置无关紧要,只要它是固定的。如本文所用,在第一个数字之后使用小数点描述的表示等效于在最后一个数字之后或任何其他位置使用小数点的表示,并对指数范围进行适当调整:同一组数字是表示和算术性质是相同的。因此,在考虑 1.F 和 11.F 之间的差异时,我们不在乎小数点在哪里。但是,我们确实关心表示了多少位。浮点格式使用具有固定位数的表示。 11.F 比 1.F 多一个数字,我们没有理由对其进行编码。
至于 11.F 和 10.F 之间的区别,之所以存在正常/次正常的区别是因为在算术上,如果第一个数字为零和指数不是最小值。将一种形式指定为标准形式允许我们消除这些重复的表示。但是 11.F 和 10.F 代表不同的数字,所以没有重复要消除,也没有理由说其中一个是正常的,另一个不是。
【讨论】:
why not 11.F:好的,答案很明确:精度较低。 rationale for format of subnormal numbers(简称 FSN):答案是“因为标准这么说”的风格,这并没有真正给出支持当前 FSN 的真正论据。 would fail to include zero:当前零是一个专用类 (FP_ZERO),因此,不需要 FSN 能够表示零。 would include numbers not in the represented numbers of the format:但是,格式±(0.F) × 2^-126 与格式±(1.F) × 2^-127 相比究竟有哪些优势?
我使用简化示例检查了这两种格式的属性。为简单起见,我使用格式0.F × 10^-2 和1.F × 10^-3,其中F 有2 个十进制数字,没有±。
最小值(非零)/最大值:
Format Min value (non-zero) Max value
0.F × 10^-2 0.01 × 10^-2 = 0.0001 0.99 × 10^-2 = 0.0099
1.F × 10^-3 1.00 × 10^-3 = 0.001 9.99 × 10^-3 = 0.00999
这是图形表示:
在这里我们看到从值0.001 开始格式1.F × 10^-3 不再允许表示更小的值。但是,0.F × 10^-2 格式允许表示较小的值。这是放大版:
结论:从图形表示中我们看到0.F × 10^-2格式相对1.F × 10^-3格式的属性是:
log10(max_real / min_real):1.99 vs 0.99
100 vs 900
尽管less precision 似乎对于次规范IEEE 754 首选more dynamic range。因此,这就是为什么次正规数的格式是±(0.F) × 2^-126 而不是±(1.F) × 2^-127。
【讨论】: