Armadillo使用的随机数生成器是什么?

3

我正在使用R中的Armadillo C++库中的随机数生成器,Armadillo允许高性能计算矩阵和向量。但是,我无法确定它实际上正在实现哪个随机数生成器。

Rcpp Armadillo到底使用的是哪个随机数生成器?


根据您使用的随机函数,Armadillo将使用均匀分布或高斯分布作为其RNG。 - wkl
1
@JonnyHenly “看起来RcppArmadillo在紧急情况下使用R中的RNG” 这个在文档中有提到吗? - Simd
除了Armadillo文档中提到的内容之外,还有一个额外的方面:我们实际上插入了R RNGs,因为这是Rcpp默认的做法。 - Dirk Eddelbuettel
需要我将我的回答变成社区维基吗? - Jonny Henly
2
就是这样。 - Dirk Eddelbuettel
显示剩余7条评论
1个回答

6
根据RcppArmadillo编译时是否为C++98标准(目前默认)或C++11(可选),可能会使用两种不同的RNG。[...] 对于C++98,使用系统库RNG。在旧版Windows上性能可能较差。对于C++11,使用其库中包含的RNG。- RcppArmadillo文档 “对于C++98,使用系统库RNG。” - 系统库RNG是std::rand(),尽管似乎RcppArmadillo使用R中的RNG作为备用(当未选择C++11以使C++11基于的RNG不可用时),这避免了使用旧的C++98基于的std::rand()1 “对于C++11,使用其库中包含的RNG。” - 这是指C++11的<random>库。
另一方面,还需要考虑 RcppArmadilloForward.h 中的此注释
// using this define makes the R RNG have precedent over both the
// C++11-based RNG provided by Armadillo, as well as the C++98-based
// fallback.
//
// One can use the C++11-based on by commenting out the following
// #define and also selecting C++11 (eg via src/Makevars* or the
// DESCRIPTION file) and/or defining #define-ing ARMA_USE_CXX11_RNG
#define ARMA_RNG_ALT         RcppArmadillo/Alt_R_RNG.h

这将启用 R RNGs 作为 RcppArmadillo 的引擎。


1 R-bloggers | RcppArmadillo 0.4.450.1.0

翻译为:

1 {{链接1:R-bloggers | RcppArmadillo 0.4.450.1.0}}


谢谢。看起来根据你的答案,文档需要更新。 - Simd
1
欢迎提交拉取请求。我提交了一个问题。请注意,DESCRIPTION文件告诉您应该在那里报告错误,而不是在这里。 - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接