
                       /* calculation of PI */

/*      monte_pi_serial.c

        Syntax:    monte_pi_serial
                or
	           monte_pi_serial -p
*/
                                                /* Michel Vallieres, */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main( int argc, char *argv[] )
{
  int    ir, N, in_circle, in_square;
  int    plot_control;
  double x, y;
  double pi, pi4, sigma;
                                                  /* plot control */
  plot_control = 0;
  if ( argc == 2 )
    if ( strcmp( argv[1],  "-p") == 0  )
       plot_control = 1;
                                                 /* scan over different # of random numbers */
                                                 /* input from terminal */
  for ( ; ;  )
    {
      fprintf( stderr, "\n Enter N ( zero or negative to quit ): " );
      scanf( "%d", &N );
      fprintf( stderr, "\n" );
      if ( N <= 0 ) 
	exit(1);
                                                 /* scan over random numbers */
      in_circle = 0;
      in_square = 0;
      for ( ir=0 ; ir<N ; ir++ )
	{
           x = (double)rand()/(double)RAND_MAX;   /* use 1/4 circle */
           y = (double)rand()/(double)RAND_MAX;
           in_square++;
	                                         /* in circle ? */
           if ( x*x + y*y <= 1.0 ) 
	     {
	       in_circle++;
               if ( plot_control == 1 ) 
                   printf( " %f %f \n", x, y );
	     }
	}
                                                /* pi extrated from ratio of areas */
      pi4 = (double)in_circle / (double)in_square;
      pi = 4.0 * pi4;
                                                /* error -- sigma */
      sigma = 4 * sqrt( pi4 * ( 1 - pi4 ) / (double) N );
 
      fprintf(  stderr, "N = %d yields pi = %f +- sigma= %f \n",  N, pi, sigma );
    }
  
}





