fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <random>
  5. #include <chrono>
  6. #include <iomanip>
  7.  
  8. int main() {
  9. unsigned seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
  10. std::mt19937 generator(seed);
  11. std::uniform_real_distribution<double> distribution(0.0, 1.0);
  12.  
  13. std::vector<int> N_values = {1000, 10000, 100000};
  14.  
  15. for (int N : N_values) {
  16. long long points_inside_circle = 0;
  17.  
  18. for (int i = 0; i < N; ++i) {
  19. double x = distribution(generator);
  20. double y = distribution(generator);
  21. if ((x * x + y * y) <= 1.0) {
  22. points_inside_circle++;
  23. }
  24. }
  25.  
  26. double estimated_pi = 4.0 * static_cast<double>(points_inside_circle) / N;
  27. double error = std::fabs(M_PI - estimated_pi);
  28.  
  29. std::cout << "For N = " << N << ":\n";
  30. std::cout << " Estimated Pi = " << std::fixed << std::setprecision(10) << estimated_pi << "\n";
  31. std::cout << " Error = " << std::setprecision(10) << error << "\n\n";
  32. }
  33.  
  34. return 0;
  35. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
For N = 1000:
  Estimated Pi = 3.0760000000
  Error        = 0.0655926536

For N = 10000:
  Estimated Pi = 3.1464000000
  Error        = 0.0048073464

For N = 100000:
  Estimated Pi = 3.1406400000
  Error        = 0.0009526536