xref: /inferno-os/appl/lib/rand.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1implement Rand;
2
3include "rand.m";
4
5rsalt: big;
6
7init(seed: int)
8{
9	rsalt = big seed;
10}
11
12MASK: con (big 1<<63)-(big 1);
13
14rand(modulus: int): int
15{
16	rsalt = rsalt * big 1103515245 + big 12345;
17	if(modulus <= 0)
18		return 0;
19	return int (((rsalt&MASK)>>10) % big modulus);
20}
21
22# 0 < modulus < 2^53
23bigrand(modulus: big): big
24{
25	rsalt = rsalt * big 1103515245 + big 12345;
26	if(modulus <= big 0)
27		return big 0;
28	return ((rsalt&MASK)>>10) % modulus;
29}
30