| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:[求助]关于特殊函数的一串代码
只看楼主 加入收藏
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
 问题点数:0 回复次数:12 
[求助]关于特殊函数的一串代码

//功能:不完全贝塔(beta)函数
//描述:Bx[a,b]=Integrate[t^(a-1)*(1-t)^(b-1),{t,0,x}]/B[a,b]
//描述:B[a,b]=gamma[a]*gamma[b]/gamma[a+b]
//参数:a-参数,b-参数
//调用:lagam();
double lhbeta(double a,double b,double x)
{
double y;
if (a<=0.0)
{
printf("err**a<=0!");
return(-1.0);
}
if (b<=0.0)
{
printf("err**b<=0!");
return(-1.0);
}
if ((x<0.0)||(x>1.0))
{
printf("err**x<0 or x>1 !");
return(1.0e+70);
}
if ((x==0.0)||(x==1.0))
{
y=0.0;
}
else
{
y=a*log(x)+b*log(1.0-x);
y=exp(y);
y=y*lagam(a+b)/(lagam(a)*lagam(b));
}
if (x<(a+1.0)/(a+b+2.0))
{
y=y*beta(a,b,x)/a;
}
else
{
y=1.0-y*beta(b,a,1.0-x)/b;
}
return(y);
}

static double beta(double a,double b,double x)
{ int k;
double d,p0,q0,p1,q1,s0,s1;
p0=0.0; q0=1.0; p1=1.0; q1=1.0;
for (k=1; k<=100; k++)
{
d=(a+k)*(a+b+k)*x;
d=-d/((a+k+k)*(a+k+k+1.0));
p0=p1+d*p0;
q0=q1+d*q0;
s0=p0/q0;
d=k*(b-k)*x;
d=d/((a+k+k-1.0)*(a+k+k));
p1=p0+d*p1;
q1=q0+d*q1;
s1=p1/q1;
if (fabs(s1-s0)<fabs(s1)*1.0e-07)
{
return(s1);
}
}
printf("a or b too big !");
return(s1);
}

我想问下
if (fabs(s1-s0)<fabs(s1)*1.0e-07)
“1.0e-07”是什么意思???
有没有错误啊??

搜索更多相关主题的帖子: 特殊函数 代码 
2007-02-05 18:08
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
1.0e-07
着个应该是
1.0*10-八进制7

羊肉串 葡萄干 哈密瓜!!
2007-02-05 19:15
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

#include"stdio.h"
main()
{
printf("%f",2e+2);
}
你运行一下这个就明白了


羊肉串 葡萄干 哈密瓜!!
2007-02-05 19:16
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
得分:0 

哦,我试试看!
不过能不能把这个改成10进制的,或者改成C#语言,我学得是C#,但做系统要调用这个函数!!!


2007-02-05 19:53
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
得分:0 
这段代码改成C#应该是这样的吗?

if (Math.abs(s1-s0)<Math.abs(s1)*1.0*10)

2007-02-05 21:59
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
着个我不清楚 ,我也不懂C#

羊肉串 葡萄干 哈密瓜!!
2007-02-05 22:17
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
得分:0 
以下是引用mp3aaa在2007-2-5 19:16:59的发言:

#include"stdio.h"
main()
{
printf("%f",2e+2);
}
你运行一下这个就明白了

这个运行结果是
200.000000
即2e+2表示2乘以10的2次方

那1.0e-07表示1.0乘以10的-07次方????


2007-02-05 22:30
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
得分:0 

我又运行了下面的代码
#include "stdio.h"
#include "conio.h"

main()
{
float a=0.0000001;
printf("%f",a);
getch();
}

结果显示0.000000


2007-02-05 22:35
zone0356224
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-2-1
收藏
得分:0 

a=0.0000001
显示却是0.000000
那么实际上a=0.0000001 吗??
在计算的时候是按a=0.0000001 还是 a=0.000000


2007-02-06 11:58
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
你用的是单精度。。只能现实小数点后面6位 你用双精度就好了

羊肉串 葡萄干 哈密瓜!!
2007-02-06 14:33
快速回复:[求助]关于特殊函数的一串代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068667 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved