4 #define N_PER_BIN 20000
8 float bins[BINS][N_PER_BIN];
10 float frandom(float low,float high)
12 unsigned long r = random();
14 return low + (high - low)*((double)r)/(2<<20);
17 void create_bin(float *bin)
20 for (i=0;i<N_PER_BIN;i++) bin[i] = frandom(0.0,1.0);
23 void create_bins(void)
31 int cmp(float *f1,float *f2)
33 if (*f1 > *f2) return 1;
34 if (*f1 < *f2) return -1;
38 void merge(float *bin1,float *bin2)
40 float combined[N_PER_BIN*2];
42 memcpy(combined,bin1,sizeof(bin1[0])*N_PER_BIN);
43 memcpy(combined+N_PER_BIN,bin2,sizeof(bin1[0])*N_PER_BIN);
44 qsort(combined,2*N_PER_BIN,sizeof(combined[0]),cmp);
46 memcpy(bin1,combined,sizeof(bin1[0])*N_PER_BIN);
47 memcpy(bin2,combined+N_PER_BIN,sizeof(bin1[0])*N_PER_BIN);
52 show_density(float *bin,char *name)
58 for (i=0;i<HBINS;i++) hist[i] = 0;
60 for (i=0;i<N_PER_BIN;i++) {
61 int j = (int)((bin[i]-0.0001) / 0.05);
64 for (i=0;i<HBINS;i++) {
65 hist[i] = (hist[i]*HBINS)/(float)N_PER_BIN;
68 f = fopen("hist.dat","w");
70 fprintf(f,"%f\n",hist[i]);
73 f = popen("gnuplot","w");
75 printf("failed to launch gnuplot\n");
80 set data style linespoints
94 merge(bins[0],bins[1]);
96 show_density(bins[0],"none");
97 show_density(bins[1],"none");