【问题标题】:Units In The Last Place - Intuition最后的单位 - 直觉
【发布时间】:2020-06-06 15:59:24
【问题描述】:

我正在阅读 David Goldberg 的“What Every Computer Scientist Must Know About Floating Point Numbers”,并遇到了关于 ULP 的部分。他举了一个例子:

实际结果:0.0314 = 3.14 x 10 -2

最近的 FP 编号:3.12 x 10 -2

所以,ULP = (3.14 - 3.12) x 10 2 = 2

但是,我无法直观地理解这实际上意味着什么,需要一些帮助。这里的“单位”是什么意思?

【问题讨论】:

  • 我有 Goldberg 的论文,既是 1991 年原始出版物的副本,也是经过编辑的再版,我没有具体日期。我在这两个版本中都找不到您显示的示例。 (有一个使用 .0314 的示例,但它说 error 在最后是 2 个单位,而不是 ULP 是 2。)请提供完整的源代码信息:您在哪里找到它、日期和任何其他识别信息,以及您看到该示例的部分名称或编号。
  • 论文的标题是每个计算机科学家都应该知道的浮点数运算,而不是每个计算机科学家都必须知道的浮点数,并且论文中的文字与此问题中给出的不同。在向他人传达词语时,不要改变词语,尤其是在改变其含义的方式时,这一点很重要。 Goldberg 讨论的是计算结果,而不是“最近的 FP 编号”。这些是不同的东西。 Goldberg 说错误是 2 ULP,而不是 ULP = 2。

标签: floating-point precision


【解决方案1】:

这个问题似乎是指What Every Computer Scientist Should Know About Floating-Point Arithmetic中的这段话:

考虑 β = 10 和 p = 3 的浮点格式,这将在本节中使用。如果浮点计算的结果是 3.12 × 10-2,计算到无限精度时的结果是 0.0314,很明显这在最后一位有 2 个单位的误差.

这段话与问题中给出的有区别:

  • Goldberg 将 3.12 × 10-2 描述为计算的结果,而不是“最近的 FP 编号”。计算可能是一系列操作,尽管每个操作单独产生的浮点数可能与给定相同操作数的对应实数(“无限精度”)操作的结果最接近,但序列的最终结果如果所有运算都使用实数运算而不是浮点运算执行,则不一定是最接近结果的浮点数。
  • Goldberg 说浮点结果相对于实数结果有 2 ULP 的误差,而不是“ULP = 2”。

给定 β = 10 和 p = 3,格式使用三个十进制数字的有效位。 ULP,即最低精度单位,就是最低有效数字的位置值。因此,对于数字 0.0312,ULP 是 0.0001。 Goldberg 中的这段话观察到 .0314 和 .0312 之间的差异是 2 ULP。

【讨论】:

  • 谢谢,它回答了这个问题。很尴尬,我把论文的名字写错了,应该更加小心。一个后续问题。作者说,“如果计算的结果是最接近正确结果的浮点数,它仍然可能有 0.5 ulp 的误差。”为什么不能超过这个? Ex - 无限精度:3.148,结果:3.14(在某些假设的 FP 系统中),那么这给了我 0.8 ULP 的误差?
  • @PrashantPandey:根据 ULP 的定义,相邻的浮点值相隔 1 个 ULP。它们之间的任何数字都比另一个更接近其中一个或正好在中点。因此,它与最近的可表示值的距离永远不会超过 ½ ULP。如果数学结果是 3.148,采用 3.14 和 3.15 可表示的格式,我们将使用 3.15 作为结果,因为它更接近。
  • “根据 ULP 的定义,相邻的浮点值相隔 1 ULP”与 power_of_2 其前身 nextafter(power_of_2, 0) 不连续,这两个值的 ULP 不同,因此之间的距离如“ 1 ULP”似乎指的是“1 ULP(smaller(x,next_x))`。您当然知道,但是“相邻浮点值相距 1 ULP”有其边缘情况值得识别。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2020-10-12
  • 2019-09-10
相关资源
最近更新 更多