Pseudo-random numbers/Xorshift star: Difference between revisions

m
→‎{{header|Julia}}: no masking for 64 bit unsigneds
(→‎{{header|Go}}: Rely on implicit conversion from uint64 to uint32 rather than use a mask.)
m (→‎{{header|Julia}}: no masking for 64 bit unsigneds)
Line 218:
=={{header|Julia}}==
{{trans|Python}}
<lang julia>const mask64mask32 = (0x1 << 6432) - 1
const mask32 = (0x1 << 32) - 1
const CONST = 0x2545F4914F6CDD1D
mutable struct XorShiftStar
state::UIntUInt64
end
XorShiftStar(_seed=0x0) = XorShiftStar(UInt(_seed) & mask64)
 
seed(x::XorShiftStar, num) = begin x.state = UInt64(num & mask64) end
 
"""return random int between 0 and 2**32"""
function next_int(x::XorShiftStar)
x.state = (x.state ⊻ (x.state >> 12)) & mask64
x.state = (x.state ⊻ (x.state << 25)) & mask64
x.state = (x.state ⊻ (x.state >> 27)) & mask64
return (((x.state * CONST) & mask64) >> 32) & mask32
end
 
4,105

edits