Windows下的random_device
最近在調(diào)bug的時(shí)候,調(diào)了好久,發(fā)現(xiàn)時(shí)這個(gè)隨機(jī)數(shù)函數(shù)出問題。
win10、mingw32-g++、vscode、cmake
random_device()目的就是產(chǎn)生生成真隨機(jī)數(shù),rand()函數(shù)用的線性同余法生成隨機(jī)數(shù),但是這個(gè)隨機(jī)數(shù)實(shí)際上是一個(gè)偽隨機(jī)數(shù)。
然而randm_device()只在Linux下有效,在Windows下無效。測(cè)試如下:
#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下結(jié)果是這樣的:
在linux下結(jié)果是這樣的:
為什么呢?
random_device()在Linux的實(shí)現(xiàn)中,是讀取/dev/urandom設(shè)備;Windows的實(shí)現(xiàn)是用rand_s。。。很悲劇
那么是不是因?yàn)閣indows下的mingw-gcc不好使呢?于是我試了試mscv,結(jié)果下:
然后用我的vs2017打開項(xiàng)目,直接生成。?
這個(gè)實(shí)驗(yàn)說明,msvc支持真隨機(jī)數(shù)。over。
【附錄】
mingw在windows下真的全是坑。我再也不windows下gcc了。。。我選擇msvc。。。
我選擇擁抱Ubuntu
?
總結(jié)
以上是生活随笔為你收集整理的Windows下的random_device的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 善待自己关爱他人
- 下一篇: SAP系统开发里程碑 2022 刘欣