小编azi*_*ish的帖子

在C++中使用统一实分布生成的随机数并不是真正均匀分布的

我写了一个小代码,以确保我可以从一个非常广泛的范围获得随机数,例如.[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)

c++ random

6
推荐指数
1
解决办法
2411
查看次数

如何在Nancy.Swagger包构建的Swagger-UI中添加参数的示例值?

我使用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)

c# nancy swagger swagger-ui visual-studio-2017

6
推荐指数
1
解决办法
452
查看次数

如何在C++中创建类的成员函数每次调用时都会生成一个不同的随机数?

我有一个类,其中还包括一个随机数引擎及其分布:

#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)没有做好自己的工作.

我真的需要找到问题并纠正输出.我将不胜感激任何帮助.

c++ random constructor class member-functions

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