牛顿迭代法求平方根
(这种算法的原理很简单,我们仅仅是不断用(x,f(x))的切线来逼近方程x^2-a=0的根。根号a实际上就是x^2-a=0的一个正实根,这个函数的导数是2x。也就是说,函数上任一点(x,f(x))处的切线斜率是2x。那么,x-f(x)/(2x)就是一个比x更接近的近似值。代入f(x)=x^2-a得到x-(x^2-a)/(2x),也就是(x+a/x)/2。)
public class sqrt {
public static double sqrt(double c) {
if (c < 0) {
return Double.NaN;
}
double e = 1e-15;
double x = c;
double y = (x + c / x) / 2;
while (Math.abs(x - y) > e) {
x = y;
y = (x + c / x) / 2;
}
return x;
}
public static void main(String[] args) {
System.out.println(sqrt(-1));
}
}