@867976167
2015-08-05T00:24:10.000000Z
字数 1295
阅读 2066
数学
它是一种在实数域和复数域上近似求解方程的方法。方法使用函数
首先,选择一个接近函数
已经证明,如果
根据上面我们可以把求平方根看做求下面公式
求导得到:
可以推出下面公式
最后得到:
下面牛顿法求平方根代码:
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;
}