【问题标题】:What is theoretically the smallest floating point format possible?理论上可能的最小浮点格式是什么?
【发布时间】:2015-06-26 12:34:33
【问题描述】:

假设您正在考虑 IEEE-754 格式的浮点数,例如单精度和双精度,您可能拥有的最小浮点格式是什么?

我知道有半浮子和小浮子,但是小到什么程度仍然有意义?我知道应用程序可能无法使格式适合任何实际用途。

我正在尝试确定您可以拥有的最小尾数位宽度和最小指数宽度是多少?

例如,具有 X.X 格式的尾数是否有意义(假设单精度将表示为 X.XXXXXXXXXXXXXXXXXXXXXXXX)? 另外,有一个宽度为 1 的指数有意义吗?

作为我的想法的一个例子:

如果您有 X.X 格式,并且没有指数,那么您唯一可能的数字是 +/- {1.0,1.1},但是浮点数或格式是否有一些基本因素使这些无法考虑?

【问题讨论】:

    标签: math floating-point ieee-754


    【解决方案1】:

    我偶尔会使用四位 FP 格式:2 个指数位和 1 个有效位。这为您提供了以下一组值:

    encoding    value
      x000     +/-0.0
      x001     +/-0.5
      x010     +/-1.0
      x011     +/-1.5
      x100     +/-2.0
      x101     +/-3.0
      x110     +/-Inf
      x111        NaN
    

    显然,你不能用这种格式做很多有用的计算,但它对教学很有用,因为它是最小的格式,可以为你提供所有有趣的边缘情况(不过,如果你关心的话,没有信号 NaN,除非你想发出“-NaN”信号)。

    从某种意义上说,这是不是完全退化的“最小”浮点格式,但你仍然永远不会使用它,因为它基本上在各方面都比 4 位有符号定点格式更糟糕一个小数位。在一般设置中真正通过此测试的最小浮点格式是半精度(尽管 8b 格式有一些小众用途)。

    no 有效位的三位格式几乎可以工作;它为您提供 +/-0、+/-1、+/-2 和 +/-Inf,但如果您遵循通常的 IEEE-754 编码规则,则没有可用的 NaN 编码。将 b010 用于 Inf 并将 b011 用于 NaN 会更好,但是在算术中不会发生舍入(除了 1 + 1 溢出),这对于教学不是很有用。

    【讨论】:

      【解决方案2】:

      一般来说,浮点数的重点是能够表示比某些二进制数表示所允许的更广泛的值,无论大小。

      我遇到的最小的实用格式是微小的 8 位浮点表示。它看起来像这样:

      [ 1-bit sign ] [ 4-bit exponent ] [ 3-bit mantissa/fraction ]
      

      在这种情况下,您的指数范围被限制在 1/64 到 128 之间(因为您需要表示 NaN/无穷大)。回想一下,FP 被评估为sign x (1 + mantissa) x 2^(exponent - bias)

      您可以继续从 IEEE-754 格式进行推断,甚至提出 6 位浮点表示:

      [ 1-bit sign ] [ 3-bit exponent ] [ 2-bit mantissa/fraction ]
      

      但最终会发生的是,有效值的分布分布在更接近于零的位置(即,与远离零的数字相比,您能够以更高的精度表达更接近零的数字)。

      我想你可以继续下去,直到你用完比特(也许你放弃了符号,或者你根据你的应用程序和你需要的有效值来改变偏差),但在某些时候你需要重新考虑将您的格式称为“浮点”。

      【讨论】:

      • 那么,从技术上讲,您可以拥有的最小尺寸是多少?假设您保留符号位。
      • 我猜你可能有一个 3 位 FP 数(1 位符号、指数和尾数)。由于这不是有效的 IEEE 格式,因此您必须定义是否要表示零和无穷大。在 IEEE-754 中,它们分别以 0 和 0xFF(最大值)的值表示在指数中,因此这就是您可以用 1 位指数表示的全部内容。也许如果您决定不需要无穷大/NaN,您仍然可以存储更多值,但您只有 6 个数字(另外两个将是 +/- 0)。
      • 对于 IEEE-754 格式,您确实需要至少两个指数位(否则您没有正常的数字,所以它只是带有 Inf 和 NaN 的定点格式)。您需要一个符号位,并且您需要一个有效位才能获得 NaN。所以在有意义的意义上,四位是最小的。
      【解决方案3】:

      八位浮点格式作为一种数据存储格式并不少见(例如,μ-law 音频编码基本上是一种浮点格式)。它们通常不用于存储分数,而是将相当小的整数的近似值存储在更小的空间中。带有 4+1 位尾数的有符号格式可以精确地保存高达 +/-31 的整数,并且最大范围为 +/- 1,984 (31*64);带有 4+1 位尾数的无符号格式可以将该范围扩展到 507,904 (31*16,384)。这种格式对计算没有用处,因为每次计算都可能会丢失大量尾数,而且开始时没有多少尾数。尽管可以使用较小的浮点格式,但通常最好使用映射表。例如,当使用具有 2+1 位尾数的浮点格式时,从 32 到 80 的值将形成序列 (32, 40, 48, 56, 64, 80);连续值之间的比率范围为 5:4 (1.250) 到 8:7 (1.143)。

      使用“更平滑”的压扩表,每个因子为 4 步,可以使用序列 (32, 38, 45, 54, 64, 76),产生比率 (1.188, 1.184, 1.200, 1.185, 1.188)。如果只有例如64 个可能的信号值,一个 64 项的表将允许将任何值转换为其更长的表示;反向转换可能需要一个稍大的表,但即使该表也可能非常小,因为最大和最小可表示值之间的比率不会很大。

      【讨论】:

        猜你喜欢
        • 2022-11-27
        • 2012-06-11
        • 2019-06-23
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多