Current section
Files
Jump to
Current section
Files
lib/math.ex
defmodule AntlUtilsElixir.Math do
@moduledoc """
Useful math functions
"""
@doc """
Arithmetic exponentiation
## Examples
iex> Math.pow(2, 0)
1
iex> Math.pow(2, 3)
8
iex> Math.pow(2, -1)
0.5
iex> Math.pow(-1, 0)
1
iex> Math.pow(-2, 2)
4
iex> Math.pow(-2, 3)
-8
"""
@spec pow(integer, integer) :: integer
def pow(n, k) when is_integer(n) and is_integer(k) and k < 0, do: 1 / pow(n, -1 * k, 1)
def pow(n, k) when is_integer(n) and is_integer(k), do: pow(n, k, 1)
defp pow(_, 0, acc), do: acc
defp pow(n, k, acc), do: pow(n, k - 1, n * acc)
end