fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <cmath>
  5.  
  6. double estimatePiMonteCarlo(long long N) {
  7. long long pointsInsideCircle = 0;
  8.  
  9. for (long long i = 0; i < N; ++i) {
  10. double x = static_cast<double>(rand()) / RAND_MAX;
  11. double y = static_cast<double>(rand()) / RAND_MAX;
  12.  
  13. if ((x * x + y * y) <= 1.0) {
  14. pointsInsideCircle++;
  15. }
  16. }
  17.  
  18. return 4.0 * static_cast<double>(pointsInsideCircle) / N;
  19. }
  20.  
  21. int main() {
  22. srand(static_cast<unsigned int>(time(0)));
  23.  
  24. long long N_values[] = {1000, 10000, 100000, 1000000, 10000000};
  25. double actualPi = 3.14159265358979323846;
  26.  
  27. std::cout << "Monte Carlo Estimation of Pi:\n";
  28. std::cout << "--------------------------------\n";
  29.  
  30. for (long long N : N_values) {
  31. double piEstimate = estimatePiMonteCarlo(N);
  32. double error = std::abs(piEstimate - actualPi);
  33.  
  34. std::cout << "N = " << N << ":\n";
  35. std::cout << " Estimated Pi = " << piEstimate << "\n";
  36. std::cout << " Actual Pi = " << actualPi << "\n";
  37. std::cout << " Error = " << error << "\n\n";
  38. }
  39.  
  40. return 0;
  41. }
  42.  
Success #stdin #stdout 0.29s 5328KB
stdin
Standard input is empty
stdout
Monte Carlo Estimation of Pi:
--------------------------------
N = 1000:
  Estimated Pi = 3.128
  Actual Pi    = 3.14159
  Error        = 0.0135927

N = 10000:
  Estimated Pi = 3.1348
  Actual Pi    = 3.14159
  Error        = 0.00679265

N = 100000:
  Estimated Pi = 3.13536
  Actual Pi    = 3.14159
  Error        = 0.00623265

N = 1000000:
  Estimated Pi = 3.14038
  Actual Pi    = 3.14159
  Error        = 0.00120865

N = 10000000:
  Estimated Pi = 3.14199
  Actual Pi    = 3.14159
  Error        = 0.000396946