fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. // f(x) = sqrt(1 - x^2)
  8. inline long double f(long double x) {
  9. return sqrtl(1.0L - x * x);
  10. }
  11.  
  12. // Metoda prostokątów (środkowa) w [0,1]
  13. long double prostokaty(long long n) {
  14. long double h = 1.0L / n;
  15. long double suma = 0.0L;
  16.  
  17. for(long long i = 0; i < n; i++) {
  18. long double x = (i + 0.5L) * h;
  19. suma += f(x);
  20. }
  21.  
  22. return 4.0L * suma * h; // π = 4 * całka 0→1
  23. }
  24.  
  25. // Metoda trapezów w [0,1]
  26. long double trapezy(long long n) {
  27. long double h = 1.0L / n;
  28. long double suma = 0.5L * (f(0.0L) + f(1.0L));
  29.  
  30. for(long long i = 1; i < n; i++) {
  31. long double x = i * h;
  32. suma += f(x);
  33. }
  34.  
  35. return 4.0L * suma * h;
  36. }
  37.  
  38. int main() {
  39.  
  40. long long n = 10000000; // 10 milionów podziałów
  41.  
  42. long double pi_p = prostokaty(n);
  43. long double pi_t = trapezy(n);
  44.  
  45. cout << fixed << setprecision(20);
  46. cout << "PI (prostokaty): " << pi_p << endl;
  47. cout << "PI (trapezy): " << pi_t << endl;
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0.1s 5320KB
stdin
Standard input is empty
stdout
PI (prostokaty): 3.14159265360068560256
PI (trapezy):    3.14159265355260544769