我如何在Elixir中提高一个数字?
如何计算药剂指数的数字?
例如,2 3会返回8。
使用Erlang:math模块
:math.pow(2,3) #=> 8.0
如果你想要一个整数:
:math.pow(2,3) |> round #=> 8
Erlang的:math.pow
有一些限制,例如它不允许真正的高整数权力:
iex(10)> :math.pow(2, 10000) ** (ArithmeticError) bad argument in arithmetic expression
您可以轻松地重新实现一个计算能力的快速algorithm,它将与运行时提供的任意大的整数一起工作:
defmodule Pow do require Integer def pow(_, 0), do: 1 def pow(x, n) when Integer.is_odd(n), do: x * pow(x, n - 1) def pow(x, n) do result = pow(x, div(n, 2)) result * result end end iex(9)> Pow.pow(2, 10000) 19950631168807583848837421626835850838234968318861924548520089498529438830...
这里是一个尾部调用优化执行的function函数:
def pow(n, k), do: pow(n, k, 1) defp pow(_, 0, acc), do: acc defp pow(n, k, acc), do: pow(n, k - 1, n * acc)