簡體   English   中英

如何使用c ++以有效的方式產生隨機數

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

我使用 boost 和 QuantLib 來生成一個包含隨機數(標准正態分布)的“數組”。 但是,我注意到計算性能不是很理想,速度比簡單地使用python的numpy要慢很多。 誰能給我一些建議? 非常感謝。

這是我的 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. 代碼是如何編譯、鏈接和運行的。 (發布、調試會話、編譯器優化)

至於最后一點 - 確保在進行比較時始終使用優化的發布版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM