15 static constexpr auto MaxLong =
static_cast<double>(std::numeric_limits<std::int64_t>::max());
17#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
25 template <
class T, std::size_t... N>
26 constexpr T bswap_impl(T i, std::index_sequence<N...>)
28 return (((i >> N * CHAR_BIT &
static_cast<std::uint8_t
>(-1)) << (
sizeof(T) - 1 - N) * CHAR_BIT) | ...);
30 template <
class T,
class U = std::make_
unsigned_t<T>>
31 constexpr T
bswap(T i)
33 return std::bit_cast<T>(bswap_impl<U>(std::bit_cast<U>(i), std::make_index_sequence<
sizeof(T)> {}));
46 const auto mant =
static_cast<std::int64_t
>(
MaxLong * std::frexp(n, &exp));
49 .exponent = std::bit_cast<int32_t>(
bswap(exp)),
50 .mantissa =
bswap(mant)