fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <random>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. // Funkcja do całkowania: 4/(1+x^2)
  9. long double f(long double x) {
  10. return 4.0L / (1.0L + x * x);
  11. }
  12.  
  13. int main() {
  14. long long n;
  15. cout << "Podaj liczbe losowan / podzialow n: ";
  16. cin >> n;
  17.  
  18. // ==========================
  19. // 1. METODA MONTE CARLO
  20. // ==========================
  21. mt19937_64 gen(random_device{}());
  22. uniform_real_distribution<long double> dist(-1.0L, 1.0L);
  23.  
  24. long long inside = 0;
  25.  
  26. for(long long i = 0; i < n; i++) {
  27. long double x = dist(gen);
  28. long double y = dist(gen);
  29.  
  30. if(x*x + y*y <= 1.0L)
  31. inside++;
  32. }
  33.  
  34. long double pi_monte_carlo = 4.0L * inside / n;
  35.  
  36. // ==========================
  37. // 2. METODA PROSTOKĄTÓW
  38. // ==========================
  39. long double dx = 1.0L / n;
  40. long double sum_rect = 0.0L;
  41.  
  42. for(long long i = 0; i < n; i++) {
  43. long double x = i * dx;
  44. sum_rect += f(x);
  45. }
  46.  
  47. long double pi_rect = sum_rect * dx;
  48.  
  49. // ==========================
  50. // 3. METODA TRAPEZÓW
  51. // ==========================
  52. long double sum_trap = (f(0.0L) + f(1.0L)) / 2.0L;
  53.  
  54. for(long long i = 1; i < n; i++) {
  55. long double x = i * dx;
  56. sum_trap += f(x);
  57. }
  58.  
  59. long double pi_trap = sum_trap * dx;
  60.  
  61. // ==========================
  62. // WYNIKI
  63. // ==========================
  64. cout << fixed << setprecision(20);
  65. cout << "\nPrzyblizenie liczby pi:\n";
  66. cout << "Monte Carlo : " << pi_monte_carlo << endl;
  67. cout << "Prostokaty : " << pi_rect << endl;
  68. cout << "Trapezy : " << pi_trap << endl;
  69.  
  70. return 0;
  71. }
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
Podaj liczbe losowan / podzialow n: 
Przyblizenie liczby pi:
Monte Carlo : -nan
Prostokaty  : -nan
Trapezy     : inf