Current section
Files
Jump to
Current section
Files
src/gcalc.erl
-module(gcalc).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([pow/2, factorial/1, abs/1, sqrt/1, pow2/1, pow10/1, cbrt/1, gcd/2, fma/3]).
-export_type([math_error/0]).
-type math_error() :: division_by_zero |
value_out_of_range |
unsupported_operation.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 27).
-spec pow_iter(float(), float(), float()) -> float().
pow_iter(Base, Power, Accumulator) ->
case Power of
+0.0 ->
Accumulator;
_ ->
pow_iter(Base, Power - 1.0, Base * Accumulator)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 22).
-spec pow(float(), float()) -> float().
pow(Base, Power) ->
pow_iter(Base, Power, 1.0).
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 48).
-spec factorial_iter(float(), float()) -> float().
factorial_iter(N, Accumulator) ->
case N of
+0.0 ->
Accumulator;
_ ->
factorial_iter(N - 1.0, N * Accumulator)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 40).
-spec factorial(float()) -> {ok, float()} | {error, math_error()}.
factorial(N) ->
case N < +0.0 of
true ->
{error, unsupported_operation};
false ->
{ok, factorial_iter(N, 1.0)}
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 58).
-spec abs(float()) -> float().
abs(N) ->
case N < +0.0 of
true ->
+0.0 - N;
false ->
N
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 86).
-spec sqrt_iter(float(), float(), float()) -> float().
sqrt_iter(X0, X1, N) ->
case abs(X1 - X0) < 0.0001 of
true ->
X1;
false ->
X0@1 = X1,
X1@1 = (X0@1 + (case X0@1 of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> N / Gleam@denominator
end)) / 2.0,
sqrt_iter(X0@1, X1@1, N)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 78).
-spec sqrt(float()) -> {ok, float()} | {error, math_error()}.
sqrt(N) ->
case N < +0.0 of
true ->
{error, value_out_of_range};
false ->
{ok, sqrt_iter(+0.0, 1.0, N)}
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 108).
-spec pow2_iter(float(), float()) -> float().
pow2_iter(N, Accumulator) ->
case N of
+0.0 ->
Accumulator;
_ ->
pow2_iter(N - 1.0, 2.0 * Accumulator)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 100).
-spec pow2(float()) -> {ok, float()} | {error, math_error()}.
pow2(N) ->
case N < +0.0 of
true ->
{error, value_out_of_range};
false ->
{ok, pow2_iter(N, 1.0)}
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 130).
-spec pow10_iter(float(), float()) -> float().
pow10_iter(N, Accumulator) ->
case N of
+0.0 ->
Accumulator;
_ ->
pow10_iter(N - 1.0, 10.0 * Accumulator)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 122).
-spec pow10(float()) -> {ok, float()} | {error, math_error()}.
pow10(N) ->
case N < +0.0 of
true ->
{error, value_out_of_range};
false ->
{ok, pow10_iter(N, 1.0)}
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 156).
-spec cbrt_iter(float(), float(), float()) -> float().
cbrt_iter(X0, X1, N) ->
case abs(X1 - X0) < 0.0001 of
true ->
X1;
false ->
X0@1 = X1,
X1@1 = (X0@1 + (case (X0@1 * X0@1) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> N / Gleam@denominator
end)) / 2.0,
cbrt_iter(X0@1, X1@1, N)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 148).
-spec cbrt(float()) -> {ok, float()} | {error, math_error()}.
cbrt(N) ->
case N < +0.0 of
true ->
{error, value_out_of_range};
false ->
{ok, cbrt_iter(+0.0, 1.0, N)}
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 183).
-spec gcd_iter(integer(), integer()) -> integer().
gcd_iter(A, B) ->
case B =:= 0 of
true ->
A;
false ->
Temp = B,
B@1 = case B of
0 -> 0;
Gleam@denominator -> A rem Gleam@denominator
end,
A@1 = Temp,
gcd_iter(A@1, B@1)
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 171).
-spec gcd(integer(), integer()) -> integer().
gcd(A, B) ->
case A =:= B of
true ->
A;
false ->
case A > B of
true ->
gcd_iter(A, B);
false ->
gcd_iter(B, A)
end
end.
-file("/Users/korben/Developer/Gleam/gcalc/src/gcalc.gleam", 207).
-spec fma(float(), float(), float()) -> float().
fma(X, Y, Z) ->
(X * Y) + Z.