【发布时间】: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