Jump to content

Pseudo-random numbers/PCG32: Difference between revisions

m
m (→‎REXX: Oops)
Line 994:
=={{header|Lua}}==
{{trans|C}}
<lang lua>function uint32(n)</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}}
<pre>2707161783
Line 1,382 ⟶ 1,330:
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
for some Java coffiescoffees!
<lang rexx>Numeric Digits 40
N = 6364136223846793005
2,300

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.