平方根函数的数学定义:
√x= 那样的 y ,使得 y≥0 ,而且 y²=x
计算机计算平方根,最常用的就是牛顿的逐步逼近方法。这一 方法,如果对 x 的平方根的值有了一个猜测 y ,那么就可以通过执行一个简单操作去得到一个更好的猜测:只需要求出 y 和 y/x 的平均值(它更接近实际的平方根值)。例如,可以使用这种方式去计算2的平方根,假定初始值是1:
猜测     商     平均值
1     2/1=2     (2+1)/2=1.5
1.5     2/1.5=1.3333     (1.3333+1.5)/2=1.4167
1.4167     2/1.4167=1.4118     (1.4167+1.4118)/2=1.4142
1.4142     …     …
继续这一计算过程,我们就能得到对2的平方根的越来越好的近似值。

书上给的例子:
(define (mysqrt x) (sqrt-iter 1 x))
(define (goodenough? guess x) (< (abs (- (* guess guess) x)) (* 0.000000000001)))
(define (imporve guess x)  (/ (+ guess (/ x guess)) 2))
(define (sqrt-iter guess x) (if (goodenough? guess x) guess (sqrt-iter (imporve guess x) x)))
 

我改:

先来个PY的。

def imporve(guess, x):
    return (x/guess + guess) /2

def goodenough(guess, x):
    return abs(guess * guess - x) < 0.000000000001

def sqrt_iter(guess, x):
    if goodenough(guess, x):
        return guess
    else:
        return sqrt_iter(imporve(guess, x), x)

def mysqrt(x):
    return sqrt_iter(1, x)

 

再来一个:

-module(mysqrt).
-export([sqrt/1]).

  imporve(Guess, X) -> (X / Guess + Guess) / 2.
  goodenough(Guess, X) -> abs(Guess * Guess - X) < 0.000000000001.
  sqrt_iter(Guess, X)  ->
       case  goodenough(Guess, X) of
         true  -> Guess;
         false -> sqrt_iter(imporve(Guess, X), X)
       end.

  sqrt(X) -> sqrt_iter(1, X).