BSD 3 development
[unix-history] / usr / src / cmd / apl / af.c
#include "apl.h"
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()/(32768.*32768.*2.) < f) {
putdat(p, datum);
m--;
}
datum += one;
}
m = p->size;
while(m > 0) {
f = rand()/(32768.*32768.*2.);
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);
}
}
push(p);
}