fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4.  
  5. long double f(long double x) {
  6. return sqrtl(1.0L - x * x);
  7. }
  8.  
  9. // Metoda prostokątów (lewa)
  10. long double pi_rectangles(long long n) {
  11. long double dx = 1.0L / n;
  12. long double sum = 0.0L;
  13.  
  14. for (long long i = 0; i < n; i++) {
  15. long double x = i * dx;
  16. sum += f(x);
  17. }
  18.  
  19. return 4.0L * sum * dx;
  20. }
  21.  
  22. // Metoda trapezów
  23. long double pi_trapezoids(long long n) {
  24. long double dx = 1.0L / n;
  25. long double sum = (f(0.0L) + f(1.0L)) / 2.0L;
  26.  
  27. for (long long i = 1; i < n; i++) {
  28. long double x = i * dx;
  29. sum += f(x);
  30. }
  31.  
  32. return 4.0L * sum * dx;
  33. }
  34.  
  35. int main() {
  36. long long n;
  37.  
  38. std::cout << "Podaj liczbe podzialow (np. 100000000): ";
  39. std::cin >> n;
  40.  
  41. long double pi_r = pi_rectangles(n);
  42. long double pi_t = pi_trapezoids(n);
  43.  
  44. std::cout << std::fixed << std::setprecision(20);
  45.  
  46. std::cout << "PI (metoda prostokatow): " << pi_r << std::endl;
  47. std::cout << "PI (metoda trapezow): " << pi_t << std::endl;
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 1.17s 5296KB
stdin
100000000
stdout
Podaj liczbe podzialow (np. 100000000): PI (metoda prostokatow): 3.14159267358861780343
PI (metoda trapezow):    3.14159265358861780376