RosettaCodeData/Task/Pseudo-random-numbers-Splitmix64/Maxima/pseudo-random-numbers-splitmix64.maxima
2026-04-30 12:34:36 -04:00

27 lines
615 B
Text

seed: 1234567$
splitmix64() := block(
mask64: 2^64-1,
c1: 11400714819323198485,
c2: 13787848793156543929,
c3: 10723151780598845931,
seed: bit_and(seed+c1, mask64),
z: seed,
z: bit_and(bit_xor(z, bit_rsh(z, 30))*c2, mask64),
z: bit_and(bit_xor(z, bit_rsh(z, 27))*c3, mask64),
bit_and(bit_xor(z, bit_rsh(z, 31)), mask64)
)$
splitmix64_float() := splitmix64()/(2^64)$
thru 5 do print(splitmix64());
block(
seed: 987654321,
counts: makelist(0, 5),
thru 100000 do(
res: floor(splitmix64_float()*5),
counts[res+1]: counts[res+1] + 1
),
counts
);