3#ifndef pRC_CORE_VALUE_BFLOAT16_H
4#define pRC_CORE_VALUE_BFLOAT16_H
20 using Representation = std::uint16_t;
21 using Float32 = float;
49 auto src =
reinterpret_cast<std::uint16_t
const *
>(&single);
51 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
59 std::memcpy(&src, &single,
sizeof(src));
60 auto lsb = (src >> 16) & std::uint32_t(1);
61 auto bias = 0x7FFF + lsb;
63 mHalf =
static_cast<std::uint16_t
>(src >> 16);
67 operator Float32()
const
71 auto dst =
reinterpret_cast<std::uint16_t *
>(&single);
73#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
88#if !defined(__FINITE_MATH_ONLY__) || __FINITE_MATH_ONLY__ == 0
89 return mHalf == 0x7FC0;
99 return *
this = *
this + forward<X>(rhs);
106 return *
this = *
this - forward<X>(rhs);
113 return *
this = *
this * forward<X>(rhs);
120 return *
this = *
this / forward<X>(rhs);
125 return mHalf == rhs.mHalf;
130 return mHalf != rhs.mHalf;
135 return Float32(*
this);
144 Representation mHalf;
Definition bfloat16.hpp:18
BFloat16(Float32 const single)
Definition bfloat16.hpp:39
constexpr BFloat16 & operator=(BFloat16 const &) &=default
constexpr auto & operator/=(X &&rhs) &
Definition bfloat16.hpp:118
constexpr auto operator==(BFloat16 const rhs)
Definition bfloat16.hpp:123
constexpr auto operator!=(BFloat16 const rhs)
Definition bfloat16.hpp:128
constexpr BFloat16(BFloat16 &&)=default
static constexpr auto FromRepresentation(Representation const rep)
Definition bfloat16.hpp:24
constexpr auto operator-() const
Definition bfloat16.hpp:138
constexpr auto & operator+=(X &&rhs) &
Definition bfloat16.hpp:97
constexpr BFloat16()=default
constexpr BFloat16(BFloat16 const &)=default
constexpr auto isNaN() const
Definition bfloat16.hpp:86
constexpr auto & operator-=(X &&rhs) &
Definition bfloat16.hpp:104
constexpr auto & operator*=(X &&rhs) &
Definition bfloat16.hpp:111
constexpr BFloat16 & operator=(BFloat16 &&) &=default
auto operator+() const
Definition bfloat16.hpp:133
Definition concepts.hpp:31
Definition cholesky.hpp:10
static constexpr auto isnan(BFloat16 const a)
Definition bfloat16.hpp:147
#define BEGIN_IGNORE_DIAGNOSTIC_GCC(warning)
Definition pragma.hpp:42
#define END_IGNORE_DIAGNOSTIC_GCC
Definition pragma.hpp:43