【发布时间】:2011-09-22 21:12:54
【问题描述】:
这有区别吗:
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;
请注意,在第二个版本中,我试图尽可能晚地延迟除法。第二个版本[延迟划分]总体上会提高准确性吗?
上面的片段只是一个例子,我并不是要优化这个特定的sn-p。
顺便说一句,我问的是一般的除法,而不仅仅是 2 或 2 的幂,因为它们简化为 IEEE 754 表示的简单转换。我将除以 2,只是为了用一个非常简单的例子来说明这个问题。
【问题讨论】:
-
为什么你要拖延它?您希望从中获得什么?
-
@paxdiablo - 这是一个确切的问题 - 我是否通过延迟来获得精度(而不是性能)。
-
其实你应该问的是准确度而不是精确度,但答案还是一样
-
这与语言无关吗?您不应该担心发生类型更改的位置吗?它们是整数、浮点数还是字符串?它们什么时候变成别的东西了?
-
@David - 是的 - 我的意思是准确 - 感谢您的更正。
标签: algorithm language-agnostic numbers floating-point