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 reference) 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>

Is Model for the Concept



Quotient<NT> q;
introduces an uninitialized variable q.

template <class T>
Quotient<NT> q ( T t);
introduces the quotient t/1. NT needs to have a constructor from T.

Quotient<NT> q ( NT n, NT d);
introduces the quotient n/d.


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<NT> sqrt ( q) returns the square root of q. This is supported if and only if NT supports the square root as well.