diff --git a/mainEx4.cpp b/mainEx4.cpp new file mode 100644 index 0000000..2d9a96a --- /dev/null +++ b/mainEx4.cpp @@ -0,0 +1,57 @@ +#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; +}