Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Random


Автор: Leksey 20.3.2005, 16:25
Подскажите, в кокой библиотеке найти нормальную функцию генерирования случайных чисел и кокой header подключить, чтобы ей можно было указать интервал,в котором выдавать результат.

Автор: Олег М 20.3.2005, 16:29
а стандартная rand не подходит?

Автор: Leksey 20.3.2005, 18:37
rand - Как задать ему интервал в которм должен быть результат .

Автор: Олег М 20.3.2005, 18:42
Наверное так x[0...N]
Код

 x=(double(rand()) /RAND_MAX)*N

Автор: Leksey 20.3.2005, 20:52
Конечно можно и так сделать, чтобы выпадало целое [1..N]:
Код

         srand(time(0));
    int s=0;
    for (int i=0;i<2;i++)
    {     
        s=int((double(rand())/(RAND_MAX+1))*N)+1;
                  cout<<s<<endl;
    }


но почему все время сначала выпадает 3, а потом уже произвольное.
Да и хотелось бы не заниматься инициализацией с помощью srand() и ничего не вычислять.

Автор: bel_nikita 20.3.2005, 22:43
Код

// [ 1 ... N ]
int x = rand() % N + 1;

Автор: Leksey 20.3.2005, 23:18
Блин, вот я намудрил, а все было так банально.
Спаибо bel_nikita.

Автор: Goryachev 21.3.2005, 00:01
bel_nikita
Если я хорошо помню, rand() возвращает число между нулем и единицей. Поэтому данным кодом,
Цитата(bel_nikita @ 20.3.2005, 22:43)
// [ 1 ... N ]
int x = rand() % N + 1;

я не понимаю, как ты добиваешся числа больше чем число 1.
Поправь меня, если чо-то не то сшифровал...

Упс. В stdlib.h написано, что rand() возвращает число между нулем и RAND_MAX.
Извиняюсь за глупый пост. Значит в каком то другом языке возвращает между 0 и 1.

Автор: versus 21.3.2005, 00:45
кстати о том что написано:

Код

man rand
...

              "If you want to generate a random integer between 1
              and 10, you should always do it by using high-order
              bits, as in

                     j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

              and _never_ by anything resembling

                     j=1+(rand() % 10);

              (which uses lower-order bits)."
...



Вопрос на засыпку: что произойдет если описанной выше методой (int x = rand() % N + 1;) попытаться сгенерировать случайное число с N > RAND_MAX ?

Автор: bel_nikita 21.3.2005, 01:31
Получим: RAND_MAX + 1 < N

Автор: jorkug 21.3.2005, 06:36
Код

int a =  rand() % (max - min +1)  + min;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)