![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
неравномерность = есть отношение выпадений самого вероятного к самому маловероятному.
|
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
NoviceF, что является результатом оператора % ?
|
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
Остаток от деления того, что слева, на то, что справа. Если ранд вернёт число кратное 26, то результатом будет 0, в остальных случаях остаток будет в диапазоне от 1 до 25, так? ) |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
да
Тогда в чем был смысл предыдущего вопроса? volatile, ты был прав. Равномерность примерно одинаковая, что для варианта с остатком от деления, что с умножением (примерно, 99.6% и 99.7% соответственно на N*1000000 опытах).
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
bsa, уважаю!
![]() Фактически неравномерность у них меньше, здесь все забивает системный rand. Там и uniform_rnd() показывает такую-же неравномерность, а должен быть идеальным. по моим подсчетам неравномерность при N=26, для обоих методов составляет: =99.9207% для uniform_rnd: =100.0000% я эти числа получил просто счетчиком пройдя весь диапазон от 0 до RAND_MAX, и посмотрел что на выходе. Но можно пойти и другим путем, испоьзуя вашу программу. Чтобы обострить неравномерность, будем генерить числа соизмеримые с RAND_MAX, при этом неравномерность резко возрастает, и становицца видна невооруженным глазом, даже сквозь системный rand(). Итак, на вашей программе, для: N = int(0.55*RAND_MAX); и при количестве циклов 100*1000000ll результаты, такие:
при увеличении опытов norm1,norm2 стремяцца к ==> 50%; uniform_rnd ==> 100% Резюме. при маленьком N, все замечательно и вообще по барабану какую формулу использовать. При больших N, простые формулы дают очень плохую картину. Вероятность выпадения макс/мин в 2 раза, уже нельзя назвать ГСЧ. и нужно использовать генератор с отбрасыванием, такой как uniform_rnd(); |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |