генерация случайных чисел - rand()
Гость 17 мая, 2006 - 21:59
Как сделать нормальную генерацию квазислучайных чисел?
Использую следующий код:
// Заполняет матрицу квазислучайными числами в диапазоне от 1 до MAXVAL
void RandomMatr(double (*Matr)[STRLEN], int n) {
int i,j;
time_t t;
srand((unsigned)time(&t));
for(i=0;i
}
Вызывается 2 раза для разных матриц. И в обоих получаются ОДИНАКОВЫЕ
числа. Видимо, потому что time() выдаёт время в секундах, а не в
милисекундах, а оно достаточно мало. Если не использовать srand() то
вообще всегда получаются одни и те же числа. Посоветуйте чего нибудь,
чтоли....
Arceny
»
- Для комментирования войдите или зарегистрируйтесь
Функции
Функции псевдослучайных чисел по дефолту выдают всегда одну и ту же последовательность, начиная с запуска программы, чтобы было легко дебажить.
Чтобы это исправить, надо вызывать srand, но только один раз, в самом начале программы, а не перед тем, как понадобится новое случайное число.
Или например
Можно брать не time, а что нибудь более мелкое...
clock... ну типа того... хотя конечно srand(time) один раз в начале программы - нормально ИМХО.
Если тебе нужны по настоящему случайные числа - можно пользоваться ядерным генератором... кстати странно, что функция rand к нему не привязана, что-то я в стандарте никаких таких тонкостей про отладку не видел.
Разобрались. на
Разобрались. на ЛОРе...
Не очень
Не очень красивое решение. Оно у тебя выполняет srand только при первом вызове функции.
Лучше поставить srand в самое начало main, а из этой процедуры убрать.
/dev/random
А чем Вас /dev/random urandom неустраивает?