3#ifndef pRC_CORE_VALUE_BFLOAT16_H
4#define pRC_CORE_VALUE_BFLOAT16_H
28 using Representation = std::uint16_t;
29 using Float32 =
float;
31 static_assert(
sizeof(Float32) == 2 *
sizeof(Representation));
59 auto src =
reinterpret_cast<std::uint16_t
const *
>(&
single);
61# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
70 auto lsb = (
src >> 16) & std::uint32_t(1);
73 mHalf =
static_cast<std::uint16_t
>(
src >> 16);
77 operator Float32()
const
81 auto dst =
reinterpret_cast<std::uint16_t *
>(&
single);
83#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
98#if !defined(__FINITE_MATH_ONLY__) || __FINITE_MATH_ONLY__ == 0
99 return mHalf == 0x7FC0;
105 template<
class X, If<IsInvocable<Add, BFloat16 &, X>> = 0>
111 template<
class X, If<IsInvocable<Sub, BFloat16 &, X>> = 0>
117 template<
class X, If<IsInvocable<Mul, BFloat16 &, X>> = 0>
123 template<
class X, If<IsInvocable<Div, BFloat16 &, X>> = 0>
131 return mHalf ==
rhs.mHalf;
136 return mHalf !=
rhs.mHalf;
141 return Float32(*
this);
150 Representation mHalf;
Custom Type representing a half-precision floating point number.
Definition bfloat16.hpp:26
BFloat16(Float32 const single)
Definition bfloat16.hpp:49
constexpr auto & operator*=(X &&rhs) &
Definition bfloat16.hpp:118
constexpr auto & operator-=(X &&rhs) &
Definition bfloat16.hpp:112
constexpr BFloat16 & operator=(BFloat16 const &) &=default
constexpr auto operator==(BFloat16 const rhs)
Definition bfloat16.hpp:129
constexpr auto operator!=(BFloat16 const rhs)
Definition bfloat16.hpp:134
constexpr BFloat16(BFloat16 &&)=default
constexpr auto & operator+=(X &&rhs) &
Definition bfloat16.hpp:106
static constexpr auto FromRepresentation(Representation const rep)
Definition bfloat16.hpp:34
constexpr auto operator-() const
Definition bfloat16.hpp:144
constexpr BFloat16()=default
constexpr auto & operator/=(X &&rhs) &
Definition bfloat16.hpp:124
constexpr BFloat16(BFloat16 const &)=default
constexpr auto isNaN() const
Definition bfloat16.hpp:96
constexpr BFloat16 & operator=(BFloat16 &&) &=default
auto operator+() const
Definition bfloat16.hpp:139
Definition cholesky.hpp:18
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
static constexpr auto isnan(BFloat16 const a)
Definition bfloat16.hpp:153
#define BEGIN_IGNORE_DIAGNOSTIC_GCC(warning)
Definition pragma.hpp:42
#define END_IGNORE_DIAGNOSTIC_GCC
Definition pragma.hpp:43