|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.01.2012, 16:45 | #1 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Диапазон srand
Уж не пойму почему, но почему нарушается диапазон случайных чисел?
Код:
Пытался другим способом рандом получить Код:
Неужели нет ничего аля rand(10000,30000) ? |
02.01.2012, 16:50 | #2 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Обрати особое внимание вот на эти две строки: 1. Returns a pseudo-random integral number in the range 0 to RAND_MAX. 2. RAND_MAX is a constant defined in <cstdlib>. Its default value may vary between implementations but it is granted to be at least 32767. И теперь подумай о том, какой диапазон возвращаемых чисел у rand(), и как его можно расширить. |
|
02.01.2012, 16:59 | #3 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Эм, а теперь на пальцах, почему случайные числа вылазят за установленный диапазон?
|
02.01.2012, 17:09 | #4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Где, RAND_MAX равно 32767 Если тебе нужны числа из большего диапазона - придётся немножко постараться. |
|
02.01.2012, 17:24 | #5 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Примногоуважаемый _Bers, то что rand() генерирует от 0 и до RAND_MAX, которое равно 32767, я уже понял.
Нужен диапазон в i < 1000, но даже при i < 10, числа генерируется не в рамках заданного диапазона. По прежнему не понимаю почему так и как исправить. |
02.01.2012, 17:24 | #6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
RAND_MAX как минимум равно 32767, но может быть и больше, зависит от реализации. У меня это число равно INT_MAX для 32-х битного int, например.
А тот факт, что полученное число выходит за пределы желаемого вами диапазона, весьма очевиден: rand() % 30000 - получить число от 0 до 30000 + 10000 - прибавить к нему 10000 результат - число от 10000 до 40000. нужно так: rand() % (GREATEST - LEAST) + LEAST где GREATEST - макс. желаемое число, а LEAST - минимальное |
02.01.2012, 17:28 | #7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
02.01.2012, 17:34 | #8 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
У меня библиотека, поставляемая с gcc 4.6.1 для x64, но тоже верно и для других, более ранних версий, в том числе и для 32-битных.
А зачем Вам реализация?) Если очень интересно, можете скачать из интернета исходники glibc и посмотреть. |
02.01.2012, 17:45 | #9 | |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Цитата:
В приведенной статье выше есть пример: Код:
По факту программа с приведенным примером покажет диапазон от 1 до 101, именно для этого потом и следует вычесть 1(пример), что бы диапазон был верен. Но неужели нет более легкого, программного, а не математического решения? Я ж просто гуманитарий и мне куда логичнее написать rand(min,max); Есть ли другие пути задачи диапазона? |
|
02.01.2012, 17:51 | #10 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Sleep(1000); srand(time(0)) | masashama | Общие вопросы C/C++ | 10 | 19.04.2011 16:58 |
srand | Dario | Общие вопросы C/C++ | 2 | 16.04.2011 22:39 |
Srand()-> delphi | dosha | Общие вопросы C/C++ | 3 | 08.01.2011 14:21 |
функция srand() | Bob Dylan | Visual C++ | 4 | 18.08.2010 22:10 |
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. | Dorvir | Microsoft Office Excel | 12 | 23.05.2008 22:11 |