这两者之间有区别吗:

average = (x1+x2)/2;
deviation1 = x1 -average;
deviation2 = x2 -average;
variance = deviation1*deviation1 + deviation2*deviation2;

而这个:
average2 = (x1+x2);
deviation1 = 2*x1 -average2;
deviation2 = 2*x2 -average2;
variance = (deviation1*deviation1 + deviation2*deviation2) / 4;

注意,在第二个版本中,我试图尽可能延迟除法。第二个版本[延迟划分]通常会提高精度吗?
上面的代码片段只是一个例子,我并没有试图优化这个特定的代码片段。
顺便说一句,我问的是一般的除法,而不仅仅是2或2的幂,因为它们在ieee 754表示中简化为简单的移位。我把除法取为2,只是为了用一个非常简单的例子来说明这个问题。

最佳答案

这没什么好处。你只是在改变比例,但你不会得到任何更重要的数字在你的计算。
Wikipedia article on variance在较高的层次上解释了以稳健的方式计算方差的一些选项。

07-27 13:34