C++ C++;Rnd()故障

C++ C++;Rnd()故障,c++,random,fault,C++,Random,Fault,伙计们,当我运行程序的时候,我的程序出现了一个奇怪的错误。这是重要的代码: 变量(编辑): const short int maxX = 100; const short int maxZ = 100; const short int lakeChance = 0.9; void addLake(Sect sector[][maxZ], int x, int z){ sector[x][z].setMaterial(1); } //Generating land mass f

伙计们,当我运行程序的时候,我的程序出现了一个奇怪的错误。这是重要的代码:

变量(编辑):

const short int maxX = 100;
const short int maxZ = 100;
const short int lakeChance = 0.9;
void addLake(Sect sector[][maxZ], int x, int z){    
    sector[x][z].setMaterial(1);
}
//Generating land mass
for (int x = 0; x < maxX; x++){
    for (int z = 0; z < maxZ; z++){
        //Default material
        sector[x][z].setMaterial(0);

        //Add lake/sea source
        int r = rand();
        float r1 = (r % 1000);
        float r2 = r1 / 1000;

        if (r2 <= lakeChance) addLake(sector, x, z);
    }
}
添加功能(编辑):

const short int maxX = 100;
const short int maxZ = 100;
const short int lakeChance = 0.9;
void addLake(Sect sector[][maxZ], int x, int z){    
    sector[x][z].setMaterial(1);
}
//Generating land mass
for (int x = 0; x < maxX; x++){
    for (int z = 0; z < maxZ; z++){
        //Default material
        sector[x][z].setMaterial(0);

        //Add lake/sea source
        int r = rand();
        float r1 = (r % 1000);
        float r2 = r1 / 1000;

        if (r2 <= lakeChance) addLake(sector, x, z);
    }
}
主要来源(编辑):

const short int maxX = 100;
const short int maxZ = 100;
const short int lakeChance = 0.9;
void addLake(Sect sector[][maxZ], int x, int z){    
    sector[x][z].setMaterial(1);
}
//Generating land mass
for (int x = 0; x < maxX; x++){
    for (int z = 0; z < maxZ; z++){
        //Default material
        sector[x][z].setMaterial(0);

        //Add lake/sea source
        int r = rand();
        float r1 = (r % 1000);
        float r2 = r1 / 1000;

        if (r2 <= lakeChance) addLake(sector, x, z);
    }
}
//生成地块
对于(int x=0;xrand()
之前尝试
rand()

在调用
rand()
之前尝试
randomize()
,我看不到任何明显的错误。因此我尝试了以下代码:

int test(float chance)
{
    int call = 0;

    for(int i = 0; i != 100000; i++)
    {
        int r = rand();

        float r1 = (r % 1000);

        float r2 = r1 / 1000;

        if(r2 <= chance)
            call++;
    }

    cout << "Chance is " << chance << ": " << call << " invocations or "
         << ((100.0 * call) / 100000.0) << "% of the time!" << endl;

    return call;    
}
您要添加多少个湖泊?

我看不出明显的错误。因此,我尝试了以下代码:

int test(float chance)
{
    int call = 0;

    for(int i = 0; i != 100000; i++)
    {
        int r = rand();

        float r1 = (r % 1000);

        float r2 = r1 / 1000;

        if(r2 <= chance)
            call++;
    }

    cout << "Chance is " << chance << ": " << call << " invocations or "
         << ((100.0 * call) / 100000.0) << "% of the time!" << endl;

    return call;    
}


你想添加多少个湖泊?

我做了,这与随机数无关,它们每次都会出现不同的结果。我做了,这与随机数无关,它们每次都会出现不同的结果。这是一个制作a的好时机,我知道我会后悔问这个问题,但你为
扇区传递的变量在哪里声明/分配?在程序执行期间,您多久运行一次主源?即,在多少次尝试中,图“3到6次”?您是否尝试过打印
random
的值,以查看是否存在RNG问题?我不确定您是否在谈论随机数的分布,但C++11有一些机制使其更加统一:这是一个制作一个我知道我会后悔问这个问题的好时机,但您传递的变量在哪里在for
扇区中
声明/分配?在程序执行期间,您多久运行一次主源代码?即,在多少次尝试中,图“3到6次”?您是否尝试过打印
random
的值以查看是否存在RNG问题?我不确定您是否在谈论随机数的分布,但C++11有一些机制使其更加统一:+1我使用完全不同的代码库得到类似的结果。我在我的函数中已经这样做了,但不管我做了什么更改chance或lakeChance的值结果一点也不改变。我总是得到调用1到10次的函数。我仍然不太理解你所遇到的问题。你的问题是你得到的湖太多了吗?太少了吗?你能告诉我们你期望发生什么和实际发生了什么吗?不要担心我修正了它,结果是我忘了将变量lakeChance改为浮点,而不是int,lol.+1。我使用完全不同的代码基得到了类似的结果。我在我的函数中已经这样做了,但无论我如何更改结果的chance或lakeChance的值都不会改变。我总是得到名为1的函数我仍然不太理解你的问题。你的问题是你有太多的湖泊?太少?你能告诉我们你期望发生什么和实际发生了什么吗?别担心,我修正了它,结果是我忘了将变量lakeChance改为浮点而不是int、 哈哈。