 ## CGAL::Quotient<NT>

### Definition

An object of the class Quotient<NT> is an element of the field of quotients of the integral domain type NT. If NT behaves like an integer, Quotient<NT> behaves like a rational number. LEDA's class rational (see Section ) has been the basis for Quotient<NT>. A Quotient<NT> q is represented as a pair of NTs, representing numerator and denominator.

#include <CGAL/Quotient.h>

FieldNumberType

### Creation

 Quotient q; introduces an uninitialized variable q. template Quotient q ( T t); introduces the quotient t/1. NT needs to have a constructor from T. Quotient q ( NT n, NT d); introduces the quotient n/d.

### Operations

There are two access functions, namely to the numerator and the denominator of a quotient. 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.

 NT q.numerator () returns a numerator of q. NT q.denominator () returns a denominator of q.

The stream operations are available as well. They assume that corresponding stream operators for type NT exist.

 std::ostream& std::ostream& out << q writes q to ostream out in format ``n/d'', where n==q.numerator() and d==q.denominator(). std::istream& std::istream& in >> & q reads q from istream in. Expected format is ``n/d'', where n and d are of type NT. A single n which is not followed by a / is also accepted and interpreted as n/1.

The following functions are added to fulfill the CGAL requirements on number types.

 double to_double ( q) returns some double approximation to q. bool is_valid ( q) returns true, if numerator and denominator are valid. bool is_finite ( q) returns true, if numerator and denominator are finite. Quotient sqrt ( q) returns the square root of q. This is supported if and only if NT supports the square root as well.