【发布时间】:2012-10-21 05:27:43
【问题描述】:
我正在使用 STL 的“随机”生成二项式分布的随机数。当范围很大时,它变得非常慢。对于范围 40,生成 100 个数字需要 12 秒。对于更大的范围,时间会急剧增加(我需要大约 10000 的范围)。它似乎不依赖于概率参数。我正在使用 g++ 4.5.0。
#include <iostream>
#include <random>
using namespace std;
vector<int> v;
default_random_engine gen(123);
binomial_distribution<int> rbin(40,0.7);
int main(){
v.reserve(2000);
for(int i=0; i<100;++i){
v.push_back(rbin(gen));
}
}
输出:
50.~/.../fs/> g++ -std=c++0x q.cpp
51.~/.../fs/> time ./a.out
real 0m12.102s
user 0m12.094s
sys 0m0.002s
52.~/.../fs/>
我可以使用正态近似,但它对概率参数的极值不利。
更新:
使用“-O3”选项,时间变为约 2 秒。在 g++ 4.6.3 中,问题完全消失了——范围几乎没有任何时间依赖性,生成 100 个数字需要 5 毫秒。
【问题讨论】:
-
你的问题是......?
标签: c++ gcc random c++11 libstdc++