44#if defined(__CUDACC__) || defined(__HIPCC__)
45# define FZ_HOST_DEVICE __host__ __device__
47# define FZ_HOST_DEVICE
67 static_assert(std::is_integral<T>::value && std::is_signed<T>::value,
68 "fz::Negabinary<T>: T must be a signed integer type "
69 "(int8_t, int16_t, int32_t, or int64_t).");
72 using UInt =
typename std::make_unsigned<T>::type;
80 static constexpr UInt MASK =
81 static_cast<UInt
>(
static_cast<uint64_t
>(0xAAAAAAAAAAAAAAAAULL));
88 FZ_HOST_DEVICE
static constexpr UInt
encode(SInt n)
noexcept {
89 return (
static_cast<UInt
>(n) + MASK) ^ MASK;
100 FZ_HOST_DEVICE
static constexpr SInt
decode(UInt u)
noexcept {
101 return static_cast<SInt
>((u ^ MASK) - MASK);
108using Negabinary8 = Negabinary<int8_t>;
109using Negabinary16 = Negabinary<int16_t>;
110using Negabinary32 = Negabinary<int32_t>;
111using Negabinary64 = Negabinary<int64_t>;
Definition algorithms.h:48
Definition negabinary.h:66
static FZ_HOST_DEVICE constexpr SInt decode(UInt u) noexcept
Definition negabinary.h:100
static FZ_HOST_DEVICE constexpr UInt encode(SInt n) noexcept
Definition negabinary.h:88