Windows下的random_device
生活随笔
收集整理的這篇文章主要介紹了
Windows下的random_device
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在調bug的時候,調了好久,發現時這個隨機數函數出問題。
win10、mingw32-g++、vscode、cmake
random_device()目的就是產生生成真隨機數,rand()函數用的線性同余法生成隨機數,但是這個隨機數實際上是一個偽隨機數。
然而randm_device()只在Linux下有效,在Windows下無效。測試如下:
#include <iostream> #include <random>inline float get_random_float() {std::random_device dev;std::mt19937 rng(dev());std::uniform_real_distribution<float> dist(0.f, 1.f); // distribution in range [1, 6]return dist(rng); }int main() {int m = 0;while(m<10){float random_r = get_random_float();std::cout<<random_r<<std::endl;m++;}system("pause");return 0; }同樣的代碼在windows下結果是這樣的:
在linux下結果是這樣的:
為什么呢?
random_device()在Linux的實現中,是讀取/dev/urandom設備;Windows的實現是用rand_s。。。很悲劇
那么是不是因為windows下的mingw-gcc不好使呢?于是我試了試mscv,結果下:
然后用我的vs2017打開項目,直接生成。?
這個實驗說明,msvc支持真隨機數。over。
【附錄】
mingw在windows下真的全是坑。我再也不windows下gcc了。。。我選擇msvc。。。
我選擇擁抱Ubuntu
?
總結
以上是生活随笔為你收集整理的Windows下的random_device的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 善待自己关爱他人
- 下一篇: 暴力枚举Gmail邮箱地址的新姿势