0 / 0 / 0
Регистрация: 01.03.2014
Сообщений: 36
|
|||||||||||
1 | |||||||||||
Как работает генерация случайных чисел в приведенном коде30.03.2014, 08:54. Показов 1060. Ответов 9
Метки нет Все метки)
(
Дорогие Форумчане!
Подскажите пожалуйста, как работает нижеследующий код для генерации случайных чисел:
Ниже приведен пример:
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
30.03.2014, 08:54 | |
Ответы с готовыми решениями:
9
Как в приведенном коде работает malloc?
Как в приведенном коде завершить ввод чисел Задача такое нужно построить случайных величин и генерация случайных чисел(ГСЧ |
39 / 39 / 8
Регистрация: 03.05.2013
Сообщений: 178
|
|
30.03.2014, 09:15 | 2 |
b+1-a - это диапазон т.е. получаем порядковый номер числа добавляем к нему а и получаем число от а до б
Добавлено через 3 минуты пример а=50 б=100 б-а+1 = 51 берем остаток от ранд получаем число от 0 до 51 добавляем а диапазон становится 50 - 100
1
|
0 / 0 / 0
Регистрация: 01.03.2014
Сообщений: 36
|
|
30.03.2014, 10:57 [ТС] | 3 |
Спасибо за ваш ответ, но я чуточку не могу понять, если:
(b-a+1) + а, когда: a=50, b=100 Значит: (100-50+1) + 50 т.е. 51+50 Подскажите, где именно выражен диапазон между 100 и 50? я вижу только 51 и 50. ![]()
0
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
30.03.2014, 11:11 | 4 |
![]() Решение
так точнее
Вот пример с 1)rand()%(b+1-a) ---> rand()%(100+1-50) ---> rand()%(51) ----> получаем число от 0 до 51, т.к. % - это остаток от деления. Допустим 186%51 = 33. 2) (0---51) + 50 ----> (50---101)
1
|
Модератор
![]() 8756 / 6546 / 887
Регистрация: 14.02.2011
Сообщений: 22,962
|
||||||
30.03.2014, 11:23 | 5 | |||||
Timurcpp,
а ты сам посчитай тогда поймешь нужно сгенерировать числа допустим от 100(a) до 200(b) значит минимальное значение мы знаем это 100 теперь диапазон начиная с нуля, потому что минимальное число rand дает 0 диапазон будет 100 200-100 но чтобы получить числа от 0 до 100 нужно разделить на 101,максимальный остаток при делении на 101 будет 100 и в результате диапазон считается 200-100+1
2 %(b+1-a) загоняем число в диапазон,остаток от деления на диапазон плюс 1 3 +a; добавляем минимальное значение
0
|
Модератор
![]() 12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
|
||||||
30.03.2014, 12:02 | 6 | |||||
Если делать в соответствии с рекомендациями, то формула должна быть такая
RAND_MAX - константа определенная в math.h
0
|
Модератор
![]() 8756 / 6546 / 887
Регистрация: 14.02.2011
Сообщений: 22,962
|
|||||||||||
30.03.2014, 12:23 | 7 | ||||||||||
zss,
эта тема была актуальна лет пятнадцать назад спорили до хрипоты, что лучше остаток от деления или деление на полный диапазон вроде бы
![]()
0
|
Модератор
![]() 12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
|
|
30.03.2014, 12:43 | 8 |
Не меняется равномерность распределения.
А с операцией % распределение может быть очень причудливым.
0
|
Модератор
![]() 8756 / 6546 / 887
Регистрация: 14.02.2011
Сообщений: 22,962
|
|
30.03.2014, 13:02 | 9 |
вот допустим дает генератор числа от 0 до 10(включительно)
а нам нужно три значения 0 1 2 x%3 сгененирует 0 1 2 0 1 2 0 1 2 0 1 вероятность выпадения двойки меньше теперь x/11 *3 0.0 0.27 0.54 0.81 1.09 1.36 1.63 1.9 2.18 2.45 2.72 приводим к целому 0 0 0 0 1 1 1 1 2 2 2 опять вероятность двойки меньше или я не про то?
0
|
Модератор
![]() 12629 / 10127 / 6097
Регистрация: 18.12.2011
Сообщений: 27,158
|
|
30.03.2014, 13:15 | 10 |
Приведение к целому тоже исказит равномерность распределения.
Но проверять ее надо не на таких маленьких выборках, а на таких, которые содержат как минимум 10000 испытаний.
0
|
30.03.2014, 13:15 | |
Помогаю со студенческими работами здесь
10
Не правильно работает if в приведенном коде Не работает сортировка в приведенном коде Не работает сортировка в приведенном коде Как работает функция "test" в приведенном коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |