迭代返回值是为空吗?double CBesselPositive::Value_sigma()
{
double sigma0 = Value_alpha()*(m_S*1000);
double sigma = Value_alpha()* (m_S*1000)+Value_beta()*sin(sigma0)*cos(2*Value_sigma1()+sigma0)+Value_gamma()*sin(2*sigma0)*cos(4*Value_sigma1()+2*sigma0);
        //迭代
do{

sigma0 = sigma;
sigma = Value_alpha()*(m_S*1000)+Value_beta()
*sin(sigma0)*cos(2*Value_sigma1()+sigma0)+Value_gamma()
*sin(2*sigma0)*cos(4*Value_sigma1()+2*sigma0);

}
        while(fabs(sigma-sigma0)>=  ((0.001/3600) * 3.141592653589793238462643383279/180) );

//返回sigma
return sigma;
}sigma后面的是公式,关键是迭代法会不会有返回值。如果没有的话,那么用一个空函数来实现,那么怎样在另一个函数中调用这个函数的sigma值呢??

解决方案 »

  1.   

    sigma0,sigma后面的都是公式,不必细究。
      

  2.   

    do-while 用错了do-while 的流程先执行一次在判断,这样 lz 的程序判断时 sigma0,sigma 就是相等的没法继续执行改成 while 循环double CBesselPositive::Value_sigma()
    {
        double sigma0 = Value_alpha()*(m_S*1000);
        double sigma = Value_alpha()* (m_S*1000)+Value_beta()*sin(sigma0)*cos(2*Value_sigma1()+sigma0)
                      +Value_gamma()*sin(2*sigma0)*cos(4*Value_sigma1()+2*sigma0);    
        //迭代    while(fabs(sigma-sigma0)>=  ((0.001/3600) * 3.141592653589793238462643383279/180) );
        {     
            sigma0 = sigma;
            sigma = Value_alpha()*(m_S*1000)+Value_beta()
                *sin(sigma0)*cos(2*Value_sigma1()+sigma0)+Value_gamma()
                *sin(2*sigma0)*cos(4*Value_sigma1()+2*sigma0);        
        }        
        //返回sigma
        return sigma;
    }
      

  3.   

    我刚自己找到错误了,其实把return sigma;加入do{}中就可以了。
    还是要谢谢你。