When an expression requires the use of temporary intermediate mpf_class
values, like f=g*h+x*y, those temporaries will have the same precision
as the destination f. Explicit constructors can be used if this
doesn't suit.
Construct an
mpf_class. Any standard C++ type can be used, exceptlong longandlong double, and any of the GMP C++ classes can be used.If prec is given, the initial precision is that value, in bits. If prec is not given, then the initial precision is determined by the type of op given. An
mpz_class,mpq_class, or C++ builtin type will give the defaultmpfprecision (see Initializing Floats). Anmpf_classor expression will give the precision of that value. The precision of a binary expression is the higher of the two operands.mpf_class f(1.5); // default precision mpf_class f(1.5, 500); // 500 bits (at least) mpf_class f(x); // precision of x mpf_class f(abs(x)); // precision of x mpf_class f(-g, 1000); // 1000 bits (at least) mpf_class f(x+y); // greater of precisions of x and y
Construct an
mpf_classfrom anmpf_t. The value in f is copied into the newmpf_class, there won't be any permanent association between it and f.If prec is given, the initial precision is that value, in bits. If prec is not given, then the initial precision is that of f.
Construct an
mpf_classconverted from a string usingmpf_set_str(see Assigning Floats). If prec is given, the initial precision is that value, in bits. If not, the defaultmpfprecision (see Initializing Floats) is used.If the string is not a valid float, an
std::invalid_argumentexception is thrown. The same applies tooperator=.
With C++11 compilers, floats can be constructed with the syntax
1.23e-1_mpfwhich is equivalent tompf_class("1.23e-1").
Convert and store the given op value to an
mpf_classobject. The same types are accepted as for the constructors above.Note that
operator=only stores a new value, it doesn't copy or change the precision of the destination, instead the value is truncated if necessary. This is the same asmpf_setetc. Note in particular this means formpf_classa copy constructor is not the same as a default constructor plus assignment.mpf_class x (y); // x created with precision of y mpf_class x; // x created with default precision x = y; // value truncated to that precisionApplications using templated code may need to be careful about the assumptions the code makes in this area, when working with
mpf_classvalues of various different or non-default precisions. For instance implementations of the standardcomplextemplate have been seen in both styles above, though of coursecomplexis normally only actually specified for use with the builtin float types.
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, exceptlong longandlong double.The accuracy provided by
hypotis not currently guaranteed.
Get or set the current precision of an
mpf_class.The restrictions described for
mpf_set_prec_raw(see Initializing Floats) apply tompf_class::set_prec_raw. Note in particular that thempf_classmust be restored to it's allocated precision before being destroyed. This must be done by application code, there's no automatic mechanism for it.