легчайший вопрос: генератор случ. чисел на С++

Scout

Покажите пожалуйста, как на С++ реализовать программку, генерирующую последовательность из N случайных чисел в диапазоне от 0 до n.

chmax


srand(time(NULL;
for (int i = 0; i < N; i++) cout << (int) n+1.0)*rand/(RAND_MAX+1.0 << '\n';

Scout

Спасибо! правильно ли я понимаю, что первое из генерируемых таким образом чисел определяется текущей минутой в таймере?

chmax

не совсем
ВСЯ последовательность определяется текущим временем (в секундах)

Scout

просто запуская эту программу несколько раз, убеждаюсь что первое из сгенерированных чисел меняется примерно раз в минуту, т.е. при быстрых повторных запусках остается одним и тем же. В то же время остальные числа вроде бы выглядят непредсказуемыми. Поэтому сделал вывод о том, что первое зависит от минуты, остальные - наверно от более маленьких разрядов. Можно что-нибудь предпринять, чтобы первое менялось понепредсказуемей?

seregaohota

Возьми на одно число больше и выкини первое число.
А вообще есть у Кнута разбор всего этого дела. Алгоритмы есть на numerical recipes.
Плюс где-то в руководстве perl описание того, что если вам очень крутая случайность нужна, то есть алгоритм привязки к тактам проца или типа того, не помню, короче случайность завязанная на температуру проца и тп случайные факторы, что не расколешь. Ищите. В инете всё есть.
Ещё в Development спросите.

sashachist

напиши перед всеми запусками один раз randomize;

seregaohota

Точно, туплю, практически во всех языках srand(n) не рандомизирует последовательность, чтобы была псевдослучайная но полностью повторялась при повторных запусках для одного и того же n.
Оставить комментарий
Имя или ник:
Комментарий: