From 3ff375493dcbce241d02e9429c3fb8c73f9a3560 Mon Sep 17 00:00:00 2001 From: Alex Clink Date: Sun, 23 Jan 2022 16:20:30 -0500 Subject: [PATCH] Add Lehmer32 random number generator --- src/lehmer32.cr | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/lehmer32.cr diff --git a/src/lehmer32.cr b/src/lehmer32.cr new file mode 100644 index 0000000..4e068d0 --- /dev/null +++ b/src/lehmer32.cr @@ -0,0 +1,23 @@ +module PF + class Lehmer32 + include Random + + @state : UInt32 + + def initialize(@state = rand(type: UInt32)) + end + + def new_seed(n : Number) + @state = n.to_u32! + end + + # Generate the next number in the squence + def next_u + @state &+= 0xe120fc15 + tmp : UInt64 = @state.to_u64! &* 0x4a39b70d + m1 : UInt32 = ((tmp >> 32) ^ tmp).to_u32! + tmp = m1.to_u64! &* 0x12fad5c9 + ((tmp >> 32) ^ tmp).to_u32! + end + end +end