簡體   English   中英

在全雙范圍 std::uniform_real_distribution 總是返回 inf

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM