defmodule Fraction do
@moduledoc """
Module to handle fractions
"""
@typedoc """
Rational numbers (num/den)
"""
@type t :: %Fraction{
num: integer,
den: non_neg_integer
}
defstruct num: 0, den: 1
@doc """
Function to convert a Fraction struct to negative
## Examples
iex> fraction = %Fraction{num: 2, den: 4}
iex> Fraction.negative(fraction)
%Fraction{num: -2, den: 4}
"""
@spec negative(t()) :: t()
def negative(%Fraction{} = fraction) do
%Fraction{num: -fraction.num, den: fraction.den}
end
@doc """
Function to convert Fraction struct to a floating point number
Returns floating point number.
## Examples
iex> fraction = %Fraction{num: 3, den: 6}
iex> Fraction.to_float(fraction)
0.5
"""
@spec to_float(t()) :: float()
def to_float(%Fraction{} = fraction) do
fraction.num / fraction.den
end
end