33 { ::srand(static_cast<unsigned int>(
time(NULL))); }
39 return T(::rand() / T(RAND_MAX + 1.0));
51 " var experiments[5 * 10^7] := [(rnd_01^2 + rnd_01^2) <= 1]; " 52 " 4 * sum(experiments) / experiments[]; ";
63 parser.compile(monte_carlo_pi_program,expression);
65 const T approximate_pi = expression.value();
67 const T real_pi = T(3.141592653589793238462643383279502);
69 printf(
"pi ~ %20.17f\terror: %20.17f\n",
71 std::abs(real_pi - approximate_pi));
76 monte_carlo_pi<double>();