如何使用C 以有效的方式产生随机数

How to produce random number in a efficient way with c++

本文关键字:方式产 随机数 有效 何使用      更新时间:2023-10-16

i正在使用boost和Quartlib产生包含随机数的'数组'(标准正常分布式)。但是,我注意到计算性能不是很可取,而且速度比简单使用python的速度要慢得多。谁能给我一些建议?非常感谢。

这是我的C 代码:

using namespace QuantLib;
Array generateRandNumbers(unsigned long seed, Size n) { 
    Array res(n);
    boost::mt19937 rnd(seed); 
    boost::normal_distribution<> normDist(0, 1); 
    boost::variate_generator<boost::mt19937&, boost::normal_distribution<>> generator_norm(rnd, normDist); 
    BOOST_FOREACH(Real& x, res) x = generator_norm();
    return res;
}
int main() 
{
    unsigned long seed = 1; 
    Size n = 1e6;
    boost::timer timer;
    Array randNumbers = generateRandNumbers(seed, n); 
    std::cout << timer.elapsed() << std::endl; 
    return 0
}

这是我的python代码:

import numpy as np
import time
ts = time.time()
res = np.random.normal(0, 1, 1000000); 
print(time.time() - ts)

您问:

谁能给我一些建议?

编程语言不可能在这里发挥主要因素。因此,这个问题归结为其他参数:

  1. 使用的随机数算法(例如Mersenne Twister)
  2. 算法的实施细节可能影响灌注
  3. 如何编译,链接和运行代码。(发布,调试会话,编译器优化)

至于最后一点 - 确保进行比较时,您始终使用优化的版本构建。