SlowSpock |
15.10.2015 23:57 |
Вопрос по Wichmann-Hill RNG
Я написал эмуляцию Wichmann-Hill генератора случайных чисел в R:
Код:
wh.unif = function(n, start=0, end=1){
x = double(n) #initialize x
y = c(171,172,170)
z = c(30269, 30307, 30323)
#If seed does not exist - create it
if (!exists(".WH.seed",envir=.GlobalEnv)){
.WH.seed=trunc(runif(3, 1, 30269))
}else{
.WH.seed=get(".WH.seed",envir=.GlobalEnv)
}
for (i in 1:n) {
.WH.seed = (y*.WH.seed) %% z
x[i] = sum(.WH.seed/z) %% 1
}
#Save the seed
assign("wh",.WH.seed,envir=.GlobalEnv)
start + (end-start) * x
}
Но, он выдает результат отличающийся от runif, а моя задача написать функцию которая будет выдавать такой же результат без использования .Random.seed[-1]
Код:
b=wh.unif2(5);b
set.seed(wh,"Wich")
a=runif(5);a
Как я понимаю, этот форум не совсем по программе R, но может сможете указать на ошибку в коде. Заранее спасибо!
|