sandbox
Loading...
Searching...
No Matches
ieee_754_float.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_MATH_IEEE_754_FLOAT_HPP_
3#define LIBSBX_MATH_IEEE_754_FLOAT_HPP_
4
5#include <cmath>
6#include <cstdint>
7#include <bit>
8
9namespace sbx::math {
10
12
13 inline static constexpr auto bias = std::uint32_t{127};
14
15 std::float_t f;
16 std::uint32_t i;
17#if std::endian::native == std::endian::little
18 struct {
19 std::uint32_t mantissa: 23;
20 std::uint32_t exponent: 8;
21 std::uint32_t sign: 1;
22 };
23#else
24 struct {
25 std::uint32_t sign: 1;
26 std::uint32_t exponent: 8;
27 std::uint32_t mantissa: 23;
28 };
29#endif
30
31}; // ieee_754_float32
32
34
35 inline static constexpr auto bias = std::uint32_t{1023};
36
37 std::double_t f;
38 std::uint64_t i;
39#if std::endian::native == std::endian::little
40 struct {
41 std::uint64_t mantissa: 23;
42 std::uint64_t exponent: 8;
43 std::uint64_t sign: 1;
44 };
45#else
46 struct {
47 std::uint64_t sign: 1;
48 std::uint64_t exponent: 8;
49 std::uint64_t mantissa: 23;
50 };
51#endif
52
53}; // ieee_754_float64
54
55} // namespace sbx::math
56
57#endif // LIBSBX_MATH_IEEE_754_FLOAT_HPP_
Definition: ieee_754_float.hpp:11
Definition: ieee_754_float.hpp:33