有人可以澄清一下:
- 为什么次正规数的格式究竟是
±(0.F) × 2^-126
而不是±(1.F) × 2^-127
? - 为什么正常数字的格式是:
±(1.F) × 2^exp
而不是说±(11.F) × 2^exp
,或者说,±(10.F) × 2^exp
?
有人可以澄清一下:
±(0.F) × 2^-126
而不是±(1.F) × 2^-127
?±(1.F) × 2^exp
而不是说±(11.F) × 2^exp
,或者说, ±(10.F) × 2^exp
?浮点格式使用符号(− 或 +)、指数(在e min到e max的某个范围内的整数,包括)和有效数字表示数字,该数字是基数b中的p位数字,其中b是格式和p的固定基数称为精度。我们将考虑一种二进制格式,其中b为 2。
设有效数的位数为f 0 , f -1 , f -2 ,… f 1−<em>p,所以有效数为 sum −p<i≤0 f i •<em> bi,其值表示为 (−1) s •<em>b e •sum -p<i≤0 f i •<em>b i,其中s是符号位,e是指数。
如果f 0为零,我们可以从总和中省略它,表示的值等于(-1) s •<em> be •sum -p<i≤-1 f i •<em>b i = ( - 1) s •<em>b e -1 •sum -p<i≤-1 f i •<em>b i +1 = (-1) s •<em>b e -1 •sum 1-p< i≤0 f i -1 •<em>b i。因此,当f 0为零且e不是e min,数字有两种表示形式。对它们都进行编码会很浪费,因此我们需要一种不对这两种表示进行编码的编码方案。
我们做到了这一点:
这种表示和这种编码方案回答了以下问题:
为什么次正规数的格式是 ±(0. F ) × 2 − 126而不是 ±(1.F) × 2 −127?
±(1.F) × 2 −127形式的次正规数将不包括零,并且将包括不在该格式表示的数字中的数字,因为它们的非零数字低于最低的非所选集合中的零位。(第一段中描述的形式的最低位对应于b e min +(1−<em>p),而形式为 ±(1.F) × 2 -127的数字的最低位对应于b e min −1+(1−<em>p) .)
为什么正常数字的格式是:±(1.F) × 2 exp而不是,比如说,±(11.F) × 2 exp,或者,比如说,±(10.F) × 2 exp?
小数点(或“小数点”)在有效数字中的位置无关紧要,只要它是固定的。如本文所用,在第一个数字之后使用小数点描述的表示等效于在最后一个数字之后或任何其他位置使用小数点的表示,并对指数范围进行适当调整:同一组数字是表示和算术性质是相同的。因此,在考虑 1.F 和 11.F 之间的差异时,我们不在乎小数点在哪里。但是,我们确实关心表示了多少位。浮点格式使用具有固定位数的表示。11.F 比 1.F 多一个数字,我们没有理由对其进行编码。
至于 11.F 和 10.F 之间的差异,之所以存在正常/次正常的区别是因为如果第一位数字为零且指数不是最小值,则在算术上存在相同数字的两种表示。将一种形式指定为标准形式允许我们消除这些重复的表示。但是 11.F 和 10.F 代表不同的数字,所以没有重复要消除,也没有理由说其中一个是正常的,另一个不是。
我使用简化示例检查了两种格式的属性。为简单起见,我使用格式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
more dynamic range
尽管less precision
. _ 因此,这就是为什么次正规数的格式是±(0.F) × 2^-126
而不是的原因±(1.F) × 2^-127
。