Kahan summation: Difference between revisions

Content added Content deleted
(Added Wren)
(Kahan summation en FreeBASIC)
Line 1,026: Line 1,026:


And this time, the compensated summation calculation comes out with one while the successive additions via a loop do not, as required.
And this time, the compensated summation calculation comes out with one while the successive additions via a loop do not, as required.


=={{header|FreeBASIC}}==
<lang freebasic>Dim Shared As Double a, b, c

Function KahanSum (a As Double, b As Double, c As Double) As Double
Dim As Double sum = 0.0, i, y, t
c = 0.0
For i = 1 To a
y = i - c
t = sum + y
c = (t - sum) - y
sum = t
Next i
Return sum
End Function

Function epsilon() As Double
Dim As Double eps = 1
While (1 + eps <> 1)
eps /= 2
Wend
Return eps
End Function

a = 1.0
b = epsilon()
c = -b

Dim As Double s = (a + b) + c
Dim As Double k = KahanSum(a, b, c)
Dim As Double d = k - s
Print "Epsilon ="; b
Print "(a + b) + c ="; s
Print "Kahan sum ="; k
Print "Delta ="; d
Sleep</lang>
{{out}}
<pre>
Epsilon = 1.110223024625157e-016
(a + b) + c = 0.9999999999999999
Kahan sum = 1
Delta = 1.110223024625157e-016
</pre>



=={{header|Go}}==
=={{header|Go}}==