 ## CGAL::Gmpq

### Definition

An object of the class Gmpq is an arbitrary precision rational number based on the GNU Multiple Precision Arithmetic Library.

#include <CGAL/Gmpq.h>

Field
RealEmbeddable
Fraction

### Types

 Gmpq::NT the field type, which is Gmpz.

### Creation

 Gmpq q; creates an uninitialized multiple precision rational number q. Gmpq q ( int i); creates a multiple-precision rational number initialized with i. Gmpq q ( Gmpz n); creates a multiple-precision rational number initialized with n. Gmpq q ( int n, int d); creates a multiple-precision rational number initialized with n/d. Gmpq q ( signed long n, unsigned long d); creates a multiple-precision rational number initialized with n/d. Gmpq q ( unsigned long n, unsigned long d); creates a multiple-precision rational number initialized with n/d. Gmpq q ( Gmpz n, Gmpz d); creates a multiple-precision rational number initialized with n/d. Gmpq q ( double d); creates a multiple-precision rational number initialized with d. Gmpq q ( std::string str); creates a multiple-precision rational number initialized with str. Gmpq q ( std::string str, int base); creates a multiple-precision rational number initialized with str.

### Operations

 std::ostream& std::ostream& out << q writes q to the ostream out, in the form n/d. std::istream& std::istream& in >> & q reads a number from in, then converts it to a Gmpq. The number may be an integer, a rational number in the form n/d, or a floating-point number.

There are two access functions, namely to the numerator and the denominator of a rational. Note that these values are not uniquely defined. It is guaranteed that q.numerator() and q.denominator() return values nt_num and nt_den such that q = nt_num/nt_den, only if q.numerator() and q.denominator() are called consecutively wrt. q, i.e. q is not involved in any other operation between these calls.

 Gmpz q.numerator () returns the numerator of q. Gmpz q.denominator () returns the denominator of q.

### Implementation

Gmpqs are reference counted.