24 #ifndef PPL_Float_inlines_hh
25 #define PPL_Float_inlines_hh 1
29 #include "assertions.hh"
91 word =
static_cast<uint16_t
>(mpz_get_ui(mantissa)
97 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
158 word =
static_cast<uint32_t
>(mpz_get_ui(mantissa)
164 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
246 #if ULONG_MAX == 0xffffffffUL
247 lsp = mpz_get_ui(mantissa);
248 mpz_tdiv_q_2exp(mantissa, mantissa, 32);
249 m = mpz_get_ui(mantissa);
251 m = mpz_get_ui(mantissa);
260 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
321 word =
static_cast<uint32_t
>(mpz_get_ui(mantissa)
327 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
337 if (a == MSP_NEG_INF) {
410 mpz_t mantissa,
int exponent) {
411 #if ULONG_MAX == 0xffffffffUL
412 mpz_export(&
lsp, 0, -1,
sizeof(
lsp), 0, 0, mantissa);
414 lsp = mpz_get_ui(mantissa);
418 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
419 msp |=
static_cast<uint32_t
>(exponent_repr);
500 mpz_export(parts, 0, -1,
sizeof(parts[0]), 0, 0, mantissa);
508 PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 <<
EXPONENT_BITS));
522 template <
typename FP_Interval_Type>
529 lf_store[var.
id()] = lf;
534 #if PPL_SUPPORTED_FLOAT
536 Float<float>::Float() {
540 Float<float>::Float(
float v) {
550 #if PPL_SUPPORTED_DOUBLE
552 Float<double>::Float() {
556 Float<double>::Float(
double v) {
566 #if PPL_SUPPORTED_LONG_DOUBLE
568 Float<long double>::Float() {
572 Float<long double>::Float(
long double v) {
584 #endif // !defined(PPL_Float_inlines_hh)
static const uint32_t POS_ZERO
static const uint64_t LSP_DMAX
static const unsigned int MANTISSA_BITS
static const uint32_t MSP_NEG_INF
static const uint32_t NEG_ZERO
void affine_form_image(std::map< dimension_type, Linear_Form< FP_Interval_Type > > &lf_store, const Variable var, const Linear_Form< FP_Interval_Type > &lf)
static const uint16_t WRD_MAX
void set_max(bool negative)
static const uint64_t MSP_POS_ZERO
size_t dimension_type
An unsigned integral type for representing space dimensions.
static const unsigned int MANTISSA_BITS
void set_max(bool negative)
void discard_occurrences(std::map< dimension_type, Linear_Form< FP_Interval_Type > > &lf_store, Variable var)
static const uint32_t POS_ZERO
static const uint32_t LSP_INF
static const uint32_t NEG_INF
static const int EXPONENT_BIAS
static const uint16_t POS_INF
static const uint32_t LSP_MAX
void build(bool negative, mpz_t mantissa, int exponent)
static const uint64_t MSP_SGN_MASK
static const uint32_t WRD_MAX
static const uint64_t LSP_NMAX
static const int EXPONENT_BIAS
static const uint32_t MSP_NEG_ZERO
static const uint64_t LSP_INF
unsigned int msb_position(unsigned long long v)
If v is nonzero, returns the position of the most significant bit in a.
static const uint16_t POS_ZERO
static const unsigned int EXPONENT_BITS
dimension_type id() const
Returns the index of the Cartesian axis associated to the variable.
A dimension of the vector space.
static const uint16_t SGN_MASK
static const uint64_t MSP_POS_INF
static const uint64_t LSP_ZERO
bool is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2)
static const uint16_t NEG_ZERO
static const uint32_t POS_INF
void build(bool negative, mpz_t mantissa, int exponent)
#define sizeof_to_bits(size)
static const uint32_t MSP_POS_INF
static const uint32_t MSP_NEG_ZERO
static const uint32_t MSP_POS_ZERO
static const unsigned int EXPONENT_BITS
static const uint32_t MSP_NEG_INF
static const uint64_t MSP_MAX
void build(bool negative, mpz_t mantissa, int exponent)
static const uint32_t NEG_INF
static const uint64_t LSP_MAX
static const uint32_t MSP_MAX
static const uint32_t LSP_ZERO
static const unsigned int EXPONENT_BITS
static const uint32_t SGN_MASK
static const unsigned int MANTISSA_BITS
static const uint32_t SGN_MASK
static const int EXPONENT_BIAS
void build(bool negative, mpz_t mantissa, int exponent)
static const int EXPONENT_BIAS
void set_max(bool negative)
static const uint32_t MSP_MAX
static const uint32_t POS_INF
static const unsigned int EXPONENT_BITS
static const uint64_t MSP_NEG_ZERO
The entire library is confined to this namespace.
static const unsigned int EXPONENT_BITS
static const uint64_t MSP_NEG_INF
void set_max(bool negative)
static const uint32_t MSP_POS_INF
unsigned int clz(unsigned int u)
void set_max(bool negative)
void build(bool negative, mpz_t mantissa, int exponent)
void set_max(bool negative)
static const uint16_t NEG_INF
static const uint32_t NEG_ZERO
static const uint64_t LSP_INF
void build(bool negative, mpz_t mantissa, int exponent)
static const uint32_t WRD_MAX
static const uint32_t MSP_SGN_MASK
static const unsigned int EXPONENT_BITS
static const unsigned int MANTISSA_BITS
static const unsigned int MANTISSA_BITS
static const int EXPONENT_BIAS
static const uint32_t MSP_POS_ZERO
static const uint32_t MSP_SGN_MASK
static const uint64_t LSP_ZERO
static const int EXPONENT_BIAS