#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
// f(x) = sqrt(1 - x^2)
inline long double f(long double x) {
return sqrtl(1.0L - x * x);
}
// Metoda prostokątów (środkowa) w [0,1]
long double prostokaty(long long n) {
long double h = 1.0L / n;
long double suma = 0.0L;
for(long long i = 0; i < n; i++) {
long double x = (i + 0.5L) * h;
suma += f(x);
}
return 4.0L * suma * h; // π = 4 * całka 0→1
}
// Metoda trapezów w [0,1]
long double trapezy(long long n) {
long double h = 1.0L / n;
long double suma = 0.5L * (f(0.0L) + f(1.0L));
for(long long i = 1; i < n; i++) {
long double x = i * h;
suma += f(x);
}
return 4.0L * suma * h;
}
int main() {
long long n = 10000000; // 10 milionów podziałów
long double pi_p = prostokaty(n);
long double pi_t = trapezy(n);
cout << fixed << setprecision(20);
cout << "PI (prostokaty): " << pi_p << endl;
cout << "PI (trapezy): " << pi_t << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIGYoeCkgPSBzcXJ0KDEgLSB4XjIpCmlubGluZSBsb25nIGRvdWJsZSBmKGxvbmcgZG91YmxlIHgpIHsKICAgIHJldHVybiBzcXJ0bCgxLjBMIC0geCAqIHgpOwp9CgovLyBNZXRvZGEgcHJvc3Rva8SFdMOzdyAoxZtyb2Rrb3dhKSB3IFswLDFdCmxvbmcgZG91YmxlIHByb3N0b2thdHkobG9uZyBsb25nIG4pIHsKICAgIGxvbmcgZG91YmxlIGggPSAxLjBMIC8gbjsKICAgIGxvbmcgZG91YmxlIHN1bWEgPSAwLjBMOwoKICAgIGZvcihsb25nIGxvbmcgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBsb25nIGRvdWJsZSB4ID0gKGkgKyAwLjVMKSAqIGg7CiAgICAgICAgc3VtYSArPSBmKHgpOwogICAgfQoKICAgIHJldHVybiA0LjBMICogc3VtYSAqIGg7ICAvLyDPgCA9IDQgKiBjYcWCa2EgMOKGkjEKfQoKLy8gTWV0b2RhIHRyYXBlesOzdyB3IFswLDFdCmxvbmcgZG91YmxlIHRyYXBlenkobG9uZyBsb25nIG4pIHsKICAgIGxvbmcgZG91YmxlIGggPSAxLjBMIC8gbjsKICAgIGxvbmcgZG91YmxlIHN1bWEgPSAwLjVMICogKGYoMC4wTCkgKyBmKDEuMEwpKTsKCiAgICBmb3IobG9uZyBsb25nIGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgbG9uZyBkb3VibGUgeCA9IGkgKiBoOwogICAgICAgIHN1bWEgKz0gZih4KTsKICAgIH0KCiAgICByZXR1cm4gNC4wTCAqIHN1bWEgKiBoOwp9CgppbnQgbWFpbigpIHsKCiAgICBsb25nIGxvbmcgbiA9IDEwMDAwMDAwOyAvLyAxMCBtaWxpb27Ds3cgcG9kemlhxYLDs3cKCiAgICBsb25nIGRvdWJsZSBwaV9wID0gcHJvc3Rva2F0eShuKTsKICAgIGxvbmcgZG91YmxlIHBpX3QgPSB0cmFwZXp5KG4pOwoKICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDIwKTsKICAgIGNvdXQgPDwgIlBJIChwcm9zdG9rYXR5KTogIiA8PCBwaV9wIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJQSSAodHJhcGV6eSk6ICAgICIgPDwgcGlfdCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9