-module(util). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([fmod/2, wrap_to_range/3, pi/0, degrees_to_radians/1, radians_to_degrees/1, sin/1, cos/1, atan/1, atan2/2]). -spec fmod(float(), float()) -> float(). fmod(X, Y) -> math:fmod(X, Y). -spec wrap_to_range(float(), float(), float()) -> float(). wrap_to_range(X, Min, Max) -> V = math:fmod(X - Min, Max - Min) + Min, case V =< +0.0 of true -> V + Max; false -> V end. -spec pi() -> float(). pi() -> math:pi(). -spec degrees_to_radians(float()) -> float(). degrees_to_radians(Degrees) -> (Degrees / 180.0) * math:pi(). -spec radians_to_degrees(float()) -> float(). radians_to_degrees(Radians) -> case math:pi() of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> Radians * 180.0 / Gleam@denominator end. -spec sin(float()) -> float(). sin(X) -> math:sin(X). -spec cos(float()) -> float(). cos(X) -> math:cos(X). -spec atan(float()) -> float(). atan(X) -> math:atan(X). -spec atan2(float(), float()) -> float(). atan2(Y, X) -> math:atan2(Y, X).