![]() |
|
|
![]()
|
|
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
собственно задача такая - выбрать из массива случайный элемент (ручками).
раньше пользовался round(random()*n) (где n - длина массива) но заметил, что 0 и n выпадают в 2 раза реже, чем остальные варианты. это, конечно, никуда не годится. есть ли у кого-нибудь другие варианты? |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Alx |
|
||||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
не очень понял... можт, неправильно перевёл?
Добавлено @ 19:37
|
||||
|
|||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
адназначна
Имя функции одновременно является именем переменной, в которой возвращается значение. Смысл - если min больше max, их надо просто поменять местами. MOD - получение остатка от целочисленного деления. Итого (проверь)
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
ну вот, наконец-то.
в результате всего, min и max-1 все равно встречаются в два раза реже, чем все что между ними...( |
|||
|
||||
| Alx |
|
||||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
чуть-чуть модифицировал.
теперь можно вызывать 3-мя способами:
Добавлено @ 00:10 собственно говоря, никакого решения проблемы я не вижу. в этой функции только добавилась фича задавать результаты не от нуля до n_max, а от n_min до n_max. попрежнему же, если округлять до целых чисел результаты функции rand(5,10) , то чисел 5 и 10 будет в 2раза меньше, чем остальных! |
||||
|
|||||
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Я сейчас на скорую руку проверил и получил для
следущее: 2448 2534 2422 2420 2359 2407 2378 2503 2324 2520 2454 2428 2410 2393 2466 2399 2481 2485 2448 2461 2413 2432 2509 2372 2511 2466 2397 2499 2462 2445 2392 2464 2401 2476 2403 2427 2437 2461 2430 2445 2419 То есть все ИМХО в норме... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
| Alx |
|
||||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
cardinal,
посуди сам. есть рандомное число, которое возвращает Math.random(). умножаем его на 10 (max) получаем числа от 0 до 10. затем округляем. но что бы после округления получить 0, то начальное число должно быть < 0.5, а 10 - > 9.5. то есть по промежутку на 1/2. зато другие числа до округления принадлежат в 2 раза большим промежуткам: 3 - 2.5 - 3.5 4 - 3.5 - 4.5 9 - 8.5 - 9.5 я предлагаю объеденить 1 и последний набор. вот что у меня получилось после 4 запусков rand(10) и округления результатов:
вот новый вариант функции:
|
||||
|
|||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Вместо округления используйте ф-ию взятия целой части
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
esperant0,
зачем? |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
затем что тогда 0 получиться если сгенирируется число от 0 до 0.99999 1 1.0000 до 1.999999 и т.п. Т.е все числа сгенерируются с одинаковой вероятностью -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Твоя аргументация ясна, но на практике я вижу совсем другой результат. Вот еще раз вероятности для чисел от 0 до 9 (1000000 чисел): 0,100282 0,099858 0,099588 0,100246 0,100377 0,099935 0,099612 0,099968 0,100166 0,099969 Посмотрев на них я могу сказать, что все чики поки и ты не прав. Вот код:
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |