42#ifndef UFO_NUMERIC_MATH_HPP
43#define UFO_NUMERIC_MATH_HPP
70[[nodiscard]]
constexpr int sign(T val)
noexcept
72 if constexpr (std::is_unsigned_v<T>) {
75 return (T(0) < val) - (val < T(0));
85template <std::
floating_po
int T>
86[[nodiscard]]
constexpr T
radians(T deg)
noexcept
88 return deg * std::numbers::pi_v<T> / T(180);
97template <std::
floating_po
int T>
98[[nodiscard]]
constexpr T
degrees(T rad)
noexcept
100 return rad * T(180) / std::numbers::pi_v<T>;
111 requires std::is_arithmetic_v<T>
112[[nodiscard]]
constexpr T
ipow(T base,
int exp)
noexcept
114 T result = std::ranges::fold_left(std::views::repeat(base, std::abs(exp)), T(1),
115 std::multiplies<>());
116 return 0 <= exp ? result : T(1) / result;
128template <std::
floating_po
int T>
131 assert(T(0) <= probability && T(1) >= probability);
132 if (T(0) >= probability) {
133 return -std::numeric_limits<T>::infinity();
135 if (T(1) <= probability) {
136 return std::numeric_limits<T>::infinity();
138 return std::log(probability / (T(1) - probability));
147template <std::
floating_po
int T>
150 return T(1) / (T(1) + std::exp(-logit));
constexpr T radians(T deg) noexcept
Converts degrees to radians.
constexpr int sign(T val) noexcept
Returns the sign of a value.
constexpr T degrees(T rad) noexcept
Converts radians to degrees.
constexpr T probabilityToLogit(T probability)
Converts probability to logit value.
constexpr T ipow(T base, int exp) noexcept
Computes integer power of a base.
constexpr T logitToProbability(T logit)
Converts logit value to probability.
All vision-related classes and functions.