重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言中计算一个数的N次方可以用库函数pow来实现。
创新互联主要从事网站建设、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务灵石,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
函数原型:double pow(double x, double y);
功 能:计算x^y的值
返 回 值:计算结果
举例如下:
double a = pow(3.14, 2); // 计算3.14的平方
注:使用pow函数时,需要将头文件#includemath.h包含进源文件中。
没办法求出函数,,只能使用 数值积分 法
简单的写法效率非常低,要想效率比较高就得专门研究高级的数值积分算法
我建议你使用查表法,就是把标准正态分布表硬编码直接写到程序里,然后查表
我 看了一下,表中一共就30*10=300个数(当然只是一半)
查表的速度绝对无与伦比的快
给你一个效率不高的办法
public static double y(double x) {
return 1 / Math.sqrt(2 * Math.PI) * Math.pow(Math.E, -x * x / 2);
}
public static double fai(double x) {
if (x -3.9) {
return 0;
} else if (x 3.9) {
return 1;
}
double f = 0;
double pc = -5;
double step = 0.00001;
for (double i = pc; i x; i += step)
f += y(i) * step;
return f;
}
double gaussian(double u) //用Box_Muller算法产生高斯分布的随机数
{
double r,t,z,x;
double s1,s2;
s1=(1.0+rand())/(RAND_MAX+1.0);
s2=(1.0+rand())/(RAND_MAX+1.0);
r=sqrt(-2*log(s2)/log(e));
t=2*pi*s1;
z=r*cos(t);
x=u+z*N;
return x;
}
以前写的一个函数,u是均值,N是方差