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}}== |