1

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

求 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

附录

亚历山大的希罗


Ljzn
399 声望102 粉丝

网络安全;函数式编程;数字货币;人工智能