|
|
|
| В онлайн игре нужно организовать вероятность какого-либо события исходя из известного значения, например 37%. как это организовать лучше, подскажите пожалуйста. ничего дельного в голову не приходит. | |
|
|
|
|
|
|
|
для: betatester
(08.07.2007 в 02:56)
| |
$percent = 37;
if(rand(0,100) < $percent)
echo "Sim-sim, open a door!";
else
echo "There is a silence in Bagdad city";
|
| |
|
|
|
|
|
|
|
для: Trianon
(08.07.2007 в 03:06)
| | О, точно! что-то не дошло сразу. =) | |
|
|
|
|
|
|
|
для: BetaTester
(08.07.2007 в 03:10)
| | Вообще вопрос интересен:насколько процентность результата в этом случае будет соответствовать желаемой ? Где то когда то я применял такую конструкцию,и вместо ожидаемых 20 % получал примерно в два раза больше из за большого количества чисел=>0 вроде 0.00053... 0.0046... И т.д. Возможно,есть пусть более сложный,но более случайный алгоритм ? К примеру,использование последних двух цифр рандомного числа или что то еще ... Кто что может посоветовать ? | |
|
|
|
|
|
|
|
для: Ralph
(08.07.2007 в 11:59)
| | Вот мне почему то кажется,что если условие изменить на if((100-rand(0,100))<$percent),то вероятность сильно понизится,как считаете ? | |
|
|
|
|
|
|
|
для: Ralph
(08.07.2007 в 11:59)
| | функция rand() обеспечивает равномерное распределение при повторных вызовах.
Первый вызов вернет то, что оставит инициализирующая процедура, относительно которой никаких предположений о статистической равномерности делать уже нельзя.
Поэтому, более корректно будет сохранять где либо это значение (в БД или в файле) и инициализировать им генератор перед повторным применением.
Конечно, пересчет диапазона из LCG (который выдает вызов без параметров) в требуемый придется выполнять вручную. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2007 в 16:14)
| | мда,погорячился я...Написал скрипт,прогоняющий 100,1000,10000 раз варианты rand(),100-rand() и свой...Везде процент практически совпадает с желаемым | |
|
|
|
|
|
|
|
для: Ralph
(08.07.2007 в 16:36)
| | На сколько я знаю, rand () - функция со слишком высокой вероятностью повторения числа.
Лучше использовать функцию mt_rand () | |
|
|
|
|
|
|
|
для: wolfandman
(09.07.2007 в 09:24)
| | вероятность повтора числа в таких функциях определяется номером вызова и модулем N линейного конгруентного генератора.
Она строго равна единице на N-ом повторе и строго равна нулю на повторах от 1 до N-1. | |
|
|
|