我知道可以通过定义泪滴形状并接受落入该区域内的点(来自统一生成器)来完成此操作。

我试图在C++中通过生成两个统一的随机数x和y来定位点(x,y),然后检查该点是否在该区域内,来做到这一点。

我自己的代码本身没有问题,但是我的逻辑是否存在缺陷?我还没有找到合适的图形方式来检查这是否是正态分布。

这是应该起作用的代码:

typedef unsigned long long int Ullong;
typedef double Doub;

struct Normaldev : Ran {
    Doub mu,sig;

    Normaldev (Doub mmu, Doub ssig, Ullong i)
        : Ran (i), mu(mmu), sig(ssig){}

    Doub dev() {

      Doub u, v, x, y, q;
        do {
          u=Doub();
          v=1.7156*(Doub()-0.5);
          x=u-0.449871;
          y=abs(v)+0.386595;
          q=x*x+y*(0.19600*y-0.25472*x);
        } while(q>0.27597 && (q>0.27846 || v*v>-4*log(u)*u*u));

        return mu+sig*v/u;
     }
};

凭借对C++的基本了解,我尽可能地修改了《数字食谱》一书中的建议代码,但是Ran到底应该是什么呢?

最佳答案



Ran是NormalDev的父类。它没有在您提供的代码中定义。根据代码,它似乎是一个相当通用的随机数类,该类在其构造函数中采用unsigned long long int种子。

关于c++ - 在C++中实现正态分布的均匀比率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13001485/

10-11 00:39