Pseudo-random numbers/PCG32: Difference between revisions

Content added Content deleted
m (→‎REXX: Oops)
Line 994: Line 994:
=={{header|Lua}}==
=={{header|Lua}}==
{{trans|C}}
{{trans|C}}
<lang lua>function uint32(n)
<lang lua></lang>
return n & 0xffffffff
end

function uint64(n)
return n & 0xffffffffffffffff
end

N = 6364136223846793005
state = 0x853c49e6748fea9b
inc = 0xda3e39cb94b95bdb

function pcg32_seed(seed_state, seed_sequence)
state = 0
inc = (seed_sequence << 1) | 1
pcg32_int()
state = state + seed_state
pcg32_int()
end

function pcg32_int()
local old = state
state = uint64(old * N + inc)
local shifted = uint32(((old >> 18) ~ old) >> 27)
local rot = uint32(old >> 59)
return uint32((shifted >> rot) | (shifted << ((~rot + 1) & 31)))
end

function pcg32_float()
return 1.0 * pcg32_int() / (1 << 32)
end

-------------------------------------------------------------------

pcg32_seed(42, 54)
print(pcg32_int())
print(pcg32_int())
print(pcg32_int())
print(pcg32_int())
print(pcg32_int())
print()

counts = { 0, 0, 0, 0, 0 }
pcg32_seed(987654321, 1)
for i=1,100000 do
local j = math.floor(pcg32_float() * 5.0) + 1
counts[j] = counts[j] + 1
end

print("The counts for 100,000 repetitions are:")
for i=1,5 do
print(" " .. (i - 1) .. ": " .. counts[i])
end</lang>
{{out}}
{{out}}
<pre>2707161783
<pre>2707161783
Line 1,382: Line 1,330:
It was a challenge to understand how some Java constructs work and to end up with the identical output.
It was a challenge to understand how some Java constructs work and to end up with the identical output.
DON'T use Rexx, however, for this type of problem unless you take the time spent
DON'T use Rexx, however, for this type of problem unless you take the time spent
for some Java coffies!
for some Java coffees!
<lang rexx>Numeric Digits 40
<lang rexx>Numeric Digits 40
N = 6364136223846793005
N = 6364136223846793005