首页 > 解决方案 > IEEE 754:格式的基本原理:次正规数和正规数

问题描述

有人可以澄清一下:

  1. 为什么次正规数的格式究竟是±(0.F) × 2^-126而不是±(1.F) × 2^-127
  2. 为什么正常数字的格式是:±(1.F) × 2^exp而不是说±(11.F) × 2^exp,或者说, ±(10.F) × 2^exp

标签: formatieee-754rationaledesign-rationalesubnormal-numbers

解决方案


浮点格式使用符号(− 或 +)、指数(在e mine 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,数字有两种表示形式。对它们都进行编码会很浪费,因此我们需要一种不对这两种表示进行编码的编码方案。

我们做到了这一点:

  • 某个值E对指数e进行编码。sf -1f 1-<em>p的值直接存储为位。
  • 如果E为零,则ee minf 0为零。
  • 如果E不为零,则eE −<em>bias 且f 0为 1,其中偏差为 1−<em>e min
  • (可以保留一个特殊的E值来表示无穷大和 NaN,这里不再讨论。)

这种表示和这种编码方案回答了以下问题:

为什么次正规数的格式是 ±(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 代表不同的数字,所以没有重复要消除,也没有理由说其中一个是正常的,另一个不是。


推荐阅读