2 /* bin_distribution.c */
3 /* find # of random numbers in equally spaced grid */
4 /* bin the grid counter */
8 /* random_demo_2_series 1 20000 | bin_distribution > data_file */
10 /* random_demo_2_series 2 20000 | bin_distribution > data_file */
12 /* Michel Vallieres */
19 int main ( int argc, char *argv[] )
22 double x[NMAX], y[NMAX];
23 int counter[N_MAX_GRID][N_MAX_GRID];
24 int ix_scan, iy_scan, ic, max_bin, ibin, *bin;
27 /* read in the random points coordinates */
29 while ( scanf( "%lf %lf", &x[N], &y[N] ) != EOF )
31 fprintf( stderr, "\n Number of random numbers %d \n", N );
32 /* set counter to zero */
33 for ( ix_scan=0 ; ix_scan<N_MAX_GRID ; ix_scan++ )
35 for ( iy_scan=0 ; iy_scan<N_MAX_GRID ; iy_scan++ )
37 counter[ix_scan][iy_scan] = 0;
40 /* grid of squares dx & dy */
44 for ( ix_scan=0 ; ix_scan<N_MAX_GRID ; ix_scan++ )
46 for ( iy_scan=0 ; iy_scan<N_MAX_GRID ; iy_scan++ )
48 /* scan over random numbers */
49 for ( ic=0 ; ic<N ; ic++ )
51 if ( ( ix_scan*dx <= x[ic] && x[ic] < (ix_scan+1)*dx )
52 && ( iy_scan*dy <= y[ic] && y[ic] < (iy_scan+1)*dy ) )
53 counter[ix_scan][iy_scan]++;
57 /* find max of counter value */
60 fprintf( stderr, "\n distribution \n" );
61 for ( ix_scan=0 ; ix_scan<N_MAX_GRID ; ix_scan++ )
64 for ( iy_scan=0 ; iy_scan<N_MAX_GRID ; iy_scan++ )
66 if ( counter[ix_scan][iy_scan] > max_bin )
68 fprintf( stderr, " %2d", counter[ix_scan][iy_scan] );
71 fprintf( stderr, "\n" );
73 bin = (int *)malloc( (max_bin+1)*sizeof(int) );
74 for ( ix_scan=0 ; ix_scan<N_MAX_GRID ; ix_scan++ )
76 for ( iy_scan=0 ; iy_scan<N_MAX_GRID ; iy_scan++ )
78 bin[ counter[ix_scan][iy_scan] ]++;
82 fprintf( stderr, "\n binning \n" );
83 for ( ibin=0 ; ibin<max_bin ; ibin++ )
85 printf( " %d %d \n", ibin, bin[ibin] );