微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R语言Mersenne Twister算法

如何解决R语言Mersenne Twister算法

我正在尝试使用 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 举报,一经查实,本站将立刻删除。