2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Генерация случайных чисел на C/C++ стандартными методами
Сообщение27.09.2011, 12:50 
Аватара пользователя


27/09/10
6
Столкнулся со следующей проблемой. При генерации случайных чисел (язык C) получается неудовлетворительный результат — выходят последовательности вида N, N, N+n, N+n, N+2n, N+3n... Компилятор — gcc для 64-разрядной Windows.

Числа получаю с помощью функций rand() и srand():

Код:
srand(clock());
long int x = rand ();
/*Оба способа работают примерно одинаково*/
srand(time(NULL));
long int x = rand ();


Я что-то делаю неправильно, или это косяк компилятора? Можно ли придумать что-нибудь еще кроме инициализации системным временем?

Еще интересно было бы узнать про то, как генерировать случайные числами средствами STL C++.

 Профиль  
                  
 
 Re: Генерация случайных чисел на C/C++ стандартными методами
Сообщение27.09.2011, 16:47 
Экс-модератор
Аватара пользователя


23/12/05
12064
Есть подозрения, что Вы инициализируете генератор многократно (вызываете повторно srand()) - сделайте один раз, а потом только rand()

 Профиль  
                  
 
 Re: Генерация случайных чисел на C/C++ стандартными методами
Сообщение28.09.2011, 09:01 


04/02/08
325
Буково
Попробуйте инициализировать так:
Код:
double dtime(){
   double t;
   struct timeval tv; struct timezone tz;
   gettimeofday(&tv, &tz);
   t = tv.tv_sec + ((double)tv.tv_usec)/1e6;
   return t;
}

   double mx = (double) LONG_MAX, tt = dtime() * 1e6;
   srand48((long)(tt-mx*floor(tt/mx)));

Естественно, srand48 вызывается один раз. Далее: x = lrand48();

Функцией rand пользоваться не нужно, т.к. она возвращает int.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group