#include #include double draw(double a, double b) { static std::default_random_engine engine(std::random_device{}()); std::uniform_real_distribution uniform_dist(a, b); return uniform_dist(engine); } double pi(unsigned N) { std::size_t cnt = 0; for (std::size_t i = 0; i < N; ++i) { const double x = draw(-1., 1.); const double y = draw(-1., 1.); if (x * x + y * y <= 1) { ++cnt; } } return 4. * cnt / N; } int main() { for (unsigned N = 10; N < 1e9; N *= 10) { std::cout << pi(N) << std::endl; } }