Regina Calculation Engine

Represents an arbitrary precision rational number. More...
#include <maths/nrational.h>
Public Member Functions  
NRational ()  
Initialises to 0/1. More...  
NRational (const NRational &value)  
Initialises to the given rational value. More...  
template<bool supportInfinity>  
NRational (const NIntegerBase< supportInfinity > &value)  
Initialises to the given integer value. More...  
NRational (long value)  
Initialises to the given integer value. More...  
template<bool supportInfinity>  
NRational (const NIntegerBase< supportInfinity > &newNum, const NIntegerBase< supportInfinity > &newDen)  
Initialises to newNum/newDen. More...  
NRational (long newNum, unsigned long newDen)  
Initialises to newNum/newDen. More...  
virtual  ~NRational () 
Destroys this rational. More...  
NRational &  operator= (const NRational &value) 
Sets this rational to the given rational value. More...  
template<bool supportInfinity>  
NRational &  operator= (const NIntegerBase< supportInfinity > &value) 
Sets this rational to the given integer value. More...  
NRational &  operator= (long value) 
Sets this rational to the given integer value. More...  
void  swap (NRational &other) 
Swaps the values of this and the given rational. More...  
NInteger  getNumerator () const 
Returns the numerator of this rational. More...  
NInteger  getDenominator () const 
Returns the denominator of this rational. More...  
NRational  operator* (const NRational &r) const 
Calculates the product of two rationals. More...  
NRational  operator/ (const NRational &r) const 
Calculates the ratio of two rationals. More...  
NRational  operator+ (const NRational &r) const 
Calculates the sum of two rationals. More...  
NRational  operator (const NRational &r) const 
Calculates the difference of two rationals. More...  
NRational  operator () const 
Determines the negative of this rational. More...  
NRational  inverse () const 
Calculates the inverse of this rational. More...  
NRational  abs () const 
Determines the absolute value of this rational. More...  
NRational &  operator+= (const NRational &other) 
Adds the given rational to this. More...  
NRational &  operator= (const NRational &other) 
Subtracts the given rational from this. More...  
NRational &  operator*= (const NRational &other) 
Multiplies the given rational by this. More...  
NRational &  operator/= (const NRational &other) 
Divides this by the given rational. More...  
void  negate () 
Negates this rational. More...  
void  invert () 
Inverts this rational. More...  
bool  operator== (const NRational &compare) const 
Determines if this is equal to the given rational. More...  
bool  operator!= (const NRational &compare) const 
Determines if this is not equal to the given rational. More...  
bool  operator< (const NRational &compare) const 
Determines if this is less than the given rational. More...  
bool  operator> (const NRational &compare) const 
Determines if this is greater than the given rational. More...  
bool  operator<= (const NRational &compare) const 
Determines if this is less than or equal to the given rational. More...  
bool  operator>= (const NRational &compare) const 
Determines if this is greater than or equal to the given rational. More...  
double  doubleApprox (bool *inRange=0) const 
Attempts to convert this rational to a real number. More...  
std::string  getTeX () const 
Returns this rational as written using TeX formatting. More...  
std::ostream &  writeTeX (std::ostream &out) const 
Writes this rational in TeX format to the given output stream. More...  
Static Public Attributes  
static const NRational  zero 
Globally available zero. More...  
static const NRational  one 
Globally available one. More...  
static const NRational  infinity 
Globally available infinity. More...  
static const NRational  undefined 
Globally available undefined. More...  
Friends  
std::ostream &  operator<< (std::ostream &out, const NRational &rat) 
Writes the given rational to the given output stream. More...  
Represents an arbitrary precision rational number.
Calculations with NRational objects will be exact.
Infinity (1/0) and undefined (0/0) are catered for. (1/0) is considered the same as (1/0), and is represented as (1/0). Any operation involving (0/0) will return (0/0).
Since infinity is the same as negative infinity, both infinity plus infinity and infinity minus infinity will return infinity. Infinity divided by infinity returns undefined, as does infinity times zero.
For the purposes of ordering, undefined is the smallest rational and infinity is the largest. Undefined is always equal to itself, and infinity is always equal to itself.
Rationals will always be stored in lowest terms (i.e., with relatively prime numerator and denominator), and with a nonnegative denominator.

inline 
Initialises to 0/1.

inline 
Initialises to the given rational value.
value  the new rational value of this rational. 

inline 
Initialises to the given integer value.
The given integer may be infinite.
value  the new integer value of this rational. 

inline 
Initialises to the given integer value.
value  the new integer value of this rational. 
regina::NRational::NRational  (  const NIntegerBase< supportInfinity > &  newNum, 
const NIntegerBase< supportInfinity > &  newDen  
) 
Initialises to newNum/newDen.
newNum  the new numerator. 
newDen  the new denominator. 
regina::NRational::NRational  (  long  newNum, 
unsigned long  newDen  
) 
Initialises to newNum/newDen.
newNum  the new numerator. 
newDen  the new denominator. 

inlinevirtual 
Destroys this rational.
NRational regina::NRational::abs  (  )  const 
Determines the absolute value of this rational.
This rational is not changed.
double regina::NRational::doubleApprox  (  bool *  inRange = 0  )  const 
Attempts to convert this rational to a real number.
If this rational can be approximated by a double (specifically, if it lies within double's allowable range) then a such an approximation is returned. Otherwise zero is returned instead.
The optional inRange argument allows the result of range checking to be returned explicitly as a boolean (*inRange
will be set to true
if a double approximation is possible and false
otherwise).
It is safe to pass inRange as null
, in which case this boolean is not returned. Range checking is still performed internally however, i.e., zero is still returned if the rational is out of range.
Note that "lies with double's allowable range" is machinedependent, and may vary between different installations. Infinity and undefined are always considered out of range. Otherwise a rational is out of range if its absolute value is finite but too large (e.g., 10^10000) or nonzero but too small (e.g., 10^10000).
inRange  returns the result of range checking as described above; this pointer may be passed as null if the caller does not care about this result. 
NInteger regina::NRational::getDenominator  (  )  const 
Returns the denominator of this rational.
Note that rationals are always stored in lowest terms with nonnegative denominator. Infinity will be stored as 1/0.
NInteger regina::NRational::getNumerator  (  )  const 
Returns the numerator of this rational.
Note that rationals are always stored in lowest terms with nonnegative denominator. Infinity will be stored as 1/0.
std::string regina::NRational::getTeX  (  )  const 
Returns this rational as written using TeX formatting.
No leading or trailing dollar signs will be included.
NRational regina::NRational::inverse  (  )  const 
Calculates the inverse of this rational.
This rational is not changed.
void regina::NRational::invert  (  ) 
Inverts this rational.
This rational is changed to reflect the result.

inline 
Negates this rational.
This rational is changed to reflect the result.

inline 
Determines if this is not equal to the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is not equal to compare. Calculates the product of two rationals.
This rational is not changed.
r  the rational with which to multiply this. 
Multiplies the given rational by this.
This rational is changed to reflect the result.
other  the rational to multiply by this. 
Calculates the sum of two rationals.
This rational is not changed.
r  the rational to add to this. 
Adds the given rational to this.
This rational is changed to reflect the result.
other  the rational to add to this. 
Calculates the difference of two rationals.
This rational is not changed.
r  the rational to subtract from this. 
NRational regina::NRational::operator  (  )  const 
Determines the negative of this rational.
This rational is not changed.
Subtracts the given rational from this.
This rational is changed to reflect the result.
other  the rational to subtract from this. 
Calculates the ratio of two rationals.
This rational is not changed.
r  the rational to divide this by. 
Divides this by the given rational.
This rational is changed to reflect the result.
other  the rational to divide this by. 
bool regina::NRational::operator<  (  const NRational &  compare  )  const 
Determines if this is less than the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is less than compare.

inline 
Determines if this is less than or equal to the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is less than or equal to compare. Sets this rational to the given rational value.
value  the new value of this rational. 

inline 
Sets this rational to the given integer value.
The given integer may be infinite.
value  the new value of this rational. 

inline 
Sets this rational to the given integer value.
value  the new value of this rational. 
bool regina::NRational::operator==  (  const NRational &  compare  )  const 
Determines if this is equal to the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is equal to compare. bool regina::NRational::operator>  (  const NRational &  compare  )  const 
Determines if this is greater than the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is greater than compare.

inline 
Determines if this is greater than or equal to the given rational.
compare  the rational with which this will be compared. 
true
if and only if this rational is greater than or equal to compare.

inline 
Swaps the values of this and the given rational.
other  the rational whose value will be swapped with this. 
std::ostream& regina::NRational::writeTeX  (  std::ostream &  out  )  const 
Writes this rational in TeX format to the given output stream.
No leading or trailing dollar signs will be included.
out  the output stream to which to write. 

friend 
Writes the given rational to the given output stream.
Infinity will be written as Inf
. Undefined will be written as Undef
. A rational with denominator one will be written as a single integer. All other rationals will be written in the form r/s
.
out  the output stream to which to write. 
rat  the rational to write. 

static 
Globally available infinity.
Note that both 1/0 and 1/0 evaluate to this same rational. When queried, the representation 1/0 will be returned.

static 
Globally available one.

static 
Globally available undefined.
This is represented as 0/0.

static 
Globally available zero.