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

求用C或C++编写一个不使用SQRT函数计算的程序... 求用C或C++编写一个不使用SQRT函数计算的程序 展开
 我来答
_Herobs
2015-07-31 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:132
采纳率:80%
帮助的人:84万
展开全部

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

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; 
}
wacs5
2010-11-28 · TA获得超过1.6万个赞
知道大有可为答主
回答量:3724
采纳率:82%
帮助的人:2755万
展开全部
#include <stdio.h>
#include <conio.h> /*VC编译器应去掉这一行*/
#include <math.h>
#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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxc570157491
2010-12-02 · TA获得超过100个赞
知道答主
回答量:99
采纳率:0%
帮助的人:92.7万
展开全部
呵呵呵,这个就不是编程题了,是个纯粹的数学题了,要计算平方根的话,方法多如牛毛,比如使用,牛顿插值,泰勒展开,卡马克的快速平方根算法,等等,了解下算法,写程序也就几分钟。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小花郎星
2010-11-29 · TA获得超过755个赞
知道小有建树答主
回答量:413
采纳率:0%
帮助的人:251万
展开全部
楼上的确实很厉害呀,不过我这儿有更简单的算法……
不是不让用SQRT吗?那我用pow函数总可以了吧。
这函数也在math.h里,
这么用
double x;
pow(x,0.5);
这就OK了,x的0.5次方不就是它的平方根吗?
哈哈!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
850609901
2010-11-28 · TA获得超过321个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:178万

参考资料: http://wenku.baidu.com/view/6b74c622bcd126fff7050bfe.html

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式