fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <random>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. // Funkcja podcałkowa
  9. long double f(long double x) {
  10. return sqrt(1.0L - x * x);
  11. }
  12.  
  13. int main() {
  14.  
  15. // 🔴 TU ustawiasz liczbę losowań / podziałów
  16. const long long n = 1000000; // możesz zmienić np. na 10000000
  17.  
  18. cout << fixed << setprecision(20);
  19.  
  20. // =========================
  21. // 1. METODA MONTE CARLO
  22. // =========================
  23. mt19937_64 gen(123456); // stałe ziarno dla powtarzalnych wyników
  24. uniform_real_distribution<long double> dist(-1.0L, 1.0L);
  25.  
  26. long long inside = 0;
  27.  
  28. for (long long i = 0; i < n; i++) {
  29. long double x = dist(gen);
  30. long double y = dist(gen);
  31.  
  32. if (x * x + y * y <= 1.0L)
  33. inside++;
  34. }
  35.  
  36. long double pi_monte = 4.0L * inside / n;
  37.  
  38. // =========================
  39. // 2. METODA PROSTOKĄTÓW (punkty środkowe)
  40. // =========================
  41. long double h = 1.0L / n;
  42. long double sum_rect = 0.0L;
  43.  
  44. for (long long i = 0; i < n; i++) {
  45. long double x = (i + 0.5L) * h;
  46. sum_rect += f(x);
  47. }
  48.  
  49. long double pi_rect = 4.0L * h * sum_rect;
  50.  
  51. // =========================
  52. // 3. METODA TRAPEZÓW
  53. // =========================
  54. long double sum_trap = (f(0.0L) + f(1.0L)) / 2.0L;
  55.  
  56. for (long long i = 1; i < n; i++) {
  57. long double x = i * h;
  58. sum_trap += f(x);
  59. }
  60.  
  61. long double pi_trap = 4.0L * h * sum_trap;
  62.  
  63. // =========================
  64. // WYNIKI
  65. // =========================
  66. cout << "Przyblizenie liczby pi (n = " << n << "):\n\n";
  67. cout << "Monte Carlo : " << pi_monte << endl;
  68. cout << "Prostokaty : " << pi_rect << endl;
  69. cout << "Trapezy : " << pi_trap << endl;
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0.05s 5316KB
stdin
Standard input is empty
stdout
Przyblizenie liczby pi (n = 1000000):

Monte Carlo  : 3.14205599999999999998
Prostokaty   : 3.14159265393423042215
Trapezy      : 3.14159265241381118004