Гость Опубликовано 15 марта, 2004 Жалоба Поделиться Опубликовано 15 марта, 2004 Доброго времени суток уважаемый. Подскажи пожалуйста - как в Linux сгенерить случайное число от 0 до некоего max, причем типа int Я уже все перепробовал 1. i=1+(int)(rand()*max/(RAND_MAX+1.0)) (это из манов) 2. i=1+(int)((float)rand()*max/(RAND_MAX+1.0)) 3. i = rand()%max; 4. 1-е 3 в различных модификациях. Проблема в том, что в первых 2х случаях на выходе стабильно еденица - как не запиши, даже если все типа float, в 3-ем случае получается немного лучше, но случайное число крутится вблизи max, причем от цикла к циклу мало меняется. PS/ Вообще можно использовать /dev/random, что я и сделал, но хочется все же прямой путь настроить Заранее пасиба ! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 30 марта, 2004 Жалоба Поделиться Опубликовано 30 марта, 2004 Sergey писал(а): > > Доброго времени суток уважаемый. > Подскажи пожалуйста - как в Linux сгенерить случайное число > от 0 до некоего max, причем типа int > Я уже все перепробовал > 1. i=1+(int)(rand()*max/(RAND_MAX+1.0)) > (это из манов) > 2. i=1+(int)((float)rand()*max/(RAND_MAX+1.0)) > 3. i = rand()%max; > 4. 1-е 3 в различных модификациях. > > Проблема в том, что в первых 2х случаях на выходе стабильно > еденица - как не запиши, даже если все типа float, в 3-ем > случае получается немного лучше, но случайное число крутится > вблизи max, причем от цикла к циклу мало меняется. > > PS/ Вообще можно использовать /dev/random, что я и сделал, > но хочется все же прямой путь настроить > > Заранее пасиба ! Пусть RANGE - верхняя граница. Тогда: (int)(((double)rand()/(double)RAND_MAX)*(double)RANGE) и все скобки необходимы. 30 03 04 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 7 апреля, 2004 Жалоба Поделиться Опубликовано 7 апреля, 2004 Перед тем как использовать rand() необходимо выполнить srand(time(NULL)) - эта функция устанавливает новые аргументы для использования rand() Пример: #include #include #include int main() { int idx = 0; int max = 100; srand(time(NULL)); for (; idx < 10; idx++) printf("rand = %d\n", (rand() % max)); return 0; } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.