我知道可以通过定义泪滴形状并接受落入该区域内的点(来自统一生成器)来完成此操作。
我试图在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/