| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Шанс выпадения числа |
| Автор: QaaZ 20.11.2008, 17:47 |
| Вот к примеру у меня есть сценарий, который случайным(rand(0,9)) образом выбирает 3 числа. Например [3 5 3]. Как можно сделать так, чтобы шанс на то, что выпадет [7 7 7] был к примеру 80% или 99%. Вообще, как реализуется "шанс" ? Заранее большое спасибо и извините, если это обсуждалось уже, поиск результатов не дал. |
| Автор: theworldcreator 20.11.2008, 17:54 |
| Когда я столкнулся с такой задачей, не стал вникать и просто заполнял массив($arr[mt_rand(0, count($arr)-1)]) бОльшим количеством одинаковых чисел с высоким шансом выпадения, чем с меньшим. Может есть и более рациональный способ. |
| Автор: QaaZ 20.11.2008, 18:04 |
| Хм...как вариант! Правда хотелось бы услышать, может есть еще какие-нибудь способы. Спасибо большое, поставил бы плюсик, да только пока немогу. |
| Автор: QaaZ 20.11.2008, 18:50 | ||
| Извините, я несовсем понял, если можно, будьте добны Вы имеете ввиду, чтото вроде этого:
Если да, тогда возникает вопрос, как rand() может быть больше 0,01 % ? о_О Что-то я несовсем понимаю.. |
| Автор: skyboy 20.11.2008, 19:51 |
rand() возвращает случайное число от 0,001 до 0,999 с предположительно равной вероятностью. |
| Автор: QaaZ 20.11.2008, 20:18 |
| Большое спасибо.. |
| Автор: Shogun 22.11.2008, 14:35 | ||
| мммм, я тоже както думал о такой теме. А если так?? :
|
| Автор: theworldcreator 22.11.2008, 14:48 | ||
ИМХО идея skyBoy лучше моей)
|
| Автор: Shogun 22.11.2008, 14:59 |
| theworldcreator - может быть. |
| Автор: skyboy 22.11.2008, 16:55 | ||
я думаю, можно сделать так:
функция $callback принимает один аргумент(сгенерированное случайное число от 0 до 1) и возвращает значение распределения вероятности для этого числа. для равномерного распределения вероятности возвращает 1. для равномерно возрастающего(чем более число, тем вероятнее его использование) просто возвращает входящее число и тыды. естественно, функция urand() возвращает только число от 0 до 1, потому надо бы доработать для произвольных интервалов. или даже дискретных последовательностей. Добавлено через 4 минуты и 22 секунды если $callback вернет 0 - то случайное значение не будет использовано. если $callback вернет 1 - случайное значение будет использовано. в остальных случая вероятность использования случайно выбранного от 0 до 1 числа составляет $callback/1ю |