Ruby에 사용되는 무작위 수의 균등한 분포 정보

6186 단어 Ruby
멜슨 쌍교선이란 보통의 무작위(주기장) 값을 생성하는 방법(상세내용Wikipedia을 MT로 생략한 것 같다
Ruby가 표준인 것 같아요. 이걸 채택했어요.
아마 수치 분포가 균등했겠죠 어쨌든 이런 느낌으로 100만 번 평균을 얻었죠
MAX_VAL = 101
REP_CNT = 10**6

sum = 0.0
prng = Random.new(Random.new_seed)
(0...REP_CNT).each{|idx|
    p sum = (sum*idx + prng.rand(MAX_VAL))/(idx+1)
}
결과
50.036861963137966
끝난 건 알지만 어떻게 끝냈는지 이해하기 쉽도록 차트를 꺼내봤습니다
# -*- encoding: utf-8 -*-

require 'rubygems'
require 'gruff'

FONT = "/Library/Fonts/Osaka.ttf"
MAX_VAL = 101
GRAPH_NUM = 7
REP_CNT = 10**GRAPH_NUM

graph_point = Array.new(GRAPH_NUM)

avg, rec_cnt = 0.0, 0
prng = Random.new(Random.new_seed)
(0...REP_CNT).each{|idx|
    avg = (avg*idx + prng.rand(MAX_VAL))/(idx+1)
    if 10**rec_cnt-1 == idx
        graph_point[rec_cnt] = avg
        rec_cnt += 1
    end
}

p graph_point

g = Gruff::Line.new
g.font = FONT

(0..graph_point.length).each{|idx|
    g.labels[idx] = "10^#{idx}"
}

g.data("Mersenne twister", graph_point)
g.write('MT.png')
実際の値は
10^0:67.0
10^1:55.5
10^2:52.39
10^3:51.352
10^4:50.076400000000085
10^5:49.93751999999963
10^6:49.99161700000036
10^7:49.99675620000007
50에 가까워진 거 알아요.
분포가 균등한 것을 발견하여 안심하다

좋은 웹페이지 즐겨찾기