crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Пример boost::random_device
maxpop
  опции профиля:
сообщение 28.2.2011, 1:24
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.2.2011
Пользователь №: 2455

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток!
В проекте необходимо использовать ГСЧ. Полазив в интернете нашел библиотечки boost. Недетерминированный генератор истинно случайных чисел то-что нужно. Но не понимаю как пользоваться этим классом(не очень много знаю в C++). Поэтому прошу написать какой-нить простенький примерчик, который бы выводил случайное число.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 28.2.2011, 17:00
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


вот пример генерации 10 случайных величин ~ Exp(5)
#include <boost/random.hpp>
#include <boost/nondet_random.hpp>
#include <iostream>
#include <ctime>

int main()
{
    boost::random_device rng;
    boost::exponential_distribution<> exp_distr(5);
    boost::variate_generator<boost::random_device&, boost::exponential_distribution<> > gen(rng, exp_distr);
    for (int i = 0; i < 10; ++i)
        std::cout << gen() << std::endl;
    return 0;
}


Сообщение отредактировал DEADHUNT - 28.2.2011, 17:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxpop
  опции профиля:
сообщение 1.3.2011, 1:19
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.2.2011
Пользователь №: 2455

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо.
Вы не подскажите, что я делаю не правильно? Стоит VS10. Я указываю путь то буста, все библиотеки читаются, но при компиляции вылетает вот эта ошибка:"1>LINK : fatal error LNK1104: cannot open file 'libboost_random-vc100-mt-gd-1_44.lib'". Что это вообще за файл?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxpop
  опции профиля:
сообщение 1.3.2011, 2:37
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.2.2011
Пользователь №: 2455

Спасибо сказали: 0 раз(а)




Репутация:   0  


Точнее не что это за файл, почему он может не открываться?
В VC в Project->properties->vc++ directories->include directories добавил путь к бусту

фух, все запустилось) прописал путь к папке либ.
Вопрос по Вашему коду. В каком диапазоне выводятся рандомные числа? от 0 до 1?

Цитата(maxpop @ 1.3.2011, 2:23) *
Точнее не что это за файл, почему он может не открываться?
В VC в Project->properties->vc++ directories->include directories добавил путь к бусту

фух, все запустилось) прописал путь к папке либ.
Вопрос по Вашему коду. В каком диапазоне выводятся рандомные числа? от 0 до 1?


По сути мне надо выбрать движение вправо или влево. Относительно какого числа можно смотреть получившийся рандом, что бы если rnd()>x двигаться вправо, rnd()<x двигаться влево? И как вычислять это число, если менять параметр у exp(a)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 1.3.2011, 8:43
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(maxpop @ 1.3.2011, 2:37) *
Вопрос по Вашему коду. В каком диапазоне выводятся рандомные числа? от 0 до 1?

согласно экспоненциальному распределению с параметром 5, т.е. функция распределения F(t) = 1 - exp(-5*t).
я не знаю какое тебе распределение нужно, посмотри документацию boost там множество разных распределений поддерживается.
скорее всего тебе равномерное распределение нужно(uniform distribution)

Сообщение отредактировал DEADHUNT - 1.3.2011, 10:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxpop
  опции профиля:
сообщение 2.3.2011, 1:01
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 28.2.2011
Пользователь №: 2455

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(DEADHUNT @ 1.3.2011, 8:43) *
Цитата(maxpop @ 1.3.2011, 2:37) *
Вопрос по Вашему коду. В каком диапазоне выводятся рандомные числа? от 0 до 1?

согласно экспоненциальному распределению с параметром 5, т.е. функция распределения F(t) = 1 - exp(-5*t).
я не знаю какое тебе распределение нужно, посмотри документацию boost там множество разных распределений поддерживается.
скорее всего тебе равномерное распределение нужно(uniform distribution)


Спасибо. Взял uniform_int. Все работает нормально. Еще раз спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.1.2022, 11:47