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