fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. // Funkcja podcałkowa
  8. long double f(long double x) {
  9. return sqrt(1.0L - x * x);
  10. }
  11.  
  12. int main() {
  13. const long double a = -1.0L;
  14. const long double b = 1.0L;
  15.  
  16. const long long n = 10000000; // liczba podziałów (duża dla wysokiej dokładności)
  17. const long double h = (b - a) / n;
  18.  
  19. long double suma_prostokaty = 0.0L;
  20. long double suma_trapezy = 0.0L;
  21.  
  22. // ===== Metoda prostokątów (środków przedziałów) =====
  23. for (long long i = 0; i < n; i++) {
  24. long double x = a + (i + 0.5L) * h;
  25. suma_prostokaty += f(x);
  26. }
  27. long double pi_prostokaty = 2.0L * suma_prostokaty * h;
  28.  
  29. // ===== Metoda trapezów =====
  30. suma_trapezy = (f(a) + f(b)) / 2.0L;
  31. for (long long i = 1; i < n; i++) {
  32. long double x = a + i * h;
  33. suma_trapezy += f(x);
  34. }
  35. long double pi_trapezy = 2.0L * suma_trapezy * h;
  36.  
  37. // Ustawienie dokładności do 20 miejsc po przecinku
  38. cout << fixed << setprecision(20);
  39.  
  40. cout << "PI (metoda prostokatow): " << pi_prostokaty << endl;
  41. cout << "PI (metoda trapezow): " << pi_trapezy << endl;
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0.11s 5328KB
stdin
Standard input is empty
stdout
PI (metoda prostokatow): 3.14159265362060062901
PI (metoda trapezow):    3.14159265348461031451