[英]Inclusive range uniform_real_distribution
我正在嘗試使用隨機庫。 我知道這里有一個類似的問題: std :: uniform_real_distribution包含范圍 。 根據我的閱讀,它應該是[0,10)。 我嘗試使用[0,10],但是我嘗試了解決方案,但對我來說不起作用。 我不知道為什么。 這是一些代碼。
std::vector<int> vec;
int main()
{
const int min = 0;
const int max = 10;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(min, std::nextafter(max, INT_MAX));
const int MAX = 10;
for (int i = 0; i < MAX; i++)
{
int t = dis(gen);
vec.push_back(t);
}
for (auto& i : vec)
std::cout << i << std::endl;
system("pause");
return 0;
}
我試過了:
std::uniform_real_distribution<> dis(min, std::nextafter(max, INT_MAX));
std::uniform_real_distribution<> dis{ 0, 10 };
std::uniform_real_distribution<> dis(min, max);
它只會隨機產生0到9,不像我希望的那樣包含10。 我正在VS2013上工作。
std :: uniform_real_distribution以實數工作,而不是整數。 結果很可能是dis(gen);
的Real結果dis(gen);
將其存儲在Integer int t
時,它被截斷。 由於在Real域中存在無限數量的可能值,因此不太可能在十次嘗試中返回恰好為10.0的值,即使這樣做, 浮點數不准確也有可能將其變為9.999999或類似值。
如果打開了編譯器的警告,則這將顯示為int精度損失警告的浮點數。
快速解決方案是
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.