【问题标题】:Will IEEE 754 float standard lead to biased distribution on floats?IEEE 754 浮点标准会导致浮点分布有偏差吗?
【发布时间】:2014-04-08 15:58:07
【问题描述】:

对于整数,位表示可以覆盖min_intmax_int 之间的所有可能整数。

对于浮点数,这是不可能的,因为在任何范围之间,浮点数都是无穷大的。

我明白了,没问题。

最小的正浮点数是min_float,所以我假设P​​C中的任何浮点数理论上应该是k * min_float,k是一个整数,基本上min_float是最小的单位。 我说的对吗?


https://stackoverflow.com/a/22939681/759076 下方的一条评论说

由于浮点表示 - 有更多的“小” 根据标准,数字比“大”的数字。

我真的无法理解。为什么小数字比大数字多? IEEE 745其实分类浮动成单位,为什么会造成这个值偏差?

【问题讨论】:

  • “在任何范围之间,浮点数是无穷大”你一定在考虑实数。或理性。或二元论。 +inf 和 -inf 之间的浮点数是有限的。

标签: floating-point ieee-754


【解决方案1】:

评论者是正确的 - 小数字比大数字更具代表性。

对于 IEEE 754 浮点数,您将小数位转换为 1 ≤ f Wikipedia's explanation 很不错。我将在这里讨论 64 位双精度数,因为它很容易坚持一种类型。

为简单起见,假设等式为 f × 2e-1023,忽略 f 如何从原始位和符号位导出的细节。对于这个答案的其余部分,假设符号位不存在 - 这实际上并不重要,因为我们谈论的是值的 magnitude,而不是字面上的“大”或“小”与正数和负数有关。

这里的重要部分是指数数据被转换为 2e-1023,其中 e 是 11 位指数。 e 的可能原始值介于 0 和 2047 之间,这转换为 2-1023 到 21024 的指数范围。

现在,由于所有小数值都在 1 ≤ f 2 f.

因此,计算它们相对简单:

  • 252 × 1024 = 4,611,686,018,427,387,904 个可能值 ≤ 2。
  • 252 × 1024 = 4,611,686,018,427,387,904 个可能值 > 2.

编辑:实际上,它比我想象的还要好……对于任何固定的 f 值,都有 2048 个可能的指数值。当指数为 1023 时,计算出的指数 (21023-1023) 变为 20,即 1。由于 f × 1 就是 f,这意味着 50% bound 实际上在 f 处,而不是 2。因此,对于任何给定的 f 值,您随机选择一个指数结果小于或等于 f 的概率是 50%。

请注意,我们正在考虑值的幅度,而不是文字值,因此这里不存在负数。如果您想恢复符号位,只需将每个计数加倍,因为您将有同样多的负数与这些量级。

现在考虑第一个集合中的值范围实际上只是 0 到 f,而第二个集合中的范围是 f 到您的浮点类型可以存储的最大可能值。因此,可表示的数字在“小”数字范围内总是会密集得多。

为了 100% 清楚:所有可表示的浮点数中有 50% 在 -f 到 +f 范围内,所有其他数字构成剩余的 50%。

【讨论】:

  • 好的,我知道了。 mantissa 的可能值是固定的,介于 1 和 2 之间。E 部分将按数量级增加整个值,因此 E越大> 是,它可以表示的值越少。就像在十进制系统中一样,如果我说 M 部分是固定的,假设唯一可能的值是 1.1 和 1.11,那么如果我们将 E 部分增加 1,则可能的值为 11 和 11.1,但不是 11.11;如果将 E 增加 2,可能的值是 110 和 111,但不是 110.1 或 111.1 或 111.11 等。所以更改 E 将导致更大的 更大 值。我理解正确吗?
  • 准确地说,你能解释一下为什么Now, since all fraction values are within the range 1 ≤ f < 2, it holds that there must be 1024 possible values ≤2 for any chosen value of f, and 1024 possible values >2 for any chosen value of f. 成立吗?
  • @JacksonTale 对最大指数(两个无穷大,所有剩余位模式都是NaN)和零指数(两个零所有剩余位模式都是次正规数)的不同处理使情况变得复杂.
  • @JacksonTale 为f 的值选择任意 52 位的随机集合。不管他们是什么。您可以从您选择的单个 f 值中生成多少个不同的浮点值?答案是 2^12 (4096),因为您还有 12 个剩余位:11 个指数位和 1 个符号位。如果我们只看指数——暂时忽略符号——那就是 2048 个可能的值。由于计算为 2^(e-1023),因此您将得到 1024 个正指数值(包括零)和 1024 个负指数值。
  • @JacksonTale 实际上,想想看,我的断言是错误的——引爆点是f,而不是2。不过,这实际上使我的论点更有力,因为f=2 是“最坏的情况”用于获得小数字的可能性 - f 的任何其他值都会让您获得获得小数字的机会更高。
猜你喜欢
  • 2012-01-06
  • 2014-10-18
  • 1970-01-01
  • 2017-04-08
  • 2013-07-24
  • 2021-10-06
  • 2011-05-18
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多