c语言牛顿法求整数平方根,请问有关用牛顿迭代法求平方根的有关问题

请教有关用牛顿迭代法求平方根的问题

我用C编了一个程序,用牛顿迭代法求平方根,要求计算结果保留三位小数,计算中数字保留4为小数,我写的程序如下

1254311657.png

请问为什么输出结果不对,而且是负数,哪里出错了?

谢谢啦O(∩_∩)O

分享到:

------解决方案--------------------

浮点数判等不能用运算符 ==

另外,以后发代码,不要截图,不利于别人复制。

------解决方案--------------------

仅供参考//用C语言编程,求出sin(x)=(5/6)*x这个方程在区间(0,π/2)的近似解。

#include 

#include 

double x,e;

void main () {

x=0.001;

e=0.001;

while (1) {

while (1) {

if (sin(x)>5.0/6.0*x) {

x+=e;

} else {

break;

}

}

e/=10.0;

if (e<1e-15) break;

while (1) {

if (sin(x)<5.0/6.0*x) {

x-=e;

} else {

break;

}

}

e/=10.0;

if (e<1e-15) break;

}

printf("%.14g\n",x);

}

//1.026738291371

------解决方案--------------------

#include 

bool equal(float x, float y){

float t = x - y, eps = 1e-4;

if(t  -eps) return true;

return false;

}

float Newton(float x)

{

float yk = x, yka1 = 1;//不要从0开始迭代。。否则第一步就会挂掉

x = (int)(10000.0 * x + 0.5) / 10000.0;

yk = (int)(10000.0 * yk + 0.5) / 10000.0;

while(1)

{

if(equal(yk, yka1))//浮点数不要直接判相等。。自己写个比较函数。。

break;

else

{

yk = yka1;

yka1 = 1.0 / 2 * (yk + x / yk);//你这里1/2直接等于0了。。

yka1 = (int)(10000.0 * yka1 + 0.5) / 10000.0;

}

}

return yka1;

}

int main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值