關於求平方根

Ljzn發表於2022-05-31

看到了一種來自古希臘或古巴比倫的求平方根的方法。

求 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

測試一下

image.png

附錄

亞歷山大的希羅

相關文章