@867976167
2015-08-04T16:24:10.000000Z
字数 1295
阅读 2245
数学
它是一种在实数域和复数域上近似求解方程的方法。方法使用函数
首先,选择一个接近函数
已经证明,如果
根据上面我们可以把求平方根看做求下面公式
求导得到:
可以推出下面公式
最后得到:
下面牛顿法求平方根代码:
public int sqrt(int n) {int ret = 0;double x = n;double y = 1;double e = 0.0000000000000000001;while ((x - y) > e) {//判断是否相等,浮点数相等不能之间判断x = x + (y - x) / 2;//当x不等于y是,继续计算y = n / x;}return (int) y;}
将x可以看做从1到x是递增符合二分的要求,首先计算
public int sqrt(int x) {int low = 0;int high = x;if(x<0){return -1;}if(1==x||x==0){return x;}int mid = low + (high - low) / 2;while (low <=high) {long res = (long)mid * mid;//由于int相乘可能导致溢出,使用long,使用double也行if (res > x) {high=mid-1;//不减1导致无限循环}else if(res<x){low=mid+1;//}else{return mid;}mid = low + (high - low) / 2;}return (long)mid*mid>x?mid-1:mid;}