Повысьте генератор случайных чисел

Что делает WriteString? Если функция печатает строку, возможно, вам нужно закончить «символ BYTE» c «" с помощью $ (если это DOS-программа. 09 function Int21h)

26
задан shinjuo 12 February 2010 в 10:28
поделиться

2 ответа

Этот код адаптирован из руководства по повышению на http://www.boost.org/doc/libs/1_42_0/libs/random/index.html :

#include <iostream>
#include "boost/random.hpp"
#include "boost/generator_iterator.hpp"
using namespace std;

int main() {
      typedef boost::mt19937 RNGType;
      RNGType rng;
      boost::uniform_int<> one_to_six( 1, 6 );
      boost::variate_generator< RNGType, boost::uniform_int<> >
                    dice(rng, one_to_six);
      for ( int i = 0; i < 6; i++ ) {
          int n  = dice();
          cout << n << endl;
     }
}

Чтобы объяснить биты:

  • mt19937 - генератор твёрдых частиц мерсенна, который генерирует необработанные случайные числа. Здесь используется typedef, так что вы можете легко изменить тип генератора случайных чисел.

  • rng является экземпляром твистер-генератора.

  • one_to_six является экземпляром распределения . Здесь указываются числа, которые мы хотим сгенерировать, и распределение, за которым они следуют. Здесь мы хотим от 1 до 6, распределенных равномерно.

  • dice - это то, что берет необработанные числа и распределение и создает для нас числа, которые мы действительно хотим.

  • dice() - это вызов operator() для объекта dice, который получает следующее случайное число после распределения, имитируя случайный шестисторонний бросок костей.

В этом коде каждый раз выдается одна и та же последовательность бросков костей. Вы можете рандомизировать генератор в его конструкторе:

 RNGType rng( time(0) );   

или с помощью его члена seed ().

65
ответ дан gatoatigrado 20 November 2019 в 07:26
поделиться

Не существует универсального RNG. Иногда важны статистические свойства, иногда криптология, иногда скорость.

1
ответ дан 28 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: