请教有关用牛顿迭代法求平方根的问题
我用C编了一个程序,用牛顿迭代法求平方根,要求计算结果保留三位小数,计算中数字保留4为小数,我写的程序如下
请问为什么输出结果不对,而且是负数,哪里出错了?
谢谢啦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()