xref: /plan9/sys/src/cmd/unix/drawterm/libc/lnrand.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include	<u.h>
2*8ccd4a63SDavid du Colombier #include	<libc.h>
3*8ccd4a63SDavid du Colombier 
4*8ccd4a63SDavid du Colombier #define	MASK	0x7fffffffL
5*8ccd4a63SDavid du Colombier 
6*8ccd4a63SDavid du Colombier long
lnrand(long n)7*8ccd4a63SDavid du Colombier lnrand(long n)
8*8ccd4a63SDavid du Colombier {
9*8ccd4a63SDavid du Colombier 	long slop, v;
10*8ccd4a63SDavid du Colombier 
11*8ccd4a63SDavid du Colombier 	if(n < 0)
12*8ccd4a63SDavid du Colombier 		return n;
13*8ccd4a63SDavid du Colombier 	slop = MASK % n;
14*8ccd4a63SDavid du Colombier 	do
15*8ccd4a63SDavid du Colombier 		v = lrand();
16*8ccd4a63SDavid du Colombier 	while(v <= slop);
17*8ccd4a63SDavid du Colombier 	return v % n;
18*8ccd4a63SDavid du Colombier }
19