CGAL 5.3  Number Types

#include <CGAL/Quotient.h>
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 ledant) has been the basis for Quotient<NT>
. A Quotient<NT>
q
is represented as a pair of NT
s, representing numerator and denominator.
NT  must be at least model of concept IntegralDomainWithoutDivision and a model of concept RealEmbeddable . 
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.
The stream operations are available as well. They assume that corresponding stream operators for type NT
exist.
The following functions are added to fulfill the CGAL requirements on number types.
Related Functions  
(Note that these are not member functions.)  
std::ostream &  operator<< (std::ostream &out, const Quotient< NT > &q) 
writes q to ostream out in format n/d , where n \( ==\)q.numerator() and d \( ==\)q.denominator() .  
std::istream &  operator>> (std::istream &in, Quotient< NT > &q) 
reads q from istream in . More...  
double  to_double (const Quotient< NT > &q) 
returns some double approximation to q .  
bool  is_valid (const Quotient< NT > &q) 
returns true, if numerator and denominator are valid.  
bool  is_finite (const Quotient< NT > &q) 
returns true, if numerator and denominator are finite.  
Quotient< NT >  sqrt (const Quotient< NT > &q) 
returns the square root of q . More...  
Creation  
Quotient ()  
introduces an uninitialized variable q .  
template<class T >  
Quotient (const T &t)  
introduces the quotient t/1 . More...  
template<class T >  
Quotient (const Quotient< T > &t)  
introduces the quotient NT(t.numerator())/NT(t.denominator()) . More...  
Quotient (const NT &n, const NT &d)  
introduces the quotient n/d . More...  
Operations  
NT  numerator () const 
returns a numerator of q .  
NT  denominator () const 
returns a denominator of q .  
introduces the quotient t/1
.
NT needs to have a constructor from T.
introduces the quotient NT(t.numerator())/NT(t.denominator())
.
NT needs to have a constructor from T.
CGAL::Quotient< NT >::Quotient  (  const NT &  n, 
const NT &  d  
) 
introduces the quotient n/d
.

related 
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
.