Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Druuna
Зарегистрирован: 03.05.2005 Сообщения: 2 Откуда: Moscow
|
Добавлено: Вт Май 03 2005 22:59 Заголовок сообщения: Си: генератор случайных чисел. |
|
|
Думаю, про переменную RAND_MAX знающим людям рассказывать не надо.
Вообщем в чем дело... с точки зрения логики, если эту константу изменить, то изменятся выпадающие числа, т.е. было от 0 до 32767, а станет например от 0 до 9999999. Да вот сколько я ее не изменял ( и увеличивал и уменьшал ), числа выпадали одни и те же, от 0 до 32767
==>> отсюда можно сделать предположение что эта константа не выходит за границы Integer. Ладно, я ее переписал:
было : #define RAND_MAX 0x7FFF
стало: long RAND_MAX 999999
в итоге ничего нового я не получил.
но что больше меня удивило, это то, что когда я удалил эту константу с ее значением и закомментировал те строки модуля stdlib.h, где непосредственного отношения к функции rand() нету, то генератор спокойно продолжил шпарить мне те же числа. думаю, где-то надо изменить тип выходного значения, да и вообще покопаться в других модулях, да вот только где и что искать - не знаю.
вообщем, я уже ломаю над этим голову больше недели и меня это сильно напрягло, и поэтому прошу помощи.
У меня Borland C++ 3.1 (это который для DOS'а) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
CrazyWizard
Зарегистрирован: 18.04.2005 Сообщения: 12
|
Добавлено: Ср Май 04 2005 08:09 Заголовок сообщения: |
|
|
А может ты меняешь в одних библиотеках, а среда компилит программу с другими? ![Wink](images/smiles/icon_wink.gif) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
CrazyWizard
Зарегистрирован: 18.04.2005 Сообщения: 12
|
Добавлено: Ср Май 04 2005 08:10 Заголовок сообщения: |
|
|
В смысле, с другими их копиями. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Druuna
Зарегистрирован: 03.05.2005 Сообщения: 2 Откуда: Moscow
|
Добавлено: Ср Май 04 2005 18:36 Заголовок сообщения: |
|
|
CrazyWizard писал(а): | А может ты меняешь в одних библиотеках, а среда компилит программу с другими? ![Wink](images/smiles/icon_wink.gif) |
Исключено. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Ср Май 11 2005 08:55 Заголовок сообщения: Ну и? |
|
|
Вопрос-то в чём? Ну есть такие макросы, которые бесполезно изменять, так как они имеют информационный характер, и что? Функция случайных чисел -- это последовательность фиксированных чисел, зависящая от начального "зерна", её реализация привязана к длине используемого машинного слова. Для досовского компилятора это 16-битное слово. Вопрос не слышен.
---------------
Ну и? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
prism
Зарегистрирован: 15.05.2005 Сообщения: 5
|
Добавлено: Вс Май 15 2005 17:59 Заголовок сообщения: |
|
|
К примеру код rand() в CRT MSVC 6.0 (несущественные детали обрезал):
Код: |
int rand (void)
{
return (((_holdrand=_holdrand*214013L+2531011L)>>16)&0x7fff);
}
|
Сразу видно, что не функция rand() зависит от константы MAX_RAND, а константа MAX_RAND зависит от функции rand() :-) Вообще эта константа существует только для переносимости кода.
К тому же у тебя скорее всего линкуется уже откомпилированый код из библиотеки. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|