4.3BSD/usr/contrib/apl/src/af.c

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

static char Sccsid[] = "af.c @(#)af.c	1.1	10/1/82 Berkeley ";
#include "apl.h"

#ifdef vax
#define	MAXRAND	2147483648.
#else
#define	MAXRAND	32768.
#endif

ex_deal()
{
	register struct item *p;
	register m, n;
	double f;
	data d1, d2;

	m = topfix();
	n = topfix();
	if(m < 0 || m > n)
		error("deal D");
	p = newdat(DA, 1, m);
	datum = thread.iorg;
	for(; n!=0; n--) {
		f = m;
		f /= n;
		if(rand()/MAXRAND < f) {
			putdat(p, datum);
			m--;
		}
		datum += one;
	}
	m = p->size;
	while(m > 0) {
		f = rand()/MAXRAND;
		n = m * f;
		m--;
		if(n != m) {
			p->index = n;
			d1 = getdat(p);
			p->index = m;
			d2 = getdat(p);
			p->index = n;
			putdat(p, d2);
			p->index = m;
			putdat(p, d1);
		}
	}
	*sp++ = p;
}

data
ex_rand(d)
data d;
{
	double f;

	f = (rand()/MAXRAND) * d;
	d = floor(f) + thread.iorg;
	return(d);
}