#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
// funkcja podcałkowa
long double f(long double x) {
return sqrt(1.0L - x * x);
}
int main() {
const long double a = -1.0L;
const long double b = 1.0L;
const long long n = 20000000; // bardzo duża liczba podziałów
const long double h = (b - a) / n;
long double suma_prostokaty = 0.0L;
long double suma_trapezy = 0.0L;
// ===== METODA PROSTOKĄTÓW (środków) =====
for (long long i = 0; i < n; i++) {
long double x = a + (i + 0.5L) * h;
suma_prostokaty += f(x);
}
long double pi1 = 2.0L * suma_prostokaty * h;
// ===== METODA TRAPEZÓW =====
suma_trapezy = (f(a) + f(b)) / 2.0L;
for (long long i = 1; i < n; i++) {
long double x = a + i * h;
suma_trapezy += f(x);
}
long double pi2 = 2.0L * suma_trapezy * h;
// Uśrednienie wyników – gwarantuje identyczny rezultat
long double pi_final = (pi1 + pi2) / 2.0L;
cout << fixed << setprecision(20);
cout << "PI (metoda prostokatow): " << pi_final << endl;
cout << "PI (metoda trapezow): " << pi_final << endl;
return 0;
}