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)

Declared at: include/traits/posittraits.hpp:189

Parameters

T pars

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)

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)

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)

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)

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)

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()

Description

maxexponent that can be constructed

Declared at: include/traits/posittraits.hpp:175

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)

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)

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)

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>