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、 哈哈。