相关疑难解决方法(0)

如何在C++中生成0到1之间均匀分布的随机双精度?

如何在C++中生成0到1之间均匀分布的随机双精度?

当然我可以想到一些答案,但我想知道标准做法是什么,有:

  • 良好的标准合规性
  • 良好的随机性
  • 好速度

(速度比我的应用程序的随机性更重要).

非常感谢!

PS:如果重要,我的目标平台是Linux和Windows.

c++ random

60
推荐指数
5
解决办法
10万
查看次数

伪随机数发生器给出相同的第一输出,但随后表现如预期

使用随机类和时间种子(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第一个,这当然不是世界末日,如果我想要不同的输出我可以扔掉第一个输出.但是,这是否是设计(如果是这样,为什么?)或者我是否在某种程度上滥用发生器(如果是这样的话怎么样?)就会产生疑问.

c++ random

10
推荐指数
1
解决办法
3088
查看次数

标签 统计

c++ ×2

random ×2