C++ 从R转换的随机生成代码在C++;

C++ 从R转换的随机生成代码在C++;,c++,r,rcpp,C++,R,Rcpp,我正在编写代码,实现从正态分布尾部采样的随机生成算法。问题是,虽然R中的代码工作正常,但如果失败,则将其翻译成C++。我看不出有什么原因,如果能向我解释出哪里出了问题以及原因,我将不胜感激 请注意,下面的代码远非优雅和高效,它被简化为可复制的示例 以下是R中的函数: rtnormR虽然可以在rexp()中使用scale或rate,默认参数化是rate-因此rexp(1,astar)的平均值为1/astar,而不是astar 如果将C++代码的相关行更改为 z = R::exp_rand() /

我正在编写代码,实现从正态分布尾部采样的随机生成算法。问题是,虽然R中的代码工作正常,但如果失败,则将其翻译成C++。我看不出有什么原因,如果能向我解释出哪里出了问题以及原因,我将不胜感激

请注意,下面的代码远非优雅和高效,它被简化为可复制的示例

以下是R中的函数:


rtnormR虽然可以在
rexp()
中使用
scale
rate
,默认参数化是
rate
-因此
rexp(1,astar)
的平均值为
1/astar
,而不是
astar

如果将C++代码的相关行更改为

z = R::exp_rand() / astar + z_lower;

一切似乎都很好。

@BenBolker Right。。。我查看了
rexp.c
的代码,其中
exp\u rand()
乘以比例。。。请随意把它作为答案贴出来,我会接受的。否则我将删除这个问题。顺便说一句,如果你对单点取样,你看不到真正的速度差异。您的C++变体对于这些截断法线的向量可能更好。@ DrkdDelbutelt:我知道,这是一个简化的例子,不是为了真正的使用,这样做只是为了重现。矢量化版本可能适合Rcpp库。有兴趣写一篇文章吗?@DirkEddelbuettel我会考虑一下,然后联系你:)
z = R::exp_rand() / astar + z_lower;