コード例 #1
0
ファイル: dist.c プロジェクト: carriercomm/netem
static short * dist_make(FILE *fp, double *mu, double *sigma, double *rho)
{
	int limit;
	double *x;
	int *table;
	short *inverse;
	int total;

	x = readdoubles(fp, &limit);
	if (limit <= 0)
		error(-1, 0, "Nothing much read!");

	arraystats(x, limit, mu, sigma, rho);

	fprintf(stderr, "Read %d values, mu %10.4f, sigma %10.4f, rho %10.4f\n",
		limit, *mu, *sigma, *rho);
	
	table = makedist(x, limit, *mu, *sigma);
	free((void *) x);

	cumulativedist(table, DISTTABLESIZE, &total);
	inverse = inverttable(table, TABLESIZE, DISTTABLESIZE, total);
	interpolatetable(inverse, TABLESIZE);
	
	return inverse;
}
コード例 #2
0
ファイル: maketable.c プロジェクト: idosch/iproute2
int
main(int argc, char **argv)
{
	FILE *fp;
	double *x;
	double mu, sigma, rho;
	int limit;
	int *table;
	short *inverse;
	int total;

	if (argc > 1) {
		if (!(fp = fopen(argv[1], "r"))) {
			perror(argv[1]);
			exit(1);
		}
	} else {
		fp = stdin;
	}
	x = readdoubles(fp, &limit);
	if (limit <= 0) {
		fprintf(stderr, "Nothing much read!\n");
		exit(2);
	}
	arraystats(x, limit, &mu, &sigma, &rho);
#ifdef DEBUG
	fprintf(stderr, "%d values, mu %10.4f, sigma %10.4f, rho %10.4f\n",
		limit, mu, sigma, rho);
#endif

	table = makedist(x, limit, mu, sigma);
	free((void *) x);
	cumulativedist(table, DISTTABLESIZE, &total);
	inverse = inverttable(table, TABLESIZE, DISTTABLESIZE, total);
	interpolatetable(inverse, TABLESIZE);
	printtable(inverse, TABLESIZE);
	return 0;
}