2#ifndef LIBSBX_MATH_HALF_HPP_
3#define LIBSBX_MATH_HALF_HPP_
7inline constexpr auto float_to_half(std::float_t value) -> std::uint16_t {
8 auto bits = std::bit_cast<std::uint32_t>(value);
10 auto sign = (bits >> 16) & 0x8000u;
11 auto exponent =
static_cast<std::int32_t
>((bits >> 23) & 0xFF) - 127 + 15;
12 auto mantissa = bits & 0x007FFFFFu;
15 return static_cast<std::uint16_t
>(sign);
19 return static_cast<std::uint16_t
>(sign | 0x7C00u);
22 return static_cast<std::uint16_t
>(sign | (
static_cast<std::uint32_t
>(exponent) << 10) | (mantissa >> 13));