问题描述
我正在尝试使用 R Studio 在 R 语言中实现 Mersenne Twister 算法,但我不断收到以下错误:“eval(expr,p) 中的错误:找不到对象‘m’”,如果我评论包含 m 的行,它会说“在 eval(expr,p) 中出错:找不到对象‘索引’”。我试图寻找答案,但找不到任何有用的东西。有人能解释一下为什么会发生这种情况吗?谢谢!
library(bitops)
library(Oarray)
Mersenne = function(seed,k) # k - fr
{
# init
state = Oarray(1:624,offset = 0)
for (i in 0:623)
state[i] = 0
f = 1812433253L
m = 397L
u = 11L
s = 7L
b = 0x9D2C5680
t = 15L
c = 0xEFC60000
l = 18L
index = 624L
lower_mask = bitShiftL(1,31) - 1
upper_mask = bitShiftL(1,31)
state[0] = seed
for (i in 1:623)
state[i] = bitAnd(0xFFFFFFFF,(f * bitXor(state[i - 1],bitShiftR(state[i - 1],30)) + i))
for (j in 1:20)
{
if (index >= 624)
{
for (i in 0:623)
{
temp = bitAnd(0xFFFFFFFF,(bitAnd(state[i],upper_mask) + bitAnd(state[(i + 1) %% 624],lower_mask)))
temp_shift = bitShiftR(temp,1)
if (temp %% 2 != 0)
temp_shift = bitXor(temp_shift,0x9908b0df)
state[i] = bitXor(state[(i + m) %% 624],temp_shift) # HERE
#state[i] = bitXor(state[(i + 397) %% 624],temp_shift)
}
index = 0L
}
}
y = state[index] # HERE
#y = state[0]
y = bitXor(y,bitShiftR(y,u))
y = bitXor(y,bitAnd(bitShiftL(y,s),b))
y = bitXor(y,t),c))
y = bitXor(y,l))
index = index + 1
return (bitAnd(0xFFFFFFFF,y))
}
Mersenne(123,20)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)