C++ C++/rand中的OpenMP错误

C++ C++/rand中的OpenMP错误,c++,random,compiler-errors,openmp,C++,Random,Compiler Errors,Openmp,这是我用蒙特卡罗方法计算π的代码。我们输入:thread_count-处理器线程数,n-随机生成点数。 下面是我的代码 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ć:

这是我用蒙特卡罗方法计算π的代码。我们输入:thread_count-处理器线程数,n-随机生成点数。 下面是我的代码

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;
使用名称空间std;
int main(int argc,char*argv[]){
/*sprawdzanie danych:线程计数-liczba wątków,n-liczba punktów*/
如果(argc!=3){

既然您使用的是namespace std(不推荐),也许可以尝试::rand#r来帮助它找到正确的实现…

您缺少一个
#include
不,我没有缺少它:
#include#include#include#include
YouTube缺少它!在您的问题中提供一个适当的答案。