#pragma once #include #include "Constants.hpp" namespace Math { // I. Trigonometric functions. template T radians(T degrees) { return degrees * PI / 180.0f; } template T degrees(T radians) { return radians * 180.0f / PI; } // II. Mathematical functions. template T sigmoid(T x) { return 1 / (1 + std::pow(E, -x)); } // Returns the least nonnegative remainder of a % b. // Euclidian definition of modulo. template auto mod(A a, B b) -> decltype(a % b) { return (a % b + b) % b; } template R sign(T x) { return x < 0 ? -1 : 1; } // III. Utility functions. template Bool floats_equal(T a, T b, Real epsilon = 0.0001f) { return std::abs(a - b) < epsilon; } }