Kahan summation: Difference between revisions

Line 195:
Kahan : 1.00000E +4 + 3.14159E +0 + 2.71828E +0 = 1.00059E +4</pre>
 
=={{header|C++}}==
{{trans|C++}}
<lang c>#include <stdio.h>
#include <stdlib.h>
 
float epsilon() {
float eps = 1.0f;
while (1.0f + eps != 1.0f) eps /= 2.0f;
return eps;
}
 
float kahanSum(float *nums, int count) {
float sum = 0.0f;
float c = 0.0f;
float t, y;
int i;
for (i = 0; i < count; ++i) {
y = nums[i] - c;
t = sum + y;
c = (t - sum) - y;
sum = t;
}
return sum;
}
 
int main() {
float a = 1.0f;
float b = epsilon();
float c = -b;
float fa[3];
 
fa[0] = a;
fa[1] = b;
fa[2] = c;
 
printf("Epsilon = %0.12f\n", b);
printf("(a + b) + c = %0.12f\n", (a + b) + c);
printf("Kahan sum = %0.12f\n", kahanSum(fa, 3));
 
return 0;
}</lang>
{{out}}
<pre>Epsilon = 0.000000059605
(a + b) + c = 0.999999940395
Kahan sum = 1.000000000000</pre>
 
=={{header|C++}}==
<lang cpp>#include <iostream>
 
1,452

edits