Форум программистов, компьютерный форум CyberForum.ru

Время для функции генерирующей случайные величины - C++

Восстановить пароль Регистрация
 
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
26.08.2013, 21:39     Время для функции генерирующей случайные величины #1
я написал функцию которая генерирует случайные величины в промежутке [0,1]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
valarray<double> cRand::base_rnd(size_t N){
  valarray<double> v;
  v.resize(N);
  int x,y;
  int  x0 = time(0);
  x = fabs((a*x0 + c)%M);
  v[0] = double(x)/M;
  for(size_t i = 1;i<N;i++){
    y = fabs((a*x + c)%M);
    v[i] =double(y)/M;
    x = y;
  }
  return v;
}
Функция работает нормально, но если я скажем хочу вызвать эту функцию десять раз то она будет выдавать одинаковые числа, потому что time(0) выдает каждый раз одинаковое число. Подскажите, как это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2013, 21:39     Время для функции генерирующей случайные величины
Посмотрите здесь:

C++ Случайные значения для разных объектов
C++ Напишите пожалуйста Код программы генерирующей случайные величины но не функцией Rand
Равномерно распределенные случайные величины C++
C++ Написать программу вычисления величины дохода по вкладу. Процентная ставка (% годовых) и время хранения (дней) задаются во время работы программы
C++ Случайные числа (координаты) для объекта OpenGL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
26.08.2013, 21:42     Время для функции генерирующей случайные величины #2
MAnton, может делать srand(time(NULL)) , а потом x0 = rand() ?
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2013, 21:50     Время для функции генерирующей случайные величины #3
MAnton, чтобы rand генерировал псевдослучайные последовательности следует производить начальную установку генератора случайных чисел, как раз
Цитата Сообщение от Dani Посмотреть сообщение
srand(time(0))
это и делает
MAnton
 Аватар для MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
26.08.2013, 21:52  [ТС]     Время для функции генерирующей случайные величины #4
я хочу обойтись без rand() а написать полностью свой механизм псевдослучайных чисел
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
26.08.2013, 21:53     Время для функции генерирующей случайные величины #5
Я придумал функцию лучше:
C++
1
2
3
double my_rand() {
    return rand() / (double)RAND_MAX;
}
Выдает величины в промежутке [0,1]

Добавлено через 15 секунд
Я придумал функцию лучше:
C++
1
2
3
double my_rand() {
    return rand() / (double)RAND_MAX;
}
Выдает величины в промежутке [0,1]
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2013, 21:56     Время для функции генерирующей случайные величины #6
Нерационально:
Цитата Сообщение от MAnton Посмотреть сообщение
x = fabs((a*x0 + c)%M);
* v[0] = double(x)/M;
* for(size_t i = 1;i<N;i++){
* * y = fabs((a*x + c)%M);
* * v[i] =double(y)/M;
* * x = y;
* }
Хотя бы так запиши
C++
1
2
3
4
5
6
7
8
9
valarray<double> cRand::base_rnd(size_t N)
{
    valarray<double> v;
    v.resize(N);
    int x = time(0);
    for(size_t i = 0; i < N;i++)
        x = (v[i] = fabs((a*x + c)%M) *1.0 / M);
    return v;
}
Yandex
Объявления
26.08.2013, 21:56     Время для функции генерирующей случайные величины
Ответ Создать тему
Опции темы

Текущее время: 06:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru