![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
С целочисленными без циклов можно так:
/** * min < max; * min <= excluded * min <= result < max */ function randomInt( min:int, max:int, excluded:int ) : int { var r:int = min + (max - min - 1) * Math.random(); return r + int(r >= excluded); } var matches:Array = new Array(); var i:int = 10000; while (i--) { var j:int = randomInt(10, 30, 13); if (matches[j] === undefined) matches[j] = 0; else matches[j]++; } for (i=10; i < 30; i++) { trace("[" + i + "]: " + matches[i]); }
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 29.01.2012 в 10:14. |
|
|||||
|
HardCoder, если погуглить, то можно найти информацию о том, что рэндом во флеше... Скажем так, не на столько случайный, как хотелось бы. Хотя для флеша это практически роли не играет. Я это добавил только справедливости ради.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Wolsh, нет не исключаются. Для них условие по идее никогда не выполнится. Т.к. Math.random() никогда не равен 1 (см. доки). Хотя возможно при каких-то значениях min и max и максимальном Math.random() выражение Math.random() * (max - min) + min будет равно max из-за ошибок округления =)
TanaTiX опс, перепутал тела функций 0_0
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 29.01.2012 в 12:21. |
|
|||||
|
Я свой вопрос задал, потому что люблю, когда вещи называют своими именами. Очень режет слух слишком смелые высказывания о том, что когда Math.random() выдает не то что хочет видеть человек - называть его "не слишком случайным". Если нужно 10 раз получить случайное число в диапазоне от 0 до 3, рэндом 7 раз может вывести 0, один раз 1, один раз 2 и один раз 3. (цифры от фонаря взял). Вот это случайность - ее невозможно предугадать. А нам нужно, чтоб 0, 1, 2, 3 выпадали с некоей равномерностью. Поэтому нельзя обвинять рэндом в неслучайности, когда нам нужна не случайность, а закономерность. Я когда-то долго искал ОБЪЕКТИВНЫЕ доказательства неслучайности рэндома. И до сих пор не нашел, поэтому и задал вопрос. Согласен - для создания приложений такая абсолютная случайность иногда не подходит, поэтому нужно писать разные алгоритмы, чтобы числа выбрасывались с некоторой равномерностью.
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Цитата:
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Согласен. Да умрет холивар в этой теме!
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Еще у этого алгоритма одно из чисел диапазона никогда не выдается в первой десятке результатов, что прискорбно(( Добавлено через 27 минут Сама идея замены совпадения с исключением на сознательно негенерируемый max весьма элегантна. Претензия только к тому, что поведение при таких параметрах "удивляет", то есть не соответствует ожидаемому.
__________________
Reality.getBounds(this); |
|
|||||
|
такой еще вариант до кучи )
|
|
|||||
|
Modus ponens
|
Тут очень много зависит от того, что именно вы называете случайным числом. Фишка в том, что ни один из приведенных выше примеров скорее всего не пройдет diehard test, не смотря на то, что число, вобщем-то будет "случайным".
Вариант о котором я думал: выбирать случайно из двух диапазонов: min<exclude и exclude>max - но это расточительно, если нужно часто радном генерировать. А можно полюбопытствовать, зачем это понадобилось, и на скольк важна правильная (взвешенная) рандомность? silin: О, я твой вариант не видел, когда писал, я вот тоже о чем-то таком думал, только не нужно два раза random() вызывать. Если закешировать первый вызов и им и воспользоваться, то и дешевле выйдет и больше вероятность, что в итоге распределение будет правильным.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 29.01.2012 в 20:03. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:55. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| random |
|
|