关于求平方根

看到了一种来自古希腊或古巴比伦的求平方根的方法。

求 x 的平方根。

假设 a 是 x 的平方根的近似值,让 b = x / a,那么 a 和 b 的平均数就比 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

测试一下

关于求平方根_第1张图片

附录

亚历山大的希罗

你可能感兴趣的:(数学算法elixir)