Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53

Ошибка при генерации случайных чисел

04.08.2013, 15:28. Показов 1930. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день,уважаемые коллеги!
У меня возникла следующая проблема. Мне нужно задать распределение случайных чисел по нормальному закону. Для этого надо использовать библиотеку boost (до этого я делал все с помощью функции RAND, однако это довольно громоздко оказалось). В качестве примера я решил взять код, выложенный в Википедии.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double SampleNormal (double mean, double sigma)
{
    // выбор генератора случайных чисел
    mt19937 rng;
    // инициализация генератора числом секунд с 1970 года
    rng.seed(static_cast<unsigned> (time(0)));
 
    // выбор нужного распределения
    normal_distribution<double> norm_dist(mean, sigma);
 
    // привязка генератора к распределению
    variate_generator<mt19937&, normal_distribution<double> >  normal_sampler(rng, norm_dist);
 
    // пример работы
    return normal_sampler();
}

Затем я решил проверить этот код вот в таком тестовом режиме:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
 
    double mean =0.0;
    double sigma=1.0;
 
    for(int i=0;i<10000;i++)
    {
        massiv[i]= SampleNormal(mean, sigma);
    }
 
    for(int i=0;i<10000;i++)
    {
        cout<<massiv[i]<<endl;
    }
 
}
И я получаю одно и то же число, т.е. как я понял генерация распределения не привязывается к секундомеру. Подскажите, пожалуйста, как избавиться от этой проблемы!
С Уважением!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2013, 15:28
Ответы с готовыми решениями:

Повторение значений при генерации случайных чисел
как случается, что рандомная комбинация дублируется? private void Form1_Load(object sender, EventArgs e) { ...

Избавиться от первого элемента при генерации случайных чисел
Есть программа, которая генерирует случайные числа для определения вероятности прихода заявок. Почему-то при КАЖДОЙ генерации первый...

Как при генерации 10 случайных чисел сделать так, чтобы каждое из них было уникальным? Please!
Я генерирую 10 случайных чисел в диапазоне от 1 до 100 следующим образом: '----------------код---------------- &lt;% randomize ...

6
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
05.08.2013, 01:48
Я уверен, что 10000 чисел нагенерятся быстрее, чем за секунду. Т.е. во всех вызовах SampleNormal time(0) вернет одно и то же значение. Посмотрите на
C++
1
boost::posix_time::microsec_clock::local_time()
.
1
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
05.08.2013, 13:00  [ТС]
Т.е.я что должен сделать был? вместо нуля поставить следующее значения
C++ (Qt)
1
rng.seed(time(boost::posix_time::microsec_clock::local_time()));
Однако в это случае выдается ошибка
C++ (Qt)
1
cannot convert 'boost::posix_time::ptime' to 'time_t*' for argument '1' to 'time_t time(time_t*)'
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
05.08.2013, 14:42
C++
1
rng.seed( boost::posix_time::microsec_clock::local_time().time_of_day().total_microseconds() );
1
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
05.08.2013, 15:12  [ТС]
Так, я подставил эти значения получается 10 разных чисел. Спасибо огромное Это уже кое что=) Потом я решил ради интереса подстаить такой код:
C++ (Qt)
1
2
3
4
    for(int i=0;i<1000;i++)
    {        
        std::cout<<(boost::posix_time::microsec_clock::local_time().time_of_day().total_nanoseconds())<<std::endl;
    }
Получилось, ряд чисел,идущих подряд, не отличаются друг от друга. Теперь буду выяснять как это исправить=))
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
05.08.2013, 15:30
Значит, и микросекундной точности недостаточно. А может, просто сделаете так в SampleNormal:
C++
1
static mt19937 rng( static_cast<unsigned>( time(0) ) );
1
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
05.08.2013, 15:39  [ТС]
Спасибо Вам огромное! Все работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2013, 15:39
Помогаю со студенческими работами здесь

Функция генерации случайных чисел
Здравствуйте, возник такой вопрос: мне нужно определить генерацию случайных чисел в функцию и использовать ее в программе. void...

Подскажите функцию генерации случайных чисел
Подскажите функцию генерации случайных чисел(не RND). Заранее СПАСИБО!

Исправить ошибки генерации случайных чисел
Что в этом коде не так? int mas = new int; Random r = new Random(); for (int i = 0; i &lt; mas.Length; i++) ...

Пару вопрос по генерации случайных чисел.
Здраствуйте уважаемые мастера с++. 1). Мне надо в конструкторе инициализировать для поля целого типа случайными значениями......

Метод генерации дробных случайных чисел
Написать программу, которая содержит метод генерации дробных случайных чисел из диапазона 0-min.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru