Nat*_*ong 70
:math.pow(2,3) #=> 8.0
Run Code Online (Sandbox Code Playgroud)
如果你想要一个整数:
:math.pow(2,3) |> round #=> 8
Run Code Online (Sandbox Code Playgroud)
Paw*_*rok 59
Erlang :math.pow有一些限制,例如它不允许真正的高整数幂:
iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression
Run Code Online (Sandbox Code Playgroud)
您可以轻松地重新实现一个快速算法,用于计算与运行时提供的任意大整数一起使用的功能:
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...
Run Code Online (Sandbox Code Playgroud)
Nat*_*han 20
**/2从 Elixir 1.13 开始**可用。
> 2 ** 3
8
Run Code Online (Sandbox Code Playgroud)
注意:如果指数小于 0,则返回浮点数。
小智 12
这是一个尾调用优化的电源功能实现:
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)
Run Code Online (Sandbox Code Playgroud)
如果基数为 2 并且幂为整数,则可以使用函数 进行左移Bitwise.bsl。例如,2 3可以用以下公式计算:
> Bitwise.bsl(1, 3)
8
Run Code Online (Sandbox Code Playgroud)