生成隨機數的C++ 11的方法是:什麼類型的隨機數引擎用於指定的隨機分佈?
- 實例化的隨機數引擎
- 實例化一個隨機分佈
- 推送來自發動機的隨機數通過分配
問題是,隨機數引擎和隨機分佈是關於arit類型的模板你正在使用的噴頭。
這兩種類型的算術有什麼關係?
您可以使用該引擎爲分佈和對面一個32位整數和一個64位整數?有什麼危險? 浮點類型呢?
我假設一個指引,即引擎生成的可能數字的數量應該大於或等於您希望獲得的不同隨機數的數量。不幸的是,我無法測試我的假設,因爲在我的電腦uint_fast32_t
和uint_fast64_t
是相同的,因此三個C++ 11發電機的每一個的建議引擎產生相同的結果。
上C++ 11個分佈像std::uniform_real_distribution或std::uniform_int_distribution該文檔是在這方面不完全:
這部分是不完整的。 原因:在發電機
但exapmple的gcc 4.7
實施uniform_real_distribution
要求是:
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p)
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
return (__aurng() * (__p.b() - __p.a())) + __p.a();
}
其中適配器是:
的輸出轉換的任何的適配器類 發電機進入特定分配的輸入。
該「任何」聽起來讓人放心,但它是標準?我特別擔心隱藏的溢出,這些溢出很難檢測到,並且可能會影響分配的正確性。
這些要求可以在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf(904頁以上)中找到。我找不到答案,但也許你可以? – Escualo