1
我需要爲不同的位數生成隨機變量。 我想出了以下的方法來做到這一點:不同位數的隨機值均勻分佈
constexpr const std::size_t bit_count = 77U;
std::uint_fast32_t seed = 0U;
try
{
std::random_device rd;
seed = rd(); // may throw
}
catch(std::exception& e)
{
//simply use time as seed then
seed = std::chrono::system_clock::now().time_since_epoch().count();
}
std::mt19937 mt(seed);
using number_t = std::vector<bool>;
std::vector<number_t> numbers;
for(std::size_t h = 0U; i < how_many_numbers; ++h)
{
std::uniform_int_distribution<int> dist(0, 1);
numbers.push_back(number_t());
auto& num = numbers.back();
num.resize(bit_count);
for(std::size_t i = 0U; i < bit_count; ++i)
num[i] = (dist(mt) == 0);
}
這會不會是均勻分佈的,並表現幾乎一樣,將被直接生成?
如果不是:你怎麼能這樣做?我真的需要這些不同的位大小用於散列目的,所以只使用一些基本類型不是這種類型的選項,特別是因爲位數可能是8192,但不會更大。由於位數是可變的,並且爲了學習目的,我想/需要手動完成。
如果一個值是真正隨機的,那麼任何單獨的位也是隨機的。這意味着你可以拆分它們或者連接它們或者以任何方式交換它們,結果仍然是隨機的。 –