Regina 7.0 Calculation Engine
|
Represents an arbitrary precision rational number. More...
#include <maths/rational.h>
Public Member Functions | |
Rational () | |
Initialises to 0/1. More... | |
Rational (const Rational &value) | |
Initialises to the given rational value. More... | |
Rational (Rational &&src) noexcept | |
Moves the given rational into this new rational. More... | |
template<bool supportInfinity> | |
Rational (const IntegerBase< supportInfinity > &value) | |
Initialises to the given integer value. More... | |
Rational (long value) | |
Initialises to the given integer value. More... | |
template<bool supportInfinity> | |
Rational (const IntegerBase< supportInfinity > &newNum, const IntegerBase< supportInfinity > &newDen) | |
Initialises to newNum/newDen. More... | |
Rational (long newNum, unsigned long newDen) | |
Initialises to newNum/newDen. More... | |
~Rational () | |
Destroys this rational. More... | |
Rational & | operator= (const Rational &value) |
Sets this rational to the given rational value. More... | |
template<bool supportInfinity> | |
Rational & | operator= (const IntegerBase< supportInfinity > &value) |
Sets this rational to the given integer value. More... | |
Rational & | operator= (long value) |
Sets this rational to the given integer value. More... | |
Rational & | operator= (Rational &&src) noexcept |
Moves the given rational into this rational. More... | |
void | swap (Rational &other) noexcept |
Swaps the values of this and the given rational. More... | |
Integer | numerator () const |
Returns the numerator of this rational. More... | |
Integer | denominator () const |
Returns the denominator of this rational. More... | |
Rational | operator* (const Rational &r) const |
Calculates the product of two rationals. More... | |
Rational | operator/ (const Rational &r) const |
Calculates the ratio of two rationals. More... | |
Rational | operator+ (const Rational &r) const |
Calculates the sum of two rationals. More... | |
Rational | operator- (const Rational &r) const |
Calculates the difference of two rationals. More... | |
Rational | operator- () const |
Determines the negative of this rational. More... | |
Rational | inverse () const |
Calculates the inverse of this rational. More... | |
Rational | abs () const |
Determines the absolute value of this rational. More... | |
Rational & | operator+= (const Rational &other) |
Adds the given rational to this. More... | |
Rational & | operator-= (const Rational &other) |
Subtracts the given rational from this. More... | |
Rational & | operator*= (const Rational &other) |
Multiplies the given rational by this. More... | |
Rational & | operator/= (const Rational &other) |
Divides this by the given rational. More... | |
void | negate () |
Negates this rational. More... | |
void | invert () |
Inverts this rational. More... | |
bool | operator== (const Rational &compare) const |
Determines if this is equal to the given rational. More... | |
bool | operator!= (const Rational &compare) const |
Determines if this is not equal to the given rational. More... | |
bool | operator< (const Rational &compare) const |
Determines if this is less than the given rational. More... | |
bool | operator> (const Rational &compare) const |
Determines if this is greater than the given rational. More... | |
bool | operator<= (const Rational &compare) const |
Determines if this is less than or equal to the given rational. More... | |
bool | operator>= (const Rational &compare) const |
Determines if this is greater than or equal to the given rational. More... | |
double | doubleApprox () const |
Attempts to convert this rational to a real number. More... | |
std::string | tex () const |
Returns this rational as written using TeX formatting. More... | |
std::string | TeX () const |
Deprecated routine that 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 Rational | zero |
Globally available zero. More... | |
static const Rational | one |
Globally available one. More... | |
static const Rational | infinity |
Globally available infinity. More... | |
static const Rational | undefined |
Globally available undefined. More... | |
Friends | |
std::ostream & | operator<< (std::ostream &out, const Rational &rat) |
Writes the given rational to the given output stream. More... | |
Represents an arbitrary precision rational number.
Calculations with Rational 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.
When performing computations on rationals, the results will always be stored in lowest terms (i.e., with relatively prime numerator and denominator), and with a non-negative denominator. However, when constructing a rational number from scratch (e.g., by supplying the numerator and denominator separately), it is your responsibility to ensure that the rational is in lowest terms.
This class implements C++ move semantics and adheres to the C++ Swappable requirement. It is designed to avoid deep copies wherever possible, even when passing or returning objects by value.
|
inline |
Initialises to 0/1.
|
inline |
Initialises to the given rational value.
value | the new rational value of this rational. |
|
inlinenoexcept |
Moves the given rational into this new rational.
This is a fast (constant time) operation.
The rational that is passed (src) will no longer be usable.
src | the rational to move. |
|
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::Rational::Rational | ( | const IntegerBase< supportInfinity > & | newNum, |
const IntegerBase< supportInfinity > & | newDen | ||
) |
Initialises to newNum/newDen.
newNum | the new numerator. |
newDen | the new denominator. |
regina::Rational::Rational | ( | long | newNum, |
unsigned long | newDen | ||
) |
Initialises to newNum/newDen.
newNum | the new numerator. |
newDen | the new denominator. |
|
inline |
Destroys this rational.
Rational regina::Rational::abs | ( | ) | const |
Determines the absolute value of this rational.
This rational is not changed.
Integer regina::Rational::denominator | ( | ) | const |
Returns the denominator of this rational.
Note that rationals are always stored in lowest terms with non-negative denominator. Infinity will be stored as 1/0.
double regina::Rational::doubleApprox | ( | ) | 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 this routine will throw an exception.
Note that "lies with double's allowable range" is machine-dependent, 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 non-zero but too small (e.g., 10^-10000).
UnsolvedCase | This rational lies outside double's allowable range. |
Rational regina::Rational::inverse | ( | ) | const |
Calculates the inverse of this rational.
This rational is not changed.
void regina::Rational::invert | ( | ) |
Inverts this rational.
This rational is changed to reflect the result.
|
inline |
Negates this rational.
This rational is changed to reflect the result.
Integer regina::Rational::numerator | ( | ) | const |
Returns the numerator of this rational.
Note that rationals are always stored in lowest terms with non-negative denominator. Infinity will be stored as 1/0.
|
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. |
Rational regina::Rational::operator- | ( | ) | const |
Determines the negative of this rational.
This rational is not changed.
Calculates the difference of two rationals.
This rational is not changed.
r | the rational to subtract from this. |
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::Rational::operator< | ( | const Rational & | 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.
|
inline |
Sets this rational to the given integer value.
The given integer may be infinite.
value | the new value of this rational. |
Sets this rational to the given rational value.
value | the new value of this rational. |
|
inline |
Sets this rational to the given integer value.
value | the new value of this rational. |
Moves the given rational into this rational.
This is a fast (constant time) operation.
The rational that is passed (src) will no longer be usable.
src | the rational to move. |
bool regina::Rational::operator== | ( | const Rational & | 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::Rational::operator> | ( | const Rational & | 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.
|
inlinenoexcept |
Swaps the values of this and the given rational.
other | the rational whose value will be swapped with this. |
std::string regina::Rational::tex | ( | ) | const |
Returns this rational as written using TeX formatting.
No leading or trailing dollar signs will be included.
|
inline |
Deprecated routine that returns this rational as written using TeX formatting.
std::ostream & regina::Rational::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.