/*
   Get pseudorandom numbers  either using a uniform or gaussian distributed random numbers

   NB requires C++ V11 standard.

   http://www.cplusplus.com/reference/random/uniform_real_distribution/
   http://www.cplusplus.com/reference/random/normal_distribution/
*/

#include <iostream>
#include <random>

using namespace std;

int main()
{
   std::default_random_engine re;

// Uniform distribution P(x)=1/(b-a) for a<=x<=b and 0 elsewhere.
   double a = -1.0;
   double b =  1.0;
   uniform_real_distribution<double> distribution(a,b);

   int N=100000000;
   int Ninside=0;
   for (int i=0 ; i<N ; i++)
     {
        double x = distribution(re);
        double y = distribution(re);

        if (x*x+y*y<=1) Ninside++;
     }

   cout << "Pi= " << 4.0*Ninside/N << endl;

   return 0;
}

