#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
// Funkcja f(x) = sqrt(1 - x^2)
long double f(long double x) {
return sqrtl(1.0L - x * x);
}
// Metoda prostokątów (środków przedziałów)
long double rectangle_method(long double a, long double b, long long n) {
long double h = (b - a) / n;
long double sum = 0.0L;
for (long long i = 0; i < n; i++) {
long double x = a + (i + 0.5L) * h;
sum += f(x);
}
return sum * h;
}
// Metoda trapezów
long double trapezoidal_method(long double a, long double b, long long n) {
long double h = (b - a) / n;
long double sum = (f(a) + f(b)) / 2.0L;
for (long long i = 1; i < n; i++) {
long double x = a + i * h;
sum += f(x);
}
return sum * h;
}
int main() {
long double a = 0.0L;
long double b = 1.0L;
// Duża liczba podziałów dla wysokiej dokładności
long long n = 100000000;
long double pi_rect = 4.0L * rectangle_method(a, b, n);
long double pi_trap = 4.0L * trapezoidal_method(a, b, n);
cout << fixed << setprecision(20);
cout << "Przybliżenie liczby pi:" << endl;
cout << "Metoda prostokątów: " << pi_rect << endl;
cout << "Metoda trapezów: " << pi_trap << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEZ1bmtjamEgZih4KSA9IHNxcnQoMSAtIHheMikKbG9uZyBkb3VibGUgZihsb25nIGRvdWJsZSB4KSB7CiAgICByZXR1cm4gc3FydGwoMS4wTCAtIHggKiB4KTsKfQoKLy8gTWV0b2RhIHByb3N0b2vEhXTDs3cgKMWbcm9ka8OzdyBwcnplZHppYcWCw7N3KQpsb25nIGRvdWJsZSByZWN0YW5nbGVfbWV0aG9kKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIsIGxvbmcgbG9uZyBuKSB7CiAgICBsb25nIGRvdWJsZSBoID0gKGIgLSBhKSAvIG47CiAgICBsb25nIGRvdWJsZSBzdW0gPSAwLjBMOwoKICAgIGZvciAobG9uZyBsb25nIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgbG9uZyBkb3VibGUgeCA9IGEgKyAoaSArIDAuNUwpICogaDsKICAgICAgICBzdW0gKz0gZih4KTsKICAgIH0KCiAgICByZXR1cm4gc3VtICogaDsKfQoKLy8gTWV0b2RhIHRyYXBlesOzdwpsb25nIGRvdWJsZSB0cmFwZXpvaWRhbF9tZXRob2QobG9uZyBkb3VibGUgYSwgbG9uZyBkb3VibGUgYiwgbG9uZyBsb25nIG4pIHsKICAgIGxvbmcgZG91YmxlIGggPSAoYiAtIGEpIC8gbjsKICAgIGxvbmcgZG91YmxlIHN1bSA9IChmKGEpICsgZihiKSkgLyAyLjBMOwoKICAgIGZvciAobG9uZyBsb25nIGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgbG9uZyBkb3VibGUgeCA9IGEgKyBpICogaDsKICAgICAgICBzdW0gKz0gZih4KTsKICAgIH0KCiAgICByZXR1cm4gc3VtICogaDsKfQoKaW50IG1haW4oKSB7CiAgICBsb25nIGRvdWJsZSBhID0gMC4wTDsKICAgIGxvbmcgZG91YmxlIGIgPSAxLjBMOwoKICAgIC8vIER1xbxhIGxpY3piYSBwb2R6aWHFgsOzdyBkbGEgd3lzb2tpZWogZG9rxYJhZG5vxZtjaQogICAgbG9uZyBsb25nIG4gPSAxMDAwMDAwMDA7ICAKCiAgICBsb25nIGRvdWJsZSBwaV9yZWN0ID0gNC4wTCAqIHJlY3RhbmdsZV9tZXRob2QoYSwgYiwgbik7CiAgICBsb25nIGRvdWJsZSBwaV90cmFwID0gNC4wTCAqIHRyYXBlem9pZGFsX21ldGhvZChhLCBiLCBuKTsKCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigyMCk7CgogICAgY291dCA8PCAiUHJ6eWJsacW8ZW5pZSBsaWN6YnkgcGk6IiA8PCBlbmRsOwogICAgY291dCA8PCAiTWV0b2RhIHByb3N0b2vEhXTDs3c6ICIgPDwgcGlfcmVjdCA8PCBlbmRsOwogICAgY291dCA8PCAiTWV0b2RhIHRyYXBlesOzdzogICAgIiA8PCBwaV90cmFwIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=