DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T g

⟦46436c529⟧ TextFile

    Length: 1570 (0x622)
    Types: TextFile
    Names: »gau.c«

Derivation

└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/bsd/gau.c« 
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/bsd/gau.c« 

TextFile

#define MULTIPLIER 	25173
#define MODULUS 	65536
#define INCREMENT 	13849
#define FLOATING_MODULUS 	65536.0
#define NITER 		30000

float	sqrt(), log(), rnd(), gauss();
char	*malloc();

main(argc, argv)
	char	*argv[];
{
	register int pn, i, niter, delta;
	register char *pages;
	float sd = 10.0;
	int npages = 4096,pagesize;
	char *name;
	double atof();

	name = argv[0];
	argc--, argv++;
again:
	if (argc < 1)
		goto suite;
	if (strcmp(*argv, "-s") == 0){
		argc--, argv++;
		if(argc < 1)
			goto suite;
		sd= (double) atof(*argv);
		if (sd <= 0){
			printf("%s: Bad standard deviation.\n",*argv);
			exit(2);
		}
		argc--,argv++;
		goto again;
	}
	if (strcmp(*argv, "-p") == 0) {
		argc--,argv++;
		if(argc < 1)
			goto suite;
		npages = atoi(*argv);
		if(npages <= 0){
			printf("%s: Bad page count.\n",*argv);
			exit(2);
		}
		argc--,argv++;
		goto again;
		
	}
suite:	niter = NITER;
	pagesize = 1024;
	pages = malloc(npages * pagesize);
	if(pages == (char *) 0){
		printf("Can't allocate %d pages ( %2.1f megabytes).\n",
			npages, (npages * pagesize) / (1024. * 1024.));
		exit(3);
	}
	pn = 0;
	for(i= 0; i < niter; i++){
		delta = gauss(sd, 0.0);
		while(pn + delta < 0 || pn + delta > npages)
			delta = gauss(sd, 0.0);
			pn += delta;
			pages[pn * pagesize  ] = 1;
	}
}

float
gauss(sd, mean)
	float sd, mean;
{
	register float qa, qb;

	qa = sqrt(log(rnd()) * -2.0);
	qb = 3.14159 * rnd();
	return (qa * (1.0 - (qb*qb)/2.0) * sd + mean);
}
float
rnd()
{
	static int seed ;
	seed = (MULTIPLIER * seed + INCREMENT) % MODULUS;
	return (seed/FLOATING_MODULUS);
}