【Defold】Permuted congruential generator (PCG) 疑似乱数生成「PCG Random」アセット
目次
PCG Random について
Permuted congruential generator (PCG) は2014年に発表された擬似乱数生成器。 線形合同法の出力を加工することで統計的性質を改善したものである。高速、省メモリかつ小さいコードサイズで非常に良い統計的性質を示す 。. PCGは古典的な線形合同法と3つの点で異なる。
https://ja.wikipedia.org/wiki/Permuted_congruential_generator
アセットページ
https://defold.com/assets/pcgrandom/
ライブラリのURL
https://github.com/selimanac/defold-random/archive/master.zip
サンプル
local d = 0.0
local x = 0
local y = 0
local init_state = 0
local init_seq = 0
local function test()
print("--------------------")
print("Numbers")
for i = 1, 10 do
num = rnd.number()
print("32 bit unsigned integer: " .. num)
end
print("--------------------")
print("TOSS A COIN")
for i = 1, 10 do
num = rnd.toss()
print("Toss: " .. num) -- 0 = 'H' : 1 = 'T'
end
print("--------------------")
print("ROLL THE DICE")
for i = 1, 10 do
num = rnd.roll()
print("Roll: " .. num)
end
print("--------------------")
print("DOUBLE 0 -> 1 ")
for i = 1, 10 do
d = rnd.double()
print("Double: " .. d) -- range [0,1]
end
print("--------------------")
print("RANGE")
for i = 1, 10 do
x = rnd.range(10, 30)
y = rnd.range(50, 70)
print("Range:", x, y)
num = rnd.range(x, y)
print("Result (unsigned int): " .. num)
end
print("Error check:")
local z = rnd.range(1, 0)
print(z)
print("--------------------")
end
function init(self)
-- entropy test
test()
-- Static seed test
init_state = 9191672977641436
init_seq = 1156804664428462
rnd.seed(init_state, init_seq)
print("Static")
test()
-- re-seed by using entropy
rnd.seed() -- Seed the generator using entropy
test()
-- system check
rnd.check()
end