96 #if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) 100 std::ios::fmtflags flags = os.flags() & std::ios::basefield;
101 if ( flags & ::std::ios::dec )
return SC_DEC;
102 if ( flags & ::std::ios::hex )
return SC_HEX;
103 if ( flags & ::std::ios::oct )
return SC_OCT;
110 return (os.flags() & ::std::ios::showbase) != 0 ;
421 sc_assert((ulen <= 0) || (u[ulen - 1] != 0));
422 sc_assert((vlen <= 0) || (v[vlen - 1] != 0));
426 return (ulen - vlen);
429 while ((--ulen >= 0) && (u[ulen] == v[ulen]))
441 return (
int) (u[ulen] - v[ulen]);
459 while ((--ulen >= 0) && (! u[ulen]))
502 return vec_cmp(ulen, u, vlen, v);
516 for(
int i = from; i < ulen; i++)
536 sc_assert((n > 0) && (u != NULL) && (v != NULL));
539 for (
int i = 0; i < n; ++i)
573 for (
int i = 0; i < ulen; ++i) {
588 template<
class Type >
602 while (v && (i < ulen)) {
618 template<
class Type >
631 if(
SC_LIKELY_( u > (std::numeric_limits<Type>::min)() ) )
662 SC_API void test_bound_failed(
int nb);
667 if (nb > SC_MAX_NBITS) {
668 test_bound_failed( nb );
675 template<
class Type >
682 "div_by_zero<Type>( Type ) : division by zero" );
753 sc_assert((nb > 0) && (nd > 0) && (d != NULL));
768 trim(added, nb, nd, d);
794 sc_assert((nb > 0) && (nd > 0) && (d != NULL));
809 sc_assert((nb > 0) && (nd > 0) && (d != NULL));
877 sc_assert((nb > 0) && (nd > 0) && (d != NULL));
934 int vnb,
int vnd,
const sc_digit *vd)
1002 return std::numeric_limits<double>::has_quiet_NaN && (v != v);
1009 return v == std::numeric_limits<double>::infinity()
1010 || v == -std::numeric_limits<double>::infinity();
1020 "is_bad_double( double v ) : " 1021 "v is not finite - NaN or Inf" );
int vec_cmp(int ulen, const sc_digit *u, int vlen, const sc_digit *v)
SC_API sc_digit vec_rem_on_small(int ulen, sc_digit *u, sc_digit v)
SC_API void vec_reverse(int unb, int und, sc_digit *ud, int l, int r=0)
SC_API void vec_shift_left(int ulen, sc_digit *u, int nsl)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
SC_API void vec_div_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w)
SC_API const char * get_base_and_sign(const char *v, small_type &base, small_type &sign)
void copy_digits_unsigned(small_type &us, int unb, int und, sc_digit *ud, int, int vnd, const sc_digit *vd)
SC_API void vec_sub_on2(int ulen, sc_digit *u, int vlen, const sc_digit *v)
SC_API void vec_div_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w)
small_type make_zero(int nd, sc_digit *d)
SC_API small_type fsm_move(char c, small_type &b, small_type &s, small_type &state)
void vec_copy(int n, sc_digit *u, const sc_digit *v)
void vec_complement(int ulen, sc_digit *u)
void from_uint(int ulen, sc_digit *u, Type v)
void convert_SM_to_2C(small_type s, int nd, sc_digit *d)
Report ids for the datatypes/int code.
small_type convert_signed_2C_to_SM(int nb, int nd, sc_digit *d)
void trim(small_type added, int nb, int nd, sc_digit *d)
SC_API small_type vec_from_str(int unb, int und, sc_digit *u, const char *v, sc_numrep base=SC_NOBASE)
sc_digit low_half(sc_digit d)
void trim_unsigned(int nb, int nd, sc_digit *d)
sc_digit one_and_ones(int n)
SC_API void vec_add_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w)
small_type mul_signs(small_type us, small_type vs)
SC_API void vec_shift_right(int vlen, sc_digit *u, int nsr, sc_digit fill=0)
uint64 const sc_uint_base int b
SC_API void parse_binary_bits(const char *src_p, int dst_n, sc_digit *data_p, sc_digit *ctrl_p=0)
small_type convert_unsigned_2C_to_SM(int nb, int nd, sc_digit *d)
SC_API void vec_add(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w)
#define BITS_PER_HALF_DIGIT
sc_digit high_half_masked(sc_digit d)
SC_API void vec_add_small_on(int ulen, sc_digit *u, sc_digit v)
SC_API void vec_add_on2(int ulen, sc_digit *u, int vlen, const sc_digit *v)
SC_API const std::string to_string(sc_enc)
void convert_unsigned_SM_to_2C(small_type s, int nd, sc_digit *d)
sc_numrep
Enumeration of number representations for character string conversion.
void safe_set(int i, bool v, sc_digit *d)
SC_API void vec_mul_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w)
small_type get_sign(Type &u)
SC_API void vec_mul(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w)
SC_API int vec_to_char(int ulen, const sc_digit *u, int vlen, uchar *v)
SC_API void parse_hex_bits(const char *src_p, int dst_n, sc_digit *data_p, sc_digit *ctrl_p=0)
void convert_unsigned_SM_to_2C_trimmed(small_type s, int nb, int nd, sc_digit *d)
sc_digit high_half(sc_digit d)
void copy_digits_signed(small_type &us, int unb, int und, sc_digit *ud, int vnb, int vnd, const sc_digit *vd)
int vec_find_first_nonzero(int ulen, const sc_digit *u)
void convert_signed_SM_to_2C(small_type s, int nd, sc_digit *d)
Report ids for the datatypes/bit code.
void vec_zero(int from, int ulen, sc_digit *u)
void convert_signed_SM_to_2C_trimmed(small_type s, int nb, int nd, sc_digit *d)
sc_digit one_and_zeros(int n)
SC_API void vec_sub_on(int ulen, sc_digit *u, int vlen, const sc_digit *v)
SC_API void vec_add_on(int ulen, sc_digit *u, int vlen, const sc_digit *v)
small_type convert_unsigned_SM_to_2C_to_SM(small_type s, int nb, int nd, sc_digit *d)
SC_API void vec_mul_small_on(int ulen, sc_digit *u, sc_digit v)
SC_API void vec_from_char(int ulen, const uchar *u, int vlen, sc_digit *v)
#define SC_REPORT_ERROR(msg_type, msg)
small_type check_for_zero(small_type s, int ulen, const sc_digit *u)
SC_API void vec_sub_small_on(int ulen, sc_digit *u, sc_digit v)
Run-time logging and reporting facilities.
sc_numrep sc_io_base(::std::ostream &, sc_numrep)
SC_API void vec_sub_small(int ulen, const sc_digit *u, sc_digit v, sc_digit *w)
Top level header file for arbitrary precision signed/unsigned.
SC_API void vec_sub(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w)
int vec_skip_leading_zeros(int ulen, const sc_digit *u)
void is_bad_double(double v)
inline ::std::ostream & operator<<(::std::ostream &os, const sc_bit &a)
small_type convert_signed_SM_to_2C_to_SM(small_type s, int nb, int nd, sc_digit *d)
SC_API sc_digit vec_rem_small(int ulen, const sc_digit *u, sc_digit v)
void convert_SM_to_2C_trimmed(small_type added, small_type s, int nb, int nd, sc_digit *d)
void trim_signed(int nb, int nd, sc_digit *d)
SC_NORETURN_ SC_API void sc_abort()
void vec_copy_and_zero(int ulen, sc_digit *u, int vlen, const sc_digit *v)
int vec_skip_and_cmp(int ulen, const sc_digit *u, int vlen, const sc_digit *v)
bool sc_io_show_base(::std::ostream &)
SC_API void vec_rem_large(int ulen, const sc_digit *u, int vlen, const sc_digit *v, sc_digit *w)