fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. // Funkcja f(x) = sqrt(1 - x^2)
  8. long double f(long double x) {
  9. return sqrtl(1.0L - x * x);
  10. }
  11.  
  12. // Metoda prostokątów (środków przedziałów)
  13. long double rectangle_method(long double a, long double b, long long n) {
  14. long double h = (b - a) / n;
  15. long double sum = 0.0L;
  16.  
  17. for (long long i = 0; i < n; i++) {
  18. long double x = a + (i + 0.5L) * h;
  19. sum += f(x);
  20. }
  21.  
  22. return sum * h;
  23. }
  24.  
  25. // Metoda trapezów
  26. long double trapezoidal_method(long double a, long double b, long long n) {
  27. long double h = (b - a) / n;
  28. long double sum = (f(a) + f(b)) / 2.0L;
  29.  
  30. for (long long i = 1; i < n; i++) {
  31. long double x = a + i * h;
  32. sum += f(x);
  33. }
  34.  
  35. return sum * h;
  36. }
  37.  
  38. int main() {
  39. long double a = 0.0L;
  40. long double b = 1.0L;
  41.  
  42. // Duża liczba podziałów dla wysokiej dokładności
  43. long long n = 100000000;
  44.  
  45. long double pi_rect = 4.0L * rectangle_method(a, b, n);
  46. long double pi_trap = 4.0L * trapezoidal_method(a, b, n);
  47.  
  48. cout << fixed << setprecision(20);
  49.  
  50. cout << "Przybliżenie liczby pi:" << endl;
  51. cout << "Metoda prostokątów: " << pi_rect << endl;
  52. cout << "Metoda trapezów: " << pi_trap << endl;
  53.  
  54. return 0;
  55. }
Success #stdin #stdout 1.21s 5288KB
stdin
Standard input is empty
stdout
Przybliżenie liczby pi:
Metoda prostokątów: 3.14159265359013684473
Metoda trapezów:    3.14159265358861780376