tutorial - elixir también se buscó
¿Cómo elevo un número a una potencia en Elixir? (4)
Use el módulo de matemáticas Erlang:
:math.pow(2,3) #=> 8.0
Si quieres un entero:
:math.pow(2,3) |> round #=> 8
¿Cómo puedo calcular un número con un exponente en Elixir?
Por ejemplo, 2 3 devolvería 8.
Aquí hay una implementación optimizada de la función de encendido:
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)
Erlang''s
:math.pow
tiene algunas limitaciones, por ejemplo, no permitirá poderes enteros realmente altos:
iex(10)> :math.pow(2, 10000)
** (ArithmeticError) bad argument in arithmetic expression
Puede volver a implementar fácilmente un algoritmo rápido para potencias informáticas que funcionará con los enteros arbitrariamente grandes proporcionados por el tiempo de ejecución:
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...
Esto funciona, será genial cuando aprendo lo suficiente como para saber exactamente por qué funciona, probablemente algo que ver con eval debajo de las cubiertas:
defmodule Example do
require Integer
def do_it(list) do
list
|> Enum.reject(&Integer.is_odd(&1))
|> Enum.map(&(:math.pow(&1,3)))
end
end