function KahanSum(input)
var sum = 0.0
var c = 0.0
for i = 1 to input.length do
y = input[i] - c // why subtraction?
t = sum + y
c = (t - sum) - y
sum = t
return sum
它使用减法(而不是加法)是否有特定原因?如果我在 的计算中交换操作数c
,我可以使用加法代替吗?不知何故,这对我来说更有意义:
function KahanSum(input)
var sum = 0.0
var c = 0.0
for i = 1 to input.length do
y = input[i] + c // addition instead of subtraction
t = sum + y
c = y - (t - sum) // swapped operands
sum = t
return sum
或者我还不知道的浮点加法和减法之间是否存在一些奇怪的区别?
(t - sum) - y
另外,t - sum - y
原始算法之间有什么区别吗?括号不是多余的,因为-
它是左结合的,无论如何?