如何正确计算32位浮点数的大数组的运行平均值?

Fee*_*ure 4 math floating-point average

我正在编写路径跟踪器,并且必须收集每个像素的大量样本的平均值.我在1024个样本运行和16384个样本运行之间得到了显着的视觉差异; 16384样本运行较暗.我猜想这是因为16384样本图像遇到了浮点精度误差.我通过将每个值除以16384来平均颜色值,然后将它们加在一起.

有没有办法平衡一个具有已知幅度的大型,难以计算的数字集,同时最小化舍入误差?最好不要求非恒定存储器,绝对不丢弃任何样品?

Pau*_*l R 5

你可能想要Kahan求和算法.当使用有限精度浮点运算对大量点求和时,这是一种简单有效的最小化累积舍入误差的方法.

  • 但由于空间原因OP已经使用单精度浮动,因此切换到双精度将比单精度Kahan提供更高的精度,而且工作量更少.Kahan的算法本质上使用双寄存器累加器来使有效位的数量加倍 - 但是双精度的本机尾数是已经单倍的宽度的两倍(因为指数仅表示一次). (7认同)