[英]On the full double range std::uniform_real_distribution always returns inf
考慮以下最小示例:
#include <random>
#include <iostream>
int main (const int argC, char* argV[] ) {
std::uniform_real_distribution<double> dist(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max());
std::random_device gen;
std::cout << dist(gen) << std::endl;
return 0;
}
我希望該程序基本上可以打印double
范圍內的任何數字。 但是在我的機器上,輸出總是inf
。 如果我用float
替換double
也是如此。
我可以很容易地想象這會如何通過std::uniform_real_distribution
的錯誤實現而發生,例如,繪制數字的間隔長度不能表示為double
。 但是我的問題是,這確實是我的標准庫實現中的錯誤,還是我錯過了 C++ 標准允許的間隔的一些限制?
對於uniform_real_distribution
的要求之一是兩個邊界之間的差異小於std::numeric_limits<double>::max()
。 所以你的嘗試是錯誤的。
作為一種解決方法,您可以將其拆分為兩個生成器,一個用於負數,另一個用於非負數。 隨機選擇兩個生成器之一。
請記住,范圍的上限不能作為生成的數字返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.