3#ifndef pRC_CORE_VALUE_BFLOAT16_H
4#define pRC_CORE_VALUE_BFLOAT16_H
20 using Representation = std::uint16_t;
21 using Float32 =
float;
23 static_assert(
sizeof(Float32) == 2 *
sizeof(Representation));
51 auto src =
reinterpret_cast<std::uint16_t
const *
>(&
single);
53# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
62 auto lsb = (
src >> 16) & std::uint32_t(1);
65 mHalf =
static_cast<std::uint16_t
>(
src >> 16);
69 operator Float32()
const
73 auto dst =
reinterpret_cast<std::uint16_t *
>(&
single);
75#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
90#if !defined(__FINITE_MATH_ONLY__) || __FINITE_MATH_ONLY__ == 0
91 return mHalf == 0x7FC0;
97 template<
class X, If<IsInvocable<Add, BFloat16 &, X>> = 0>
103 template<
class X, If<IsInvocable<Sub, BFloat16 &, X>> = 0>
109 template<
class X, If<IsInvocable<Mul, BFloat16 &, X>> = 0>
115 template<
class X, If<IsInvocable<Div, BFloat16 &, X>> = 0>
123 return mHalf ==
rhs.mHalf;
128 return mHalf !=
rhs.mHalf;
133 return Float32(*
this);
142 Representation mHalf;
Definition bfloat16.hpp:18
BFloat16(Float32 const single)
Definition bfloat16.hpp:41
constexpr auto & operator*=(X &&rhs) &
Definition bfloat16.hpp:110
constexpr auto & operator-=(X &&rhs) &
Definition bfloat16.hpp:104
constexpr BFloat16 & operator=(BFloat16 const &) &=default
constexpr auto operator==(BFloat16 const rhs)
Definition bfloat16.hpp:121
constexpr auto operator!=(BFloat16 const rhs)
Definition bfloat16.hpp:126
constexpr BFloat16(BFloat16 &&)=default
constexpr auto & operator+=(X &&rhs) &
Definition bfloat16.hpp:98
static constexpr auto FromRepresentation(Representation const rep)
Definition bfloat16.hpp:26
constexpr auto operator-() const
Definition bfloat16.hpp:136
constexpr BFloat16()=default
constexpr auto & operator/=(X &&rhs) &
Definition bfloat16.hpp:116
constexpr BFloat16(BFloat16 const &)=default
constexpr auto isNaN() const
Definition bfloat16.hpp:88
constexpr BFloat16 & operator=(BFloat16 &&) &=default
auto operator+() const
Definition bfloat16.hpp:131
Definition cholesky.hpp:18
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
static constexpr auto isnan(BFloat16 const a)
Definition bfloat16.hpp:145
#define BEGIN_IGNORE_DIAGNOSTIC_GCC(warning)
Definition pragma.hpp:42
#define END_IGNORE_DIAGNOSTIC_GCC
Definition pragma.hpp:43