【问题标题】:IEEE 754: rationale for format: subnormal and normal numbersIEEE 754:格式的基本原理:次正规数和正规数
【发布时间】:2021-07-05 03:25:50
【问题描述】:

有人可以澄清一下吗:

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

【问题讨论】:

    标签: format ieee-754 rationale design-rationale subnormal-numbers


    【解决方案1】:

    浮点格式使用符号(- 或 +)、指数(某个范围内的整数 emine em>max,包括)和一个有效数字,它是 bp 个数字的数字,其中 b 是格式的固定基数,p 称为精度。我们将考虑一种二进制格式,其中 b 为二。

    设有效位数为f0, f-1, f-2,... f1-p,所以有效数字是 sum-p fibi,以及表示的值为 (-1)sbe•sum−p fibi sup>,其中 s 是符号位,e 是指数。

    如果f0为零,我们可以从总和中省略它,表示的值等于(-1)sbe•sum-p fibi = (−1)sbe-1•sum-p fibi+1 = (−1) sbe−1•sum1−p fi-1bi。因此,当f0为零,且e不是emin时,该数字有两种表示形式。对它们都进行编码会很浪费,因此我们需要一种不对这两种表示进行编码的编码方案。

    我们做到了:

    • 某个值 E 对指数 e 进行编码。 sf-1f1-p的值> 直接存储为位。
    • 如果 E 为零,则 eeminf0 为零。
    • 如果E不为零,则eE-biasf0 为 1,其中 bias 为 1−emin
    • E 的特殊值可能被保留以表示无穷大和 NaN,此处不再讨论。)

    这个表示和这个编码方案回答了这些问题:

    为什么次正规数的格式是±(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 相比究竟有哪些优势?
    • @pmor:这个答案中的“因为标准这么说”的形式是什么?以浮点格式表示的数字集来自格式。那么次正规数是那些第一个数字为零并且不能通过调整指数使其非零的数。这纯粹是作为数学逻辑的必要性出现的,而不是“因为标准是这样说的”。
    • @pmor:您的其他问题从不好的角度处理问题。我们不是根据我们希望它们是什么来构建对次正规数或正规数的描述;我们不会选择次正规数来具有某种格式,因为我们希望它们有更多位或其他。它们的出现是因为我们已经有了一个浮点格式,并且 find 正在将它划分为有用的类。说浮点数是格式为 1.F•2^−127 的数字是错误的,因为它包含了正在分区的集合中不存在的数字。
    • @pmor:请注意,我在这里将 1.F•2^−127 的“F”解释为与其他地方用于有效数字尾随位的 F 相同,即它具有IEEE-754 binary32 格式为 23 位。这意味着它有太多位,因此 1.F•2^−127 包含不属于 binary32 格式的数字。如果您的意思是“F”仅表示二进制 32 格式中可用的任何位,那么“1.F•@^−127”不是一个恰当的描述,因为它与浮点格式的描述不同,它使用固定位数的有效数字。
    【解决方案2】:

    我使用简化示例检查了这两种格式的属性。为简单起见,我使用格式0.F × 10^-21.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格式的属性是:

    1. 提供更多动态范围:log10(max_real / min_real):1.99 vs 0.99
    2. 提供的精度较低:可以表示的值较少:100 vs 900

    尽管less precision 似乎对于次规范IEEE 754 首选more dynamic range。因此,这就是为什么次正规数的格式是±(0.F) × 2^-126 而不是±(1.F) × 2^-127

    【讨论】:

    • @chux - 恢复莫妮卡 你能对此发表评论吗?对吗?
    猜你喜欢
    • 2013-02-14
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多