【发布时间】:2015-05-11 12:55:25
【问题描述】:
我正在尝试绘制一些随机点,然后用它们进行计算。我使用的线程很少,但我的随机数并不像它应该的那样随机......我的意思是当我使用 rand() 时,我得到了正确的答案,但非常慢(因为静态 rand),所以我使用的是 rand_r有种子,但我的程序的答案总是很奇怪。
double randomNumber(unsigned int seed, double a, double b) {
return a + ((float)rand_r(&seed))/(float)(RAND_MAX) * (b-a);
}
我的程序:
#pragma omp parallel
for(int i = 0; i < points; i++){
seedX = (i+1) * time(NULL);
seedY = (points - i) * time(NULL);
punkt.x = randomNumber(seedX, minX, maxX);
punkt.y = randomNumber(seedY, minY, maxY);
...
}
我在其他主题中找到了一些解决方案(一些 mt19937 生成器等),但我无法编译任何东西。
我正在使用 g++ -fopenmp 进行编译。(g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2)
编辑:
seed = rand();
#pragma omp parallel
for(int i = 0; i < points; i++){
punkt.x = randomNumber(seed, minX, maxX);
punkt.y = randomNumber(seed, minY, maxY);
...
}
【问题讨论】:
标签: c++ multithreading random openmp