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
ため、括弧は冗長ではありませんか?-