有没有一种方法可以在R中实现Xorshift32算法?

时间:2020-05-07 11:34:11

标签: r random

首先,我根本不是R的专家。 我正在寻找一种在R中实现Xorshift32算法的解决方案,如果可能的话,使用RNGKind。

我的最终目标是使用该库对Xorshift32算法执行随机性测试 https://rdrr.io/cran/CryptRndTest/man/adaptive.chi.square.html

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是Wikipedia page中关于xorshift算法的第一个C实现的R版本:

xorshift32 <- function(x)
{
  x <- as.integer(x)
  x <- bitwXor(bitwShiftL(x, 13), x)
  x <- bitwXor(bitwShiftR(x, 17), x)
  bitwXor(bitwShiftL(x, 5), x)
}

xorshift32(1)
#> [1] 270369

不过,最好是直接使用Rcpp::cppFunction创建的R中的函数直接调用已编译的C代码:

Rcpp::cppFunction("uint32_t xorshift32(uint32_t x){x^=x<<13;x^=x>>17;x^=x<<5;return x;}")

xorshift32(1)
#> [1] 270369