RosettaCodeData/Task/Pseudo-random-numbers-Splitmix64/Mathematica/pseudo-random-numbers-splitmix64.math
2023-07-01 13:44:08 -04:00

18 lines
645 B
Text

ClearAll[BitShiftLevelUint, MultiplyUint, GenerateRandomNumbers]
BitShiftLevelUint[z_, n_] := BitShiftRight[z, n]
MultiplyUint[z_, n_] := Mod[z n, 2^64]
GenerateRandomNumbers[st_, n_] := Module[{state = st},
Table[
state += 16^^9e3779b97f4a7c15;
state = Mod[state, 2^64];
z = state;
z = MultiplyUint[BitXor[z, BitShiftLevelUint[z, 30]], 16^^bf58476d1ce4e5b9];
z = MultiplyUint[BitXor[z, BitShiftLevelUint[z, 27]], 16^^94d049bb133111eb];
Mod[BitXor[z, BitShiftLevelUint[z, 31]], 2^64]
,
{n}
]
]
GenerateRandomNumbers[1234567, 5]
nums = GenerateRandomNumbers[987654321, 10^5];
KeySort[Counts[Floor[5 nums/N[2^64]]]]