兰特的C++/OpenMP错误
问题描述:
这是我的代码,应该用蒙特卡罗方法计算Pi。我们输入:thread_count - 处理器线程的数量,n - 随机生成点的数量。 这里是我的代码如下兰特的C++/OpenMP错误
using namespace std;
int main (int argc, char* argv[]) {
/*sprawdzanie danych: thread_count - liczba wątków, n - liczba punktów*/
if (argc != 3) {
cout << "Co Ty piszesz!. Ma być: ./pi <thread_count> <n>" << endl;
exit(-1);
}
/*Sprawiamy by liczby były całkowite*/
int thread_count = atoi(argv[1]);
long n = atoi(argv[2]);
/*Test wartosci liczb*/
if (thread_count <= 0 || n <= 0) {
cout << "Co Ty piszesz!. Ma byc większe od 0" << endl;
exit(-1);
}
unsigned ziarno;
double x, y;
long int Ustrzelone = 0;
double Start = omp_get_wtime();
#pragma omp parallel default(none) private(x,y, ziarno) firstprivate(n) reduction(+:Ustrzelone) num_threads(thread_count)
{
ziarno = 25231 + 16*omp_get_thread_num();
#pragma omp for schedule(dynamic)
for(long i = 0; i <= n; i++) {
x = (double) rand_r(&ziarno)/RAND_MAX * 2 - 1;
y = (double) rand_r(&ziarno)/RAND_MAX * 2 - 1;
if ((x*x) + (y*y) <= 1.0) {
Ustrzelone += 1;
}
}
}
double Stop = omp_get_wtime();
double czas_obliczen = 1000 * (Stop - Start);
/*Ustawienie ilosci liczb po przecinku i wyswietlenie wyniku*/
cout.precision(15);
//double pi = (double) 4*Ustrzelone/n;
//cout << "Pi wynosi " << pi << endl;
cout << czas_obliczen << endl;
return 0;
在输出我得到的错误这样的: [Error] 'rand_r' was not declared in this scope
不会离开这个多少时间所以希望你能带给我一些结论如何使它更好。
提前致谢。
答
好,因为你正在使用名称空间标准; (不推荐),也许尝试:: rand_r帮助其找到合适的实现......
你缺少一个'#包括' –
都能跟得上,我不会错过它:'#包括 的#include #include #include ' –
panicagaming
YouTube ** are missing it!在你的问题**中提供适当的[mcve] **。 – Zulan