mpz_class. All the standard C++ types may be used, except
long double, and all the GMP C++ classes can be used, although conversions from
explicit. Any necessary conversion follows the corresponding C function, for example
mpz_set_d(see Assigning Integers).
mpz_t. The value in z is copied into the new
mpz_class, there won't be any permanent association between it and z.
mpz_classconverted from a string using
mpz_set_str(see Assigning Integers).
If the string is not a valid integer, an
std::invalid_argumentexception is thrown. The same applies to
With C++11 compilers, integers can be constructed with the syntax
123_mpzwhich is equivalent to
mpz_classround towards zero, as per the
mpz_tdiv_rfunctions (see Integer Division). This is the same as the C99
mpz_cdiv...functions can always be called directly if desired. For example,mpz_class q, a, d; ... mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t());
These functions provide a C++ class interface to the corresponding GMP C routines.
cmpcan be used with any of the classes or the standard C++ types, except
Overloaded operators for combinations of
doubleare provided for completeness, but it should be noted that if the given
doubleis not an integer then the way any rounding is done is currently unspecified. The rounding might take place at the start, in the middle, or at the end of the operation, and it might change in the future.
double, however, are defined
to follow the corresponding C functions
And comparisons are always made exactly, as per