126template<
class Type >
134 assert((ulen > 0) && (u != NULL));
140 while (v && (i < ulen)) {
149 for (
int digit_i = i; digit_i < ulen; ++digit_i ) { u[digit_i] = 0; }
159template<
class Type >
166 "div_by_zero<Type>( Type ) : division by zero" );
185 assert((nb > 0) && (nd > 0) && (d != NULL));
202 assert((i >= 0) && (d != NULL));
224 return std::numeric_limits<double>::has_quiet_NaN && (v != v);
231 return v == std::numeric_limits<double>::infinity()
232 || v == -std::numeric_limits<double>::infinity();
242 "is_bad_double( double v ) : "
243 "v is not finite - NaN or Inf" );
292 m_next_p += digits_n;
293 if ( m_next_p >= m_end_p )
296 m_next_p = m_bgn_p + digits_n;
305 m_end_p = &m_bgn_p[heap_size];
311 return (
size_t)(m_end_p - m_bgn_p);
318 inline sc_digit_heap(
size_t heap_size ) : m_bgn_p(0), m_end_p(0), m_next_p(0)
320 initialize( heap_size );
#define SC_DIGIT_INDEX(BIT_INDEX)
#define SC_BIT_INDEX(BIT)
#define BITS_PER_HALF_DIGIT
#define SC_REPORT_ERROR(msg_type, msg)
const char SC_ID_OPERATION_FAILED_[]
const char SC_ID_VALUE_NOT_VALID_[]
SC_API void parse_hex_bits(const char *src_p, int dst_n, sc_digit *data_p, sc_digit *ctrl_p=0)
SC_API void parse_binary_bits(const char *src_p, int dst_n, sc_digit *data_p, sc_digit *ctrl_p=0)
sc_digit_heap SC_API sc_temporary_digits
sc_carry one_and_zeros(int n)
void from_uint(int ulen, sc_digit *u, Type v)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
void safe_set(int i, bool v, sc_digit *d)
void is_bad_double(double v)
sc_carry one_and_ones(int n)
void trim(small_type added, int nb, int nd, sc_digit *d)
sc_digit_heap(size_t heap_size)
void initialize(size_t heap_size=0x100000)
sc_digit * allocate(size_t digits_n)