Как генерировать случайные целые числа от 0 до 0x7FFFFFFF? - PullRequest
0 голосов
/ 30 августа 2018

Это не работает:

for (int p = 0; p < 10; p++) {
    random_device rd;
    mt19937 gen(rd);
    uniform_real_distribution<int> dis(0, INT_MAX);
    printf("%i\n", dis(gen));
}

Любой совет будет оценен.

1 Ответ

0 голосов
/ 30 августа 2018

В вашем коде есть несколько ошибок.

  1. Вы должны переместить создание random_device и заполнение mt19937 за пределы цикла for. Я также предлагаю то же самое для uniform_real_distribution<int>
  2. mt19937 принимает значение конструктора seed, а не random_device, поэтому вы должны вызвать его, чтобы получить seed (rd())
  3. Вам следует использовать uniform_int_distribution<int>, если вы генерируете целые числа
  4. Если вы намереваетесь сгенерировать число в 0x7FFFFFFF, вы должны явно указать это число, но если вы хотите получить числа до максимального значения int, я предлагаю использовать больше стиля C ++ std::numeric_limits<int>::max()

Вот рабочий пример:

#include <cstdio>
#include <random>
#include <limits>
using namespace std;

int main(){
  random_device rd;
  mt19937 gen(rd());
  uniform_int_distribution<int> dis(0, std::numeric_limits<int>::max());
  for (int p = 0; p < 10; p++) {
    printf("%i\n", dis(gen));
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...