###### 问题遇到的现象和发生背景
对一种物质的干度进行求解,正常来说结果是0~1之间的浮点数,但是我的运算结果是0,这个干度与许多输出结果相关,很多需要求解的数值输出都是nan值
###### 问题相关代码,请勿粘贴截图
主程序调用下面这个程序
double Numerical::zbrent3(double x1,double x2,double tol,double h,double sgt)
{
double a,b,fa,fb,fc,c,d,e,tol1,xm,q,r,p,eps,s,aaa,tt;
int t,itmax,iter;
itmax = 100;
eps = 0.00000003;
a = x1;
b = x2;
fa = Fun_dd.hr_tf(a,h,sgt);
fb = Fun_dd.hr_tf(b,h,sgt);
if ((fb * fa) > 0.0)
{
cout<<"root must be bracketed for zbrent"<<endl;
cout<<"两相区求干度"<<endl;
}
fc = fb;
for (iter = 1; iter<=itmax; iter++)
{
if ((fb * fc) > 0.0)
{
c = a;
fc = fa;
d = b - a;
e = d;
}
if (fabs(fc) < fabs(fb))
{
a = b;
b = c;
c = a;
fa = fb;
fb = fc;
fc = fa;
}
tol1 = 2.0*eps* fabs(b) + 0.5 * tol;
xm = 0.5 * (c - b);
if ((fabs(xm) <= tol1) || (fb == 0.0))
{
tt=b;
return tt;
exit(1);
}
if ((fabs(e) >= tol1) && (fabs(fa) > fabs(fb)))
{
s = fb / fa;
if (a == c)
{
p = 2.0 * xm * s;
q = 1 - s;
}
else
{
q = fa / fc;
r = fb / fc;
p = s * (2.0 * xm * q * (q - r) - (b - a) * (r - 1.0));
q = (q - 1.0) * (r - 1.0) * (s - 1.0);
}
if (p > 0.0) q = -q;
p = fabs(p);
if ((3.0 * xm * q - fabs(tol1 * q)) < fabs(e * q))
{
aaa = 3.0 * xm * q - fabs(tol1 * q);
}
else
{
aaa = fabs(e * q);
}
if ((2.0 * p) < aaa)
{
e = d;
d = p / q;
}
else
{
d = xm;
e = d;
}
}
else
{
d = xm;
e = d;
}
a = b;
fa = fb;
if (fabs(d) > tol1)
b = b + d;
else
{
if (xm>0)
t=1;
if (xm==0)
t=0;
if (xm<0)
t=-1;
b = b + fabs(tol1) * t;
}
fb = Fun_dd.hr_tf(b,h,sgt);
}
tt=b;
return tt;
cout<< "zbrent exceeding maximum iterations."<<endl;
}
###### 运行结果及报错内容
###### 我的解答思路和尝试过的方法
修改括号内的赋值,但是调用这个程序的这行代码求解仍然是0,就是这个干度
dryness_out = Num_dd.zbrent3(0.0,1.0, 0.000001*(0.0 + 1.0) / 2.0, hr_out, t_e);
原来是 dryness_out=Num_dd.zbrent3(0.0,2.0,0.000001*(0.0+2.0)/2.0,hr_out,t_e);
###### 我想要达到的结果
让求解出来的数值是位于0~1之间的浮点数
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。