web-dev-qa-db-fra.com

Comment puis-je augmenter un nombre à un pouvoir dans Elixir?

Comment puis-je calculer un nombre avec un exposant dans Elixir?

Par exemple, 23 retournerait 8.

61
Nathan Long

Utilisez le Erlang: module mathématique

:math.pow(2,3) #=> 8.0

Si vous voulez un entier:

:math.pow(2,3) |> round #=> 8
69
Nathan Long

:math.pow D'Erlang a quelques limitations, par exemple, il n'autorisera pas de puissances entières vraiment élevées:

iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression

Vous pouvez facilement réimplémenter un algorithme rapide de calcul des puissances qui fonctionnera avec les entiers arbitrairement grands fournis par le runtime:

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...
59
Paweł Obrok

Voici une implémentation optimisée de la fonction de puissance:

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)
12
markusheilig