算法说明已经写在了代码里面,使用牛顿迭代需要一定的高数基础。
代码如下:
//牛顿迭代算法
//牛顿迭代算法,原型源于导数定义的变形
//f(x) = g(x) - h(x),求f(x)的根。
//令f(x) = 0,则有g(x)-h(x) = 0.
//有Xk+1 = Xk - f(Xk)/f(Xk)'
//例:求n的平方根,有f(x) = x^2 - n = 0
//Xk+1 = Xk - ((Xk)^2 - n)/2Xk
//Xk+1 = (Xk^2 +n)/2Xk -> Xk+1 = (Xk + n/Xk)/2
//结束迭代的条件为Xk+1 = Xk
//以上就是基本思路,代码实现如下:
#include <stdio.h>
float niudun(int);
int main(){
int result1 = (int)((niudun(25)+0.5)*10/10); //进行四舍五入操作
int result2 = (int)((niudun(27)+0.5)*10/10); //进行四舍五入操作
int result3 = (int)((niudun(35)+0.5)*10/10); //进行四舍五入操作
int result4 = (int)((niudun(36)+0.5)*10/10); //进行四舍五入操作
int result5 = (int)((niudun(0)+0.5)*10/10); //进行四舍五入操作
printf("%d\n",result1);
printf("%d\n",result2);
printf("%d\n",result3);
printf("%d\n",result4);
printf("%d\n",result5);
return 0;
}
float niudun(int num){
float result = 0;
if(num !=0 ){//num为0,则直接返回0
//设置最开始的Xk为num的一半,降低迭代次数
float Xk = num/2.0;
while(1){
result = (Xk+num/Xk)/2;
if(result == Xk){
//当牛顿迭代结束时,结束条件为Xk+1 = Xk
break;
}else{
Xk = result;
}
}
}
return result;
}
输出结果:
如有bug,请各位大佬批评指正。ORZ~~~