#pragma once template constexpr T sqrt(const T n) noexcept; template <> constexpr float sqrt(const float n) noexcept { return __builtin_sqrtf(n); } template constexpr T cos(const T n) noexcept; template <> constexpr float cos(const float n) noexcept { return __builtin_cosf(n); } template constexpr T sin(const T n) noexcept; template <> constexpr float sin(const float n) noexcept { return __builtin_sinf(n); } template constexpr T abs(const T n) noexcept; template <> constexpr float abs(const float n) noexcept { return __builtin_fabsf(n); } constexpr float pi = 3.141592653589793; template inline constexpr T max(const T a, const T b) noexcept { return (a > b) ? a : b; } template inline constexpr T min(const T a, const T b) noexcept { return (a < b) ? a : b; }