Kahan summation: Difference between revisions
Content added Content deleted
(Added Asymptote) |
(Added Dart) |
||
Line 586: | Line 586: | ||
(a + b) + c = 1.00000000 |
(a + b) + c = 1.00000000 |
||
Kahan sum = 1.00000000</pre> |
Kahan sum = 1.00000000</pre> |
||
=={{header|Dart}}== |
|||
{{trans|C++}} |
|||
<syntaxhighlight lang="dart">double epsilon() { |
|||
double eps = 1.0; |
|||
while (1.0 + eps != 1.0) { |
|||
eps /= 2.0; |
|||
} |
|||
return eps; |
|||
} |
|||
double kahanSum(List<double> nums) { |
|||
double sum = 0.0; |
|||
double c = 0.0; |
|||
for (var num in nums) { |
|||
double y = num - c; |
|||
double t = sum + y; |
|||
c = (t - sum) - y; |
|||
sum = t; |
|||
} |
|||
return sum; |
|||
} |
|||
void main() { |
|||
double a = 1.0; |
|||
double b = epsilon(); |
|||
double c = -b; |
|||
print("Epsilon = $b"); |
|||
print("(a + b) + c = ${(a + b) + c}"); |
|||
print("Kahan sum = ${kahanSum([a, b, c])}"); |
|||
print("Delta = ${kahanSum([a, b, c]) - (a + b) + c}"); |
|||
}</syntaxhighlight> |
|||
{{out}} |
|||
<pre>Epsilon = 1.1102230246251565e-16 |
|||
(a + b) + c = 0.9999999999999999 |
|||
Kahan sum = 1 |
|||
Delta = -1.1102230246251565e-16</pre> |
|||
=={{header|EchoLisp}}== |
=={{header|EchoLisp}}== |