xref: /plan9/sys/src/cmd/unix/drawterm/libsec/nfastrand.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1 #include <u.h>
2 #include <libc.h>
3 #include <libsec.h>
4 
5 #define Maxrand	((1UL<<31)-1)
6 
7 ulong
nfastrand(ulong n)8 nfastrand(ulong n)
9 {
10 	ulong m, r;
11 
12 	/*
13 	 * set m to the maximum multiple of n <= 2^31-1
14 	 * so we want a random number < m.
15 	 */
16 	if(n > Maxrand)
17 		abort();
18 
19 	m = Maxrand - Maxrand % n;
20 	while((r = fastrand()) >= m)
21 		;
22 	return r%n;
23 }
24