浮点除法与乘法的精度差异

Fak*_*een 9 language-agnostic algorithm floating-point numbers

这有什么区别:

average = (x1+x2)/2;
deviation1 = x1 -average;
deviation2 = x2 -average;
variance = deviation1*deviation1 + deviation2*deviation2;
Run Code Online (Sandbox Code Playgroud)

还有这个:

average2 = (x1+x2);
deviation1 = 2*x1 -average2;
deviation2 = 2*x2 -average2;
variance = (deviation1*deviation1 + deviation2*deviation2) / 4;
Run Code Online (Sandbox Code Playgroud)

请注意,在第二个版本中,我试图尽可能延迟分割.第二个版本[延迟划分]是否会提高准确性?

上面的代码段仅作为示例,我不是要尝试优化此特定代码段.

顺便说一句,我问的是一般的划分,不仅仅是2或2的幂,因为它们减少到IEEE 754表示的简单移位.我用2除法,只是为了用一个非常简单的例子说明问题.

Dav*_*nan 4

从中没有什么收获。您只是更改了比例,但在计算中不会得到任何更有效的数字。

维基百科关于方差的文章在高层次上解释了以稳健的方式计算方差的一些选项。