【问题标题】:When computing arithmetic means, what way of summing is more precise?在计算算术平均值时,哪种求和方式更精确?
【发布时间】:2016-03-13 07:20:02
【问题描述】:

给定计算 n IEEE 754 双精度浮点数 x0 的算术平均值的任务,x1, ..., xn - 1,是不是更精确了 p>

(ksumixi) / n

(即首先对所有 xi 进行 Kahan 求和,然后除以 n)或

ksumi (xi / n em>)

(即先将xi除以n,然后进行Kahan-summing)?

我自己的测试(在 [0, 1 中使用均匀分布的随机数)和在以 0 为中心且 σ = 1 的整个浮点数范围内的正态分布数)都没有定论,表明两者都非常精确,但是我选择的测试数据可能特别差。

【问题讨论】:

  • 我怀疑选择将取决于您对数据的了解,即值的可能范围和n 的典型值。对于较大的n 和较大的x 值,第一种方法可能会遇到溢出问题。相反,对于较小的 x 值和足够大的 n,您可能会使用第二种方法获得非规范化。
  • @PaulR 假设这两种情况都没有发生,那么更精确的选择是什么?
  • 我的直觉是第一个,因为涉及的总操作较少,但我没有证据支持这一点。
  • 我还希望第二种方法平均更好,因为除法是不准确的运算(与 Kahan 求和相比),在第二种方法中,许多除法将单独向上或向下舍入(如果xi 的分布使得它们在除以 n 时向上或向下舍入的可能性差不多)。
  • 很重要的一点是所有 xi 是否具有相同的符号。如果他们不这样做,最好先将它们尽可能精确地求和,然后有一个单独的除法引入相对于总数的误差,而不是相对于和的大小的大量误差。

标签: floating-point average precision mean ieee-754


【解决方案1】:

先求和,再除。如果在一般情况下先除然后求和,则会引入与最大幅度求和成比例的舍入误差,这在很大程度上违背了 Kahan 求和的点(在灾难性取消的情况下,这是您要防范的,您的结果是除法的舍入误差)。

先求和确实有更大的过度溢出风险;要正确处理 that,您将根据需要重新调整精确的 2 次方,以防止溢出。但是,这种情况非常少见,而且对于规模良好的数据,您无需担心。

仅提供一个具体示例:考虑以双精度对 4503599627370496、-4503599627370498 和 2 值进行平均。即使使用简单的求和,如果先求和再除,也会得到完全正确的结果 (0)。如果先除然后求和,求和是准确的(根据 Sterbenz 引理),但误差仍然很大;计算结果为 -0.08333333333333337(这仅来自 4503599627370496/3 中的舍入误差;-4503599627370498/3 是精确的)。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多