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