如何在C++中生成0到1之间均匀分布的随机双精度?
当然我可以想到一些答案,但我想知道标准做法是什么,有:
(速度比我的应用程序的随机性更重要).
非常感谢!
PS:如果重要,我的目标平台是Linux和Windows.
使用随机类和时间种子(NULL),均匀分布总是给出相同的第一个输出,即使具有不同的编译,但是在第一个输出的行为与您期望伪随机数生成器的行为相同.
这是建筑,还是我使用不正确?
MWE:
#include <ctime>
#include <iostream>
#include <random>
using namespace std;
default_random_engine gen(time(NULL));
uniform_int_distribution<int> dist(10,200);
int main()
{
for(int i = 0; i < 5; i++)
cout<<dist(gen)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
前三次我运行这个程序我得到的输出:
57
134
125
136
112
Run Code Online (Sandbox Code Playgroud)
在第二次尝试之前,我决定删除之间的空行uniform_int_distribution,int main()只是为了查看种子是否基于编译时间,如您所见,这无关紧要.
57
84
163
42
146
Run Code Online (Sandbox Code Playgroud)
再跑一次:
57
73
181
160
46
Run Code Online (Sandbox Code Playgroud)
所以在我的跑步中我一直是57第一个,这当然不是世界末日,如果我想要不同的输出我可以扔掉第一个输出.但是,这是否是设计(如果是这样,为什么?)或者我是否在某种程度上滥用发生器(如果是这样的话怎么样?)就会产生疑问.