如何在Elixir中计算具有指数的数字?
例如,2 3将返回8。
Answers:
Erlang:math.pow
有一些限制,例如,它不允许真正高的整数指数:
iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression
您可以轻松地重新实现用于计算指数的快速算法,该算法将与运行时提供的任意大整数一起工作:
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...
如果以2为底并且幂是整数,则可以使用函数进行左移Bitwise.bsl
。例如,可以使用以下公式计算2 3:
> Bitwise.bsl(1, 3)
8
:math.pow
为Erlang的当前实现会很好。github.com/erlang/otp