我写了一个小代码,以确保我可以从一个非常广泛的范围获得随机数,例如.[0,10 ^ 36]因为我将在以后使用这些宽范围.
我的代码如下:
#include <iostream>
#include <cmath>
#include <random>
#include <chrono>
int main()
{ unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
double expo = pow(10,36);
std::uniform_real_distribution<double> dist(0,expo);
std::mt19937_64 rng(seed);
for (int i=0; i<10; i++)
std::cout << dist(rng) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是输出的示例:
6.75507e+035
4.01129e+035
6.85525e+035
8.85896e+035
3.1455e+035
3.04962e+035
5.48817e+035
3.54502e+035
2.24337e+035
2.23367e+035
Run Code Online (Sandbox Code Playgroud)
如您所见,随机数都非常接近给定区间的上端点.我尝试多次运行程序,也将10个数字增加到100,但随机数总是接近区间的上端点(指数为35,有时为34).
自从我使用以来std::uniform_real_distribution,我希望也有,有时也会有[0,1000]范围内的数字.我发现这不是一个统一的分布.这对我来说很重要,随机数不仅接近上端点,因为我稍后会在if语句中使用随机数:
if (random_number == 0)
//do some operations
Run Code Online (Sandbox Code Playgroud)
并且上端点实际上将用作速率,其中发生某些事情.但似乎随机数有时候没有机会为零.
我不知道为什么会发生这种情况,并且非常感谢任何想法或帮助.
(Eclipse 4.4.1,Windows 7)
我使用Nancy.Swagger包和MetadataModule为我的API构建了一个Swagger UI(根据以下链接:https://github.com/yahehe/Nancy.Swagger/wiki/Nancy.Swagger-for-Nancy-v2).
我得到了UI,但问题是我无法为对象的属性添加示例值,这些值作为参数传递到正文中.
我看,例如,这个输出:
在这里,我希望有一个真正的示例值,而不是单词"string".但我不知道如何在这种方法中添加示例值,我将不胜感激任何帮助.
来自API的片段和参数(PRequest的对象):
Post("/", async (x, ctx) =>
{
PRequest PostRequestModel;
try
{
postRequestModel = this.Bind<PRequest>();
}
Run Code Online (Sandbox Code Playgroud)
MetaDataModule的片段:
Describe["Post"] = desc => desc.AsSwagger(
with => with.Operation(
op => op.OperationId("Post")
.Tag("User")
.Summary("Post a new User")
.Description("This creates a new user.")
.BodyParameter(bp => bp.Description("A PRequest object").Name("PRequest").Schema<PRequest>())
Run Code Online (Sandbox Code Playgroud) 我有一个类,其中还包括一个随机数引擎及其分布:
#include <iostream>
#include <cmath>
#include <random>
#include <chrono>
class C
{
public:
typedef std::mt19937_64 engine;
typedef std::uniform_real_distribution<double> distribution;
.
.
.
protected:
engine rng;
distribution dist;
void func();
.
.
.
};
Run Code Online (Sandbox Code Playgroud)
由于构造函数只被调用一次,我将种子放入其中:
C::C()
{ .
.
.
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
distribution dist(0.0, pow(10,12));
engine rng(seed);
}
Run Code Online (Sandbox Code Playgroud)
以下成员函数应该生成一个随机数,并且在程序的单次运行中将被多次调用:
void C::func()
{ .
.
.
double randNum = floor(dist(rng));
std::cout << randNum << std::endl;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
但是,每次它生成数字0作为随机数.似乎dist(rng)没有做好自己的工作.
我真的需要找到问题并纠正输出.我将不胜感激任何帮助.