一尘不染

巴比伦平方根方法背后的数学

algorithm

我读了计算任何数字的平方根的方法,算法如下:

double findSquareRoot(int n) {
    double x = n;
    double y = 1;
    double e = 0.00001;
    while(x-y >= e) {
        x = (x+y)/2;
        y = n/x;
    }
    return x;
}

我对这种方法的问题是

  1. 它如何计算平方根?我不了解其背后的数学原理。如何x=(x+y)/2 and y=n/x收敛到n的平方根。解释这个数学。

  2. 该算法的复杂性是什么?


阅读 951

收藏
2020-07-28

共1个答案

一尘不染

很容易看出您是否进行了一些运行并打印了x和y的连续值。例如100:

50.5 1.9801980198019802
26.24009900990099 3.8109612300726345
15.025530119986813 6.655339226067038
10.840434673026925 9.224722348894286
10.032578510960604 9.96752728032478
10.000052895642693 9.999947104637101
10.000000000139897 9.999999999860103

见,诀窍是,如果x
的平方根n,那么它是高于或低于实际的根,并n/x始终是在另一侧上。所以,如果你计算的中点x,并n/x会在一定程度上更接近真正的根。

关于复杂性,它实际上是无限的,因为真正的根永远都不会到达。这就是为什么要使用e参数。

2020-07-28