\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL 4.6.1 - Number Types
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
CGAL::Mpzf Class Reference

#include <CGAL/Mpzf.h>

Definition

An object of the class Mpzf is a multiple-precision floating-point number which can represent numbers of the form \( m*2^e\), where \( m\) is an arbitrary precision integer based on the GMP library, and \( e\) is of type int.

This type can be considered exact, even if the exponent is not a multiple-precision number. A Mpzf constructed from an integer or a normalized finite floating point number represents exactly that number. This number type offers functionality very similar to MP_Float and Gmpzf but is faster.

Is Model Of:

IntegralDomainWithoutDivision

RealEmbeddable

Implementation

This class is only available on platforms on which GMP uses 64 bit limbs and the endianness is either big-endian or little-endian. The macro CGAL_HAS_MPZF will be defined when including CGAL/Mpzf.h if this is true. This class makes the assumption that the representation of a double in memory follows IEEE 754.

Currently, an Mpzf contains an array of a few limbs, in which it stores the data as long as it fits. If it does not fit, it dynamically allocates memory with new, and de-allocates it when it is done. Code to recycle the allocated memory (per thread) is included but disabled at the moment.

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &out, const Mpzf &f)
 writes a double approximation of f to the ostream out.
 
std::istream & operator>> (std::istream &in, Mpzf &f)
 reads a double from in, then converts it to a Mpzf.
 

Creation

 Mpzf ()
 creates a Mpzf initialized with 0.
 
 Mpzf (int i)
 creates a Mpzf initialized with i.
 
 Mpzf (long int l)
 creates a Mpzf initialized with l.
 
 Mpzf (const Gmpz &i)
 creates a Mpzf initialized with i.
 
 Mpzf (const mpz_class &i)
 creates a Mpzf initialized with i.
 
 Mpzf (double d)
 creates a Mpzf initialized with d.
 

Conversion

 operator Gmpq () const
 creates a Gmpq initialized with *this.
 
 operator mpq_class () const
 creates a mpq_class initialized with *this.