#include #include #include #include #include using namespace std; double NormalSeries(size_t N) { double sum = 0.0; for (size_t i = 1; i <= N; ++i) { sum += 1.0 / (double(i) * double(i)); } return sum; } double KahanSeries(size_t N) { double sum = 0.0; double c = 0.0; for (size_t i = 1; i <= N; ++i) { double term = 1.0 / (double(i) * double(i)); double y = term - c; double t = sum + y; c = (t - sum) - y; sum = t; } return sum; } int main() { const double pi2_over_6 = (M_PI * M_PI) / 6.0; // vector ns = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000}; vector ns = {1000000, 10000000, 100000000, 500000000, 1000000000}; for (size_t n : ns) { double s_norm = NormalSeries(n); double s_kahan = KahanSeries(n); double err_norm = fabs(s_norm - pi2_over_6); double err_kahan = fabs(s_kahan - pi2_over_6); cout.setf(ios::fixed); cout.precision(10); cout << "\n--- n = " << n << " ---" << endl; cout << "Normal summation: " << s_norm << endl; cout << "Normal error: " << err_norm << endl; cout << "Kahan summation: " << s_kahan << endl; cout << "Kahan error: " << err_kahan << endl; } return 0; }