Перейти к содержанию

почему не работает rand()


Гость

Рекомендуемые сообщения

Доброго времени суток уважаемый.

Подскажи пожалуйста - как в 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, что я и сделал,

но хочется все же прямой путь настроить

Заранее пасиба !

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

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

Ссылка на комментарий
Поделиться на другие сайты

Перед тем как использовать 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;

}

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...