我如何在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)