V8/usr/src/cmd/cfront/libC/task/sim.c

Compare this file to the similar file:
Show the results in this format:

#include "task.h"

histogram.histogram(int nb, int ll, int rr)
{
	register int i;
	if (rr<=ll || nb<1) task_error(E_HISTO,0);
	if (nb%2) nb++;
	while ((rr-ll)%nb) rr++;
	binsize = (rr-ll)/nb;
	h = new int[nb];
	while (h == 0) task_error(E_STORE,0);
	for (i=0; i<nb; i++) h[i] = 0;
	l = ll;
	r = rr;
	nbin = nb;
	sum = 0;
	sqsum = 0;
}

void histogram.add(int a)
/* add a to one of the bins, adjusting histogram, if necessary */
{
	register int i, j;

	/* make l <= a < r, */
        /*      possibly expanding histogram by doubling binsize and range */
	while (a<l) {
		l -= r - l;
		for (i=nbin-1, j=nbin-2; 0<=j; i--, j-=2) h[i] = h[j] + h[j+1];
		while(i >= 0) h[i--] = 0;
		binsize += binsize;
	}
	while (r<=a) {
		r += r - l;
		for (i=0, j=0; i<nbin/2 ; i++, j+=2) h[i] = h[j] + h[j+1];
		while (i < nbin) h[i++] = 0;
		binsize += binsize;
	}
	sum += a;
	sqsum += a * a;
	h[(a-l)/binsize]++;
}

void histogram.print()
/*
	printout non-empty ranges
*/
{
	register int i;
	register int x;
	int d = binsize;
	
	for (i=0; i<nbin; i++) {
		if (x=h[i]) {
			int ll = l+d*i;
			printf("[%d:%d) : %d\n",ll,ll+d,x);
		}
	}
} 

/*
int erand.draw()
{
	int k;
	float a;

	for(k=0;;k++) {
		register float u1, u2;
		a = u1 = fdraw();
		do {
			u2 = fdraw();
			if (u1 < u2) return (int) k+a;
			u1 = fdraw();
		} while (u1<u2);
	}
	
}
*/