Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Yello
Зарегистрирован: 09.03.2006 Сообщения: 107
|
Добавлено: Вт Янв 27 2009 11:25 Заголовок сообщения: Хорошая генерация случайного числа в заданном диапазоне (C). |
|
|
include time.h, math.h
А дальше - как ?
Понятно, что unsigned int rand() выдаст с.ч. от 0 до RAND_MAX, и вроде как, распределение равномерно (т.е. вероятность для каждого числа этого диапазона - одна и та же).
Надо "сузить" диапазон.
Смотрел - везде только "ламерский" пример (типа: rand() % n_max) - такое распределение неравномерно (если только n_max не делит RAND_MAX без остатка, тогда так можно).
Предлагаю обсудить.
............................
Есть ли какая-то стандартная ф-я (как rand(), но с параметрами) ? |
|
Вернуться к началу |
|
 |
Benzedrin
Зарегистрирован: 04.04.2008 Сообщения: 34 Откуда: Minsk
|
Добавлено: Вт Мар 17 2009 10:57 Заголовок сообщения: |
|
|
задай СВ по нужному закону распределения сам
http://window.edu.ru/window_catalog/pdf2txt?p_id=1609
только походу ты придираешься:
графиком функции распределения будет ступенчатая ф-я от 0 до rand_max. при умножении(а следовательно и делении) выходного значения ф-я распределения все-равно остается ступенькой, как не крути... |
|
Вернуться к началу |
|
 |
Yello
Зарегистрирован: 09.03.2006 Сообщения: 107
|
Добавлено: Пт Апр 03 2009 22:11 Заголовок сообщения: |
|
|
Цитата: | при умножении(а следовательно и делении) |
только если (RAND_MAX + 1) делится без остатка (на этот делитель).
Иначе - нет.
Маленький пример:
Пусть RAND_MAX = 9, и можно генерить (равномерно) целые числа от 0 до 9.
Смотрите, что будет при делении, например на 4.
0 1 2 3
4 5 6 7
8 9
---------
0 1 2 3 - результат от деления (после операции "%").
Вероятность в результате получить "3" и "2" меньше, чем "0" и "1".
И так будет всегда, когда нижняя строка не "выровнена" до конца (а это и есть... делимость того, что я говорил).
.
.
Цитата: | только походу ты придираешься |
ну, не без этого. |
|
Вернуться к началу |
|
 |
|