看到了一種來自古希臘或古巴比倫的求平方根的方法。
求 x 的平方根。
假設 a 是 x 的平方根的近似值,那麼 a 和 x / a
的平均數就比 a 更接近 x 的平方根。讓 a1 = (a + x / a) / 2
,即 a1 是比 a 更精確的對 x 的平方根的估值。以此類推,可以不斷求得更加精確的平方根。
例如,求 2 的平方根,我們先猜測其為 1.2 (任意一個大於1,小於2的數),然後繼續逼近
1.2
(1.2 + 2/1.2)/2 = 1.43
(1.43 + 2/1.43)/2 = 1.414
程式碼
defmodule M do
def sqrt(x, iter \\ 10)
def sqrt(x, i) do
a = (1+x)/2
do_sqrt(x, a, i)
end
defp do_sqrt(_, a, 0), do: a
defp do_sqrt(x, a, i) do
a = (a + x/a)/2
do_sqrt(x, a, i-1)
end
end
測試一下