BSD 4 development
[unix-history] / usr / src / cmd / apl / af.c
CommitLineData
f296af7b
BJ
1#include "apl.h"
2
3ex_deal()
4{
5 register struct item *p;
6 register m, n;
7 double f;
8 data d1, d2;
9
10 m = topfix();
11 n = topfix();
12 if(m < 0 || m > n)
13 error("deal D");
14 p = newdat(DA, 1, m);
15 datum = thread.iorg;
16 for(; n!=0; n--) {
17 f = m;
18 f /= n;
19 if(rand()/(32768.*32768.*2.) < f) {
20 putdat(p, datum);
21 m--;
22 }
23 datum += one;
24 }
25 m = p->size;
26 while(m > 0) {
27 f = rand()/(32768.*32768.*2.);
28 n = m * f;
29 m--;
30 if(n != m) {
31 p->index = n;
32 d1 = getdat(p);
33 p->index = m;
34 d2 = getdat(p);
35 p->index = n;
36 putdat(p, d2);
37 p->index = m;
38 putdat(p, d1);
39 }
40 }
41 push(p);
42}