Я пытаюсь использовать uniform_real_distribution в C++ для генерации массива случайных чисел. Вот мой кодusing uniform_real_distribution в C++
#include <random>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int max_index = 48655;
vector<int> arr;
arr.resize(100);
std::random_device radm;
std::mt19937_64 mt(radm());
std::uniform_real_distribution<> distribution(0, max_index);
for(int i = 0; i < 100; i++)
{
arr[i] = int(distribution(mt)*(max_index-1))%(max_index-1);
}
return 0
}
Проблема заключается в том, хотя я явно указан, что случайное число равномерно распределен в 0
и max_index
, есть еще какие-то отрицательные числа в моем массиве. И их значения одинаковы (-2432)
.
Могу я узнать, что я не так?
Большое спасибо заранее.
EDIT1:
======================================== ======================================
Я боюсь, что многие из ответчиков борются с операцией умножения и модуляции. Это была ошибка, что я уже удалил ее. Но дело в том, что даже это может семантически повлиять на результаты, оно не может заставить генератор дать отрицательные результаты.
Вы уверены, что вы правильно проверите содержимое своего вектора? Это не похоже на то, что ваш код может когда-либо создавать отрицательное число в системах с 32-битным 'int' (который я предполагаю, это то, что у вас есть). Btw, с какой целью выполняют умножение и модуль? –
Самый важный вопрос: почему вы делаете это умножение и модуль по значению в вашем цикле? Каков диапазон значений, который вам нужен, и почему бы вам просто не указать, что в дистрибутиве и что с ним делать? – Blastfurnace
@Blastfurnace Это была ошибка. Я удалил его, так как мне больше не нужно управлять диапазоном. Во всяком случае, суть в том, почему существуют отрицательные значения? – ChangeMyName