用牛顿迭代法求浮点数的平方根

简介:

比如我们要求a的平方根,首先随便猜一个近似值x,然后不断令x等于x和a/x的平均数,迭代几次后x的值就已经相当精确了。

看下面(假设a=2,我们求2的平方根):

1.先随便猜个数,比如我猜2的平方根为7

( 7  + 2/7 ) / 2 = 3.64287514
( 3.64287514  + 2/3.64287514 ) / 2 = 2.095946017

......

......

( n+ 2/n) / 2 = 1.414....

下面是代码:

 
  1. #define ABS(VAL) (((VAL)>0)?(VAL):(-(VAL)))   
  2. //用牛顿迭代法求浮点数的平方根   
  3. float mysqrt(float x) {   
  4.     float g0,g1;   
  5.     if(x==0)   
  6.         return 0;   
  7.     g0=x/2;   
  8.     g1=(g0+x/g0)/2;   
  9.     while(ABS(g1-g0)>0.01)   
  10.     {   
  11.         g0=g1;   
  12.         g1=(g0+(x/g0))/2;   
  13.     }   
  14.     return g1;   
  15. }  





本文转自 yarin 51CTO博客,原文链接: http://blog.51cto.com/yarin/379989 ,如需转载请自行联系原作者
相关文章
|
5月前
|
存储
A除于B(大数相除)
A除于B(大数相除)
33 0
|
6月前
|
机器学习/深度学习
什么是浮点数加减运算里的对阶,阶码和尾数
什么是浮点数加减运算里的对阶,阶码和尾数
92 1
|
11月前
|
C++
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
69 0
11:计算浮点数相除的余数
11:计算浮点数相除的余数
214 0
【3.整数与浮点数二分】
1.整数二分 >### 二分本质 >- 有单调性,一定可以二分 >- 二分的题目,不一定非要有单调性 >### 思路:分俩种情况,有俩种模板
76 0
【3.整数与浮点数二分】
牛顿迭代法求开方
牛顿迭代法求开方
150 0
牛顿迭代法求开方