struct PositTrait
Declaration
template <class T,
int totalbits,
int esbits,
posit::PositSpec positspec_>
struct PositTrait { /* full declaration omitted */ };Description
Trait used to describe the families of posit numbers The trait provides constants for constructing the posit representation and several constants of the posit expressed in the signed integer. In addition some fundamental constexpr functions are provided
Declared at: include/traits/posittraits.hpp:109
Templates
- T
- the signed integer holding the posit
- int totalbits
- the number of bits of the posit less or equal then the bitsize of T. Data will be RIGHT aligned
- int esbits
- the maximum number of bits for the exponent
- posit::PositSpec positspec_
- the enumeration that controls the special numbers in a Posit.
Member Variables
- public static const posit::PositSpec positspec = positspec_
- unsigned version of T
- public static const bool withnan = PositSpecTrait<positspec_>::withnan
- public static const bool withinf = PositSpecTrait<positspec_>::withinf
- public static const bool withsignedinf = PositSpecTrait<positspec_>::withsignedinf
- public static const posit::PositTrait::POSIT_UTYPE POSIT_MAXREGIME_BITS = totalbits - 1
- @ {
- public static const posit::PositTrait::POSIT_UTYPE POSIT_HOLDER_SIZE = sizeof(type-parameter-0-0) * 8
- maximum number of regime bits (all except sign)
- public static const posit::PositTrait::POSIT_UTYPE POSIT_SIZE = totalbits
- public static const posit::PositTrait::POSIT_UTYPE POSIT_ESP_SIZE = esbits
- public static const posit::PositTrait::POSIT_UTYPE POSIT_EXTRA_BITS = POSIT_HOLDER_SIZE - totalbits
- public static const posit::PositTrait::POSIT_UTYPE POSIT_ONEHELPER = 1
- @ {
- public static const posit::PositTrait::POSIT_UTYPE POSIT_INVERTBIT = (POSIT_ONEHELPER << (totalbits - 2))
- public static const posit::PositTrait::POSIT_UTYPE POSIT_MSB = POSIT_ONEHELPER << (totalbits - 1)
- bit for 1/x
- public static const posit::PositTrait::POSIT_UTYPE POSIT_SIGNBIT = POSIT_MSB
- most significant bit of posit: (0[*] 1 0[totalbits-1])
- public static const posit::PositTrait::POSIT_UTYPE POSIT_HOLDER_MSB = POSIT_ONEHELPER << (POSIT_HOLDER_SIZE - 1)
- public static const posit::PositTrait::POSIT_STYPE POSIT_REG_SCALE = 1 << esbits
- most significant bit of holding type: (1 0[*])
- public static const posit::PositTrait::POSIT_UTYPE POSIT_ESP_MASK = (POSIT_ONEHELPER << esbits) - 1
- @ {
- public static const posit::PositTrait::POSIT_UTYPE POSIT_MASK = ((POSIT_MSB - 1) | (POSIT_MSB))
- mask for exponent: (0[*] 1[esbits])
- public static const posit::PositTrait::POSIT_STYPE POSIT_MASK_NOSIGN = (POSIT_MASK >> 1)
- all posit bits to one on the right: (0[*] 1[totalbits])
- public static const posit::PositTrait::POSIT_UTYPE POSIT_SIGNMASK = ~POSIT_MASK_NOSIGN
- (0[*] 1[totalbits-1])
- public static const posit::PositTrait::POSIT_UTYPE POSIT_TWICEMASK = (POSIT_INVERTBIT | (POSIT_ONEHELPER << totalbits - 3)) << 1
- mask for bits of signed part (1[*] 0[totalbits-1]) @ }
- public static const posit::PositTrait::POSIT_STYPE _POSIT_TOP = (type-parameter-0-0)POSIT_HOLDER_MSB
- @ {
- public static const posit::PositTrait::POSIT_STYPE _POSIT_TOPLEFT = (type-parameter-0-0)(POSIT_SIGNMASK + 1)
- 1 0[*]
- public static const posit::PositTrait::POSIT_STYPE _POSIT_TOPRIGHT = -_POSIT_TOPLEFT
- 1[*] 0[totlabits-2] 1
- public static const posit::PositTrait::POSIT_STYPE POSIT_INF = withinf ? _POSIT_TOP : 0
- 0[*] 1[totalbits-1]
- public static const posit::PositTrait::POSIT_STYPE POSIT_PINF = withsignedinf ? _POSIT_TOPRIGHT : POSIT_INF
- right of top if present
- public static const posit::PositTrait::POSIT_STYPE POSIT_NINF = withsignedinf ? _POSIT_TOPLEFT : 0
- right of top if present
- public static const posit::PositTrait::POSIT_STYPE POSIT_NAN = withnan ? _POSIT_TOP : 0
- top or left if present
- public static const posit::PositTrait::POSIT_STYPE POSIT_ONE = POSIT_INVERTBIT
- infinity in withnan=false otherwise it is truly nan
- public static const posit::PositTrait::POSIT_STYPE POSIT_MONE = -POSIT_ONE
- invert bit IS positive one
- public static const posit::PositTrait::POSIT_STYPE POSIT_TWO = (POSIT_INVERTBIT | (POSIT_INVERTBIT >> (1 + esbits)))
- trivially minus one
- public static const posit::PositTrait::POSIT_STYPE POSIT_HALF = -(type-parameter-0-0)(POSIT_TWO ^ POSIT_SIGNMASK)
- 2.0
- public static const posit::PositTrait::POSIT_STYPE POSIT_MAXPOS = _POSIT_TOPRIGHT - (withsignedinf ? 1 : 0)
- 0.5
- public static const posit::PositTrait::POSIT_STYPE POSIT_MINNEG = _POSIT_TOPLEFT - (withsignedinf ? 1 : 0)
- max value below Infinity: 1[holder-total] 1 0[total-1]
- public static const posit::PositTrait::POSIT_STYPE POSIT_AFTER0 = 1
- min value above -Infinity // 0[holder-total] 0 1[total-1]
- public static const posit::PositTrait::POSIT_STYPE POSIT_BEFORE0 = -POSIT_AFTER0
- right to 0: minimal number above zero
Method Overview
- public static constexpr std::pair<int, int> decode_posit_rs(T pars)
- public static constexpr posit::PositTrait::POSIT_STYPE fast_half(posit::PositTrait::POSIT_STYPE x)
- public static constexpr posit::PositTrait::POSIT_STYPE fast_one_minus_ur(posit::PositTrait::POSIT_STYPE v)
- public static constexpr posit::PositTrait::POSIT_STYPE fast_twice(posit::PositTrait::POSIT_STYPE x)
- public static constexpr bool is_sphere_range(posit::PositTrait::POSIT_STYPE v)
- public static constexpr bool is_unitary_range(posit::PositTrait::POSIT_STYPE v)
- public static constexpr posit::PositTrait::exponenttype join_reg_exp(posit::PositTrait::POSIT_STYPE reg, posit::PositTrait::POSIT_UTYPE exp)
- public static constexpr posit::PositTrait::exponenttype maxexponent()
- public static constexpr posit::PositTrait::exponenttype minexponent()
- public static constexpr bool posvalue_has_only_regime(posit::PositTrait::POSIT_STYPE x)
- public static constexpr posit::PositTrait::POSIT_STYPE reciprocate(posit::PositTrait::POSIT_STYPE x)
- public static constexpr std::pair<POSIT_STYPE, POSIT_UTYPE> split_reg_exp(posit::PositTrait::exponenttype eexponent)
Methods
¶static constexpr std::pair<int, int>
decode_posit_rs(T pars)
static constexpr std::pair<int, int>
decode_posit_rs(T pars)Declared at: include/traits/posittraits.hpp:189
Parameters
- T pars
¶static constexpr posit::PositTrait::POSIT_STYPE
fast_half(posit::PositTrait::POSIT_STYPE x)
static constexpr posit::PositTrait::POSIT_STYPE
fast_half(posit::PositTrait::POSIT_STYPE x)Description
fast half for E=0
Declared at: include/traits/posittraits.hpp:271
Parameters
- posit::PositTrait::POSIT_STYPE x
¶static constexpr posit::PositTrait::POSIT_STYPE
fast_one_minus_ur(
posit::PositTrait::POSIT_STYPE v)
static constexpr posit::PositTrait::POSIT_STYPE
fast_one_minus_ur(
posit::PositTrait::POSIT_STYPE v)Description
Complement of number in unitary range
Declared at: include/traits/posittraits.hpp:291
Parameters
- posit::PositTrait::POSIT_STYPE v
¶static constexpr posit::PositTrait::POSIT_STYPE
fast_twice(posit::PositTrait::POSIT_STYPE x)
static constexpr posit::PositTrait::POSIT_STYPE
fast_twice(posit::PositTrait::POSIT_STYPE x)Description
fast twice for E=0
Declared at: include/traits/posittraits.hpp:251
Parameters
- posit::PositTrait::POSIT_STYPE x
¶static constexpr bool is_sphere_range(
posit::PositTrait::POSIT_STYPE v)
static constexpr bool is_sphere_range(
posit::PositTrait::POSIT_STYPE v)Description
returns true if in the sphere interval [-1,1]
Declared at: include/traits/posittraits.hpp:303
Parameters
- posit::PositTrait::POSIT_STYPE v
¶static constexpr bool is_unitary_range(
posit::PositTrait::POSIT_STYPE v)
static constexpr bool is_unitary_range(
posit::PositTrait::POSIT_STYPE v)Description
returns true if in the unit interval [0,1]
Declared at: include/traits/posittraits.hpp:298
Parameters
- posit::PositTrait::POSIT_STYPE v
¶static constexpr posit::PositTrait::exponenttype
join_reg_exp(posit::PositTrait::POSIT_STYPE reg,
posit::PositTrait::POSIT_UTYPE exp)
static constexpr posit::PositTrait::exponenttype
join_reg_exp(posit::PositTrait::POSIT_STYPE reg,
posit::PositTrait::POSIT_UTYPE exp)Description
Merges regime and exponent
Declared at: include/traits/posittraits.hpp:241
Parameters
- posit::PositTrait::POSIT_STYPE reg
- posit::PositTrait::POSIT_UTYPE exp
¶static constexpr posit::PositTrait::exponenttype
maxexponent()
static constexpr posit::PositTrait::exponenttype
maxexponent()Description
maxexponent that can be constructed
Declared at: include/traits/posittraits.hpp:175
¶static constexpr posit::PositTrait::exponenttype
minexponent()
static constexpr posit::PositTrait::exponenttype
minexponent()Description
minimumexponent
Declared at: include/traits/posittraits.hpp:177
¶static constexpr bool posvalue_has_only_regime(
posit::PositTrait::POSIT_STYPE x)
static constexpr bool posvalue_has_only_regime(
posit::PositTrait::POSIT_STYPE x)Declared at: include/traits/posittraits.hpp:179
Parameters
- posit::PositTrait::POSIT_STYPE x
¶static constexpr posit::PositTrait::POSIT_STYPE
reciprocate(posit::PositTrait::POSIT_STYPE x)
static constexpr posit::PositTrait::POSIT_STYPE
reciprocate(posit::PositTrait::POSIT_STYPE x)Description
Computes the inverted position of the givem posit using a binary property of the wheel. Correct for non special values. Requires check for: zero, nan, and the adjacent values if signed infinities
Declared at: include/traits/posittraits.hpp:217
Parameters
- posit::PositTrait::POSIT_STYPE x
Returns
1/x for most values except:
¶static constexpr std::pair<POSIT_STYPE,
POSIT_UTYPE>
split_reg_exp(
posit::PositTrait::exponenttype eexponent)
static constexpr std::pair<POSIT_STYPE,
POSIT_UTYPE>
split_reg_exp(
posit::PositTrait::exponenttype eexponent)Description
Given a full exponent decomposes it into regime part and base exponent
Declared at: include/traits/posittraits.hpp:205
Parameters
- posit::PositTrait::exponenttype eexponent
Returns
constexpr std::pair <POSIT _STYPE,POSIT_UTYPE>