Подтвердить что ты не робот

Как я могу поднять число до власти в Elixir?

Как я могу вычислить число с показателем в Elixir?

Например, 2 3 вернет 8.

4b9b3361

Ответ 2

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...

Ответ 3

Вот оптимизированная реализация функции мощности для хвостового вызова:

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)