求用C或C++语言计算平方根,要求不使用SQRT函数

求用C或C++编写一个不使用SQRT函数计算的程序
2024-11-24 13:47:40
推荐回答(5个)
回答1:

一般我们求平方根使用牛顿迭代法,实现代码如下:

double newtonMethod(double toBeSqrted) {
    double x = 1.0;
    while(abs(x * x - toBeSqrted) > 1e-5) {
        x = (x + toBeSqrted / x) / 2;
    }
    return x;
}

还可以用二分查找,这个原理较为简单,不过算法复杂度较高。

float sqrtByBisection(float n) { 
    if (n < 0)
        return n; 
    float mid,last; 
    float low, up; 
    low=0, up = n; 
    mid = (low + up) / 2; 
    do {
        if(mid * mid > n)
    up = mid; 
else 
    low = mid;
        last = mid;
        mid = (up + low) / 2; 
    } while(abs(mid- l ast) > eps);

        return mid; 
}

回答2:

#include
#include /*VC编译器应去掉这一行*/
#include
#define MAX_ITER 200

int main()
{
double x=2;
double sqrt_1(double x,double eps); /*eps是精度*/

printf("sqrt(%lf)=%lf\n",x,sqrt_1(x,1e-6));
getch(); /*VC编译器应去掉这一行*/
return 0;
}

double sqrt_1(double x,double eps)
{
double r1=0,r2=0;
int i=0;
do
{
if (i++==0)
r1=1;
else
r1=r2;
r2=(r1+x/r1)/2;
}while(fabs(r1-r2)>eps || i>MAX_ITER);
return r2;
}

回答3:

呵呵呵,这个就不是编程题了,是个纯粹的数学题了,要计算平方根的话,方法多如牛毛,比如使用,牛顿插值,泰勒展开,卡马克的快速平方根算法,等等,了解下算法,写程序也就几分钟。

回答4:

楼上的确实很厉害呀,不过我这儿有更简单的算法……
不是不让用SQRT吗?那我用pow函数总可以了吧。
这函数也在math.h里,
这么用
double x;
pow(x,0.5);
这就OK了,x的0.5次方不就是它的平方根吗?
哈哈!

回答5:

http://wenku.baidu.com/view/6b74c622bcd126fff7050bfe.html