Я хотел бы сгенерировать случайное число разумно произвольной длины в C ++. Под «разумно произвольным» я подразумеваю ограничение по скорости и памяти главного компьютера.
Предположим:
Я хочу выбрать десятичное число (основание 10) длиной ceil(log10(MY_CUSTOM_RAND_MAX))
от 0
до 10^(ceil(log10(MY_CUSTOM_RAND_MAX))+1)-1
У меня есть vector<char>
Длина vector<char>
составляет ceil(log10(MY_CUSTOM_RAND_MAX))
Каждый char
на самом деле является целым числом, случайным числом от 0 до 9, выбираемым с помощью rand()
или аналогичными методами
Если я использую std::random_shuffle
, чтобы перетасовать вектор, я мог бы перебирать каждый элемент с конца, умножая его на умноженные на десять степеней, чтобы преобразовать его в unsigned long long
или все, что отображается в моем конечном диапазоне.
Я не знаю, есть ли проблемы с std::random_shuffle
с точки зрения того, насколько она случайна или нет, особенно когда выбирается последовательность rand()
результатов для заполнения vector<char>
.
Насколько схематичен std::random_shuffle
для генерации случайного числа произвольной длины таким образом, в количественном смысле?
(Я понимаю, что в Boost есть библиотека для создания случайных int
чисел. Не ясно, каковы ограничения диапазона, но это выглядит как MAX_INT
. Тем не менее, я понимаю, что указанная библиотека существует. Это больше общего вопроса об этой части STL при генерации произвольно большого случайного числа. Заранее спасибо за то, что сосредоточили свои ответы на этой части.)