/*
   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;
   mt19937 re;

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

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

        if ( y<=sin(x)  ) Ninside++;
     }

   cout << "Ainside= " << (b-a)*c*Ninside/N << endl;

   return 0;
}

