rng.bend
bend-prot@0.1.0.0 · 23 lines · 6 definitions
1import Base
2
3
4
5
6
7def rng_step1(z: U32) -> U32:
8 U32.add(z, 2654435769)
9
10def rng_step2(+z: U32) -> U32:
11 U32.mul(U32.xor(z, U32.shrn(z, 16n)), 569420461)
12
13def rng_step3(+z: U32) -> U32:
14 U32.mul(U32.xor(z, U32.shrn(z, 15n)), 1935289751)
15
16def rng_step4(+z: U32) -> U32:
17 U32.xor(z, U32.shrn(z, 15n))
18
19def rng_next(seed: U32) -> U32:
20 rng_step4(rng_step3(rng_step2(rng_step1(seed))))
21
22def rng01(seed: U32) -> F32:
23 (U32.to_f32(rng_next(seed)) / 4294967296.0 : F32)