关于调用蒙特卡洛程序算法的求值问题

 ###### 问题遇到的现象和发生背景
对一种物质的干度进行求解,正常来说结果是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;
}


 ###### 运行结果及报错内容

img

 ###### 我的解答思路和尝试过的方法
修改括号内的赋值,但是调用这个程序的这行代码求解仍然是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天,您在需要使用的时候【私信】联系我,我会为您补发。