【Defold】Permuted congruential generator (PCG) 疑似乱数生成「PCG Random」アセット

2020/09/07Defold, DEVELOP

目次

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

お知らせ

Posted by kazupon