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 sqrt(1.0L - x * x);
  10. }
  11.  
  12. int main() {
  13. const long double a = 0.0L;
  14. const long double b = 1.0L;
  15. const long long n = 10000000; // liczba podziałów (można zwiększyć dla większej dokładności)
  16.  
  17. long double h = (b - a) / n;
  18. long double suma_prostokaty = 0.0L;
  19. long double suma_trapezy = 0.0L;
  20.  
  21. // ===== Metoda prostokątów (środków przedziałów) =====
  22. for (long long i = 0; i < n; i++) {
  23. long double x = a + (i + 0.5L) * h;
  24. suma_prostokaty += f(x);
  25. }
  26. long double pi_prostokaty = 4.0L * h * suma_prostokaty;
  27.  
  28. // ===== Metoda trapezów =====
  29. suma_trapezy = (f(a) + f(b)) / 2.0L;
  30. for (long long i = 1; i < n; i++) {
  31. long double x = a + i * h;
  32. suma_trapezy += f(x);
  33. }
  34. long double pi_trapezy = 4.0L * h * suma_trapezy;
  35.  
  36. // Ustawienie dokładności do 20 miejsc po przecinku
  37. cout << fixed << setprecision(20);
  38.  
  39. cout << "Przyblizona wartosc liczby pi (metoda prostokatow): "
  40. << pi_prostokaty << endl;
  41.  
  42. cout << "Przyblizona wartosc liczby pi (metoda trapezow): "
  43. << pi_trapezy << endl;
  44.  
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0.12s 5304KB
stdin
Standard input is empty
stdout
Przyblizona wartosc liczby pi (metoda prostokatow): 3.14159265360068560256
Przyblizona wartosc liczby pi (metoda trapezow):   3.14159265355260544769