Итак, у меня есть карта < int, float>, содержащая смещения чисел 1 - 6. Мне нужно вернуть значение, которое смещено. Обратите внимание, что смещения не являются постоянными, поскольку они вводятся пользователем. Он находится в классе, поэтому все переменные уже объявлены.Случайное число с предубеждениями
Так вот что я сделал до сих пор.
int die:: randomNumber(map < int, float > &biasPercent)
{
randomString[0] << biasPercent[0];
randomArray[0] = randomString[0].str();
maximum = randomArray[0].size();
for(counter = 0; counter < 6; counter++)
{
randomString[counter] << biasPercent[counter];
randomArray[counter] = randomString[counter].str();
if(randomArray[counter].size() > maximum)
{
maximum = randomArray[counter].size();
}
}
limit = 1;
for(counter = 1; counter <= maximum - 2; counter++)
{
limit *= 10;
}
srand(time(NULL));
random1 = rand() % limit + 1;
if(random1 <= biasPercent[0] * limit)
{
return 1;
}
else if(random1 > biasPercent[0] * limit && random1 <= (biasPercent[0] * limit) + (biasPercent[1] * limit))
{
return 2;
}
else if(random1 > ((biasPercent[0] * limit) + (biasPercent[1] * limit) * limit) && random1 <= (((biasPercent[0] * limit) + (biasPercent[1] * limit)) + (biasPercent[2] * limit)))
{
return 3;
}
else if(random1 > (((biasPercent[0] * limit) + (biasPercent[1] * limit)) + (biasPercent[2] * limit)) && random1 <= (((((biasPercent[0] * limit) + (biasPercent[1] * limit)) + (biasPercent[2] * limit))) + (biasPercent[3] * limit)))
{
return 4;
}
else if(random1 > (((((biasPercent[0] * limit) + (biasPercent[1] * limit)) + (biasPercent[2] * limit))) + (biasPercent[3] * limit)) && random1 <= ((((((biasPercent[0] * limit) + (biasPercent[1] * limit)) + (biasPercent[2] * limit))) + (biasPercent[3] * limit))) + ((biasPercent[4] * limit)))
{
return 5;
}
else
{
return 6;
}
}
Он не работает, поскольку он возвращает только 1 все время. Я предполагаю, что stringstream имеет к этому какое-то отношение. Но я не знаю другого способа узнать предел случайных чисел, чем преобразовать float в строку, а затем получить значение с большинством символов. Пожалуйста помоги.
C++ имеет лучшую случайную библиотеку '' с явной поддержкой неравномерных распределений. Теперь вам нужно будет написать свой собственный дистрибутив, поскольку это особенно относится к вашему делу, но это нужно только для части распределения, а не для частичного генерации числа. –
MSalters
Вызов 'srand', прежде чем генерировать каждое число, не помогает. Если вы придерживаетесь 'rand', тогда вызывайте' srand' один раз в начале вашей программы. –