[英]Default constructed std::random_device doesn't return random number
我試圖從cppreference中運行一個關於std::random_device
的簡單示例,但是在與 function 一致的情況下,調用d(rd1)
程序進入無限循環並且永遠不會返回。
這是代碼:
#include <iostream>
#include <random>
int main()
{
std::uniform_int_distribution<int> d(0, 10);
std::random_device rd1;
for(int n = 0; n < 10; ++n)
std::cout << d(rd1) << ' ';
std::cout << '\n';
}
經過一些檢查,我發現 function std::random_device::operator()
總是返回值 4294967295 ,這導致std::uniform_int_distribution<IntType>::operator()
進入無限循環。
如果我用"rdrand"
或"/dev/urandom"
程序顯式調用構造函數效果很好,但使用"rdseed"
它是相同的錯誤結果。 此外,如果我鏈接到 llvm 的 libc++,則該示例可以正常工作。 值得注意的是,在 Ubuntu 16 和 18 上運行良好,但在 Ubuntu 20 和 Linux 上,我遇到了問題
為什么默認構造的隨機設備不起作用?
unname uname -a
output:
Linux my-pc 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
為什么默認構造的隨機設備不起作用?
可能與實施質量有關,或與執行環境有關,或兩者兼而有之。 標准當然不能保證這種行為。
一般來說,一個人可能不應該依賴std::random_device
的隨機性。 至少,將它與另一個種子和/或偽隨機數結合起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.