求一个正实数X的开方

2014-11-24 01:21:36 · 作者: · 浏览: 3
问题:求一个正实数X的平方根,不能使用sqrt等库函数。
解析:本题要求求一个正实数的平方根,不能使用sqrt等已有的库函数,我们可以做一下考虑:
利用二分法,mid=X/2.0,若mid*mid>X+p(由于浮点数不能精确表示和计算,设定p为一阈值),则说明X的开方小于mid,令mid=mid-q(q为设定的一个正的"小"实数);若mid*mid
代码如下:
double p=1.0E-8;//精确到小数点后8位;  
double q=1.0E-5;//精确到小数点后5位;  
double mysqrt(double X)  
{  
    if(Xp||(mid*mid-X)<-p)  
    {  
        if(mid*mid-X>p)  
            mid=mid-q;  
        else  
            mid=mid+q;  
    }  
    return mid;  
}