【发布时间】:2011-09-09 12:30:57
【问题描述】:
我正在编写一个路径跟踪器,并且必须收集每个像素的大量样本的平均值。我在 1024 个样本运行和 16384 个样本运行之间得到了显着的视觉差异; 16384 个样本运行较暗。我猜这是因为 16384 样本图像遇到浮点精度错误。我通过将每个值除以 16384 来平均颜色值,然后将它们加在一起。
有没有一种方法可以对已知量级的大量难以计算的数字集进行平均,同时最大限度地减少舍入误差?最好不需要非常量内存,绝对不丢弃任何样本?
【问题讨论】:
-
正确和浮点?我很好奇这是否比明显的“不相容概念”更有趣。
-
我正在使用浮点数,因为我试图在聚合器数组上节省内存(是的,数组中有很多浮点数,至少我非常努力地保留在 L2 中)。问题不在于获得正确,而是如何获得最佳准确度。
-
一个显而易见的实验是在测试运行中切换到双打。如果它不能使变暗消失,那么它一开始就不太可能是精度问题。
-
聚合器数组?您所要做的就是将它们添加到一个比您用于存储样本的类型大得多的变量(“变量”,单数)中。要避免使用几个额外的字节,你会遇到很多麻烦。
-
聚合器数组,因为我分批计算光线。 :-)
标签: math floating-point average