Packages

Elixir GenServer and GenStage runtime metrics.

Current section

Files

Jump to
gen_metrics lib utils math.ex
Raw

lib/utils/math.ex

defmodule GenMetrics.Utils.Math do
@moduledoc false
# For runtime performance reasons this library requires
# the input data length to be provided, not calculated.
def sum(data), do: Enum.sum data
def sort(data), do: Enum.sort data
def max([]), do: 0
def max(data), do: Enum.max data
def min([]), do: 0
def min(data), do: Enum.min data
def mean([], _), do: 0
def mean(data, length), do: round(sum(data) / length)
def variance([], _), do: 0
def variance(data, length) do
mean = mean(data, length)
round(sum(Enum.map(data, &((mean - &1) * (mean - &1)))) / length)
end
def stdev([], _), do: 0
def stdev(data, length) do
round(:math.sqrt(variance(data, length)))
end
def range([]), do: 0
def range(data) do
sorted = sort(data)
List.last(sorted) - List.first(sorted)
end
end