defmodule Growth.Calc.BMI do @moduledoc """ Calculate body mass index """ @inch_to_centimeter 2.54 @pound_to_kilogram 0.453592 @doc """ Calculate the body mass index for a given weight and height. Measurements taken in english unit (pounds and inches) are converted to their metric equivalents (kilograms and centimeters). """ @spec calculate(:english | :metric, number, number) :: number def calculate(:english, weight, height) do metric_weight = pound_to_kilogram(weight) metric_height = inches_to_centimeters(height) calculate(:metric, metric_weight, metric_height) end def calculate(:metric, weight, height) do weight / :math.pow(height / 100.0, 2) end defp inches_to_centimeters(height), do: height * @inch_to_centimeter defp pound_to_kilogram(weight), do: weight * @pound_to_kilogram end