Kahan summation: Difference between revisions

Content added Content deleted
(Added c#)
Line 194: Line 194:
{{out}}<pre>Simple: 1.00000E +4 + 3.14159E +0 + 2.71828E +0 = 1.00058E +4
{{out}}<pre>Simple: 1.00000E +4 + 3.14159E +0 + 2.71828E +0 = 1.00058E +4
Kahan : 1.00000E +4 + 3.14159E +0 + 2.71828E +0 = 1.00059E +4</pre>
Kahan : 1.00000E +4 + 3.14159E +0 + 2.71828E +0 = 1.00059E +4</pre>

=={{header|C++}}==
{{trans|C++}}
<lang cpp>#include <iostream>

float epsilon() {
float eps = 1.0f;
while (1.0f + eps != 1.0f) eps /= 2.0f;
return eps;
}

float kahanSum(std::initializer_list<float> nums) {
float sum = 0.0f;
float c = 0.0f;
for (auto num : nums) {
float y = num - c;
float t = sum + y;
c = (t - sum) - y;
sum = t;
}
return sum;
}

int main() {
using namespace std;

float a = 1.f;
float b = epsilon();
float c = -b;

cout << "Epsilon = " << b << endl;
cout << "(a + b) + c = " << (a + b) + c << endl;
cout << "Kahan sum = " << kahanSum({ a, b, c }) << endl;

return 0;
}</lang>
{{out}}
<pre>Epsilon = 5.96046e-08
(a + b) + c = 1
Kahan sum = 1</pre>


=={{header|C#|C sharp}}==
=={{header|C#|C sharp}}==