случайный — C ++ Rnd () Ошибка

Ребята, я получаю эту действительно странную ошибку с моей программой, когда запускаю ее. Это важный код:

переменные (редактировать):

const short int maxX = 100;
const short int maxZ = 100;
const short int lakeChance = 0.9;

Функция addLake (редактировать):

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);
}
}

Ошибка в том, что независимо от того, что я изменяю значение ‘lakeChance’, результат кажется абсолютно одинаковым. Как и в случае с addLake, функция, похоже, вызывается примерно от 3 до 6 раз при каждом запуске, несмотря на то, что я изменил значение lakeChance выше (т.е. 0,5, 0,7, 0,9). Функция вызывается только все время, когда я изменяю значение ‘lakeChance’ на 1. Между прочим, генератор случайных чисел работает нормально, поэтому результат каждый раз несколько меняется.

0

Решение

я ничего не вижу очевидно неправильно само по себе. Поэтому я попробовал следующий фрагмент кода:

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;
}

Как и ожидалось, я получил эти результаты:

Chance is 0.1: 10216 invocations or 10.216% of the time!
Chance is 0.2: 20232 invocations or 20.232% of the time!
Chance is 0.3: 30357 invocations or 30.357% of the time!
Chance is 0.4: 40226 invocations or 40.226% of the time!
Chance is 0.6: 60539 invocations or 60.539% of the time!
Chance is 0.7: 70539 invocations or 70.539% of the time!
Chance is 0.8: 80522 invocations or 80.522% of the time!
Chance is 0.9: 90336 invocations or 90.336% of the time!
Chance is 1: 100000 invocations or 100% of the time!

Сколько озер вы пытаетесь добавить?

4

Другие решения

пробовать randomize() перед звонком rand(),

-1

По вопросам рекламы [email protected]