/* starasc.c */

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <tgmath.h>
#include <values.h>
#include "starasc.h"


int main ( void )
{
 int i, n = 0;
 double r;
 for (i = 0; i < 100; i ++) {
   r = gaussrand();
   if (abs(r) < 1.0) ++ n;
   /*
   printf("%e\n", r);
   */
 }
 printf("%d/%d\n", n, i);
 exit(0);
}

/*******************************************************************/

/* http://c-faq.com/lib/gaussian.html */

double gaussrand()
{

 static double V1, V2, S;
 static int phase = 0;
 double X;

 if (phase == 0)
   {
     do
       {
         double U1 = (double) rand() / RAND_MAX;
         double U2 = (double) rand() / RAND_MAX;

         V1 = 2 * U1 - 1;
         V2 = 2 * U2 - 1;
         S = V1 * V1 + V2 * V2;
       } while ( S >= 1 || S == 0);

     X = V1 * sqrt(-2 * log(S) / S);
   }
 else
   X = V2 * sqrt(-2 * log(S) / S);

 phase = 1 - phase;

 return X;
}