52#include <lal/numeric/integer.hpp>
123 inline void set_si(int64_t n, uint64_t d = 1) noexcept {
125 mpq_set_si(
m_val, n, d);
126 mpq_canonicalize(
m_val);
134 inline void set_ui(uint64_t n, uint64_t d = 1) noexcept {
136 mpq_set_ui(
m_val, n, d);
137 mpq_canonicalize(
m_val);
144 inline void set_str(
const std::string& s)
noexcept {
146 mpq_set_str(
m_val, s.c_str(), 10);
147 mpq_canonicalize(
m_val);
157 mpq_set_num(
m_val, n.get_raw_value());
158 mpq_set_den(
m_val, d.get_raw_value());
159 mpq_canonicalize(
m_val);
168 mpq_set(
m_val, r.m_val);
188 {
set_si(i);
return *
this; }
257 {
return mpq_equal(
m_val, r.m_val) != 0; }
266 {
return not (*
this == i); }
281 {
return not (*
this == i); }
296 {
return not (*
this == r); }
335 {
return mpq_cmp(
m_val, r.m_val) < 0; }
374 {
return mpq_cmp(
m_val, r.m_val) <= 0; }
413 {
return mpq_cmp(
m_val, r.m_val) > 0; }
452 {
return mpq_cmp(
m_val, r.m_val) >= 0; }
461 {
rational r(*
this); r += i;
return r; }
476 {
rational r(*
this); r += i;
return r; }
491 {
rational k(*
this); k += r;
return k; }
510 { mpq_add(
m_val,
m_val, r.m_val);
return *
this; }
522 {
rational r(*
this); r -= i;
return r; }
537 {
rational r(*
this); r -= i;
return r; }
552 {
rational k(*
this); k -= r;
return k; }
571 { mpq_sub(
m_val,
m_val, r.m_val);
return *
this; }
580 {
rational r(*
this); r *= i;
return r; }
595 {
rational r(*
this); r *= i;
return r; }
610 {
rational k(*
this); k *= r;
return k; }
629 { mpq_mul(
m_val,
m_val, r.m_val);
return *
this; }
638 {
rational r(*
this); r /= i;
return r; }
654 {
rational r(*
this); r /= i;
return r; }
660 {
rational k(*
this); k /= r;
return k; }
749 buf = mpq_get_str(buf, 10,
m_val);
750 s = std::string(buf);
758 mpq_get_num(numerator,
m_val);
759 return integer(std::move(numerator));
765 mpz_init(denominator);
766 mpq_get_den(denominator,
m_val);
767 return integer(std::move(denominator));
Arbitrary precision integer.
Definition integer.hpp:60
Exact rational number.
Definition rational.hpp:63
rational pow(const integer &i) const noexcept
Exponentiation operator.
rational(integer &&n, integer &&d) noexcept
Move constructor with numerator and denominator.
friend bool operator>(int64_t i, const rational &r) noexcept
Greater than operator.
Definition rational.hpp:390
void swap(rational &r) noexcept
Swaps the value of this rational with rational r's value.
Definition rational.hpp:781
void set_si(int64_t n, uint64_t d=1) noexcept
Overwrites the value of this rational with .
Definition rational.hpp:123
void set_str(const std::string &s) noexcept
Overwrites the value in the string s.
Definition rational.hpp:144
bool is_initialized() const noexcept
Returns whether this object is initialised or not.
Definition rational.hpp:705
rational(integer &&v) noexcept
Move constructor.
std::string to_string() const noexcept
Converts this integer to a string.
Definition rational.hpp:741
void set_integer(const integer &n, const integer &d) noexcept
Overwrites the value of this rational with the value .
Definition rational.hpp:155
rational & operator+=(int64_t i) noexcept
Addition operator.
Definition rational.hpp:497
int32_t get_sign() const noexcept
Returns the sign of this rational.
Definition rational.hpp:707
rational(int64_t n, uint64_t d=1) noexcept
Constructor with numerator and denominator.
Definition rational.hpp:74
rational & operator-=(int64_t i) noexcept
Substraction operator.
Definition rational.hpp:558
friend rational operator/(int64_t i, const rational &r) noexcept
Division operator.
Definition rational.hpp:645
friend rational operator+(int64_t i, const rational &r) noexcept
Addition operator.
Definition rational.hpp:468
void as_double(double &d) const noexcept
Converts this rational to a double-precision floating-point value.
Definition rational.hpp:738
rational(const std::string &s) noexcept
Constructor with string.
Definition rational.hpp:87
size_t bytes() const noexcept
Returns the amount of bytes this integer occupies.
void as_string(std::string &s) const noexcept
Converts this integer to a string.
Definition rational.hpp:747
rational(const rational &r) noexcept
Copy constructor.
Definition rational.hpp:93
rational pow(uint64_t i) const noexcept
Exponentiation operator.
rational & operator/=(int64_t i) noexcept
Division operator.
rational & operator*=(int64_t i) noexcept
Multiplication operator.
Definition rational.hpp:616
rational & powt(const integer &i) noexcept
Exponentiation operator.
rational operator-() const noexcept
Substraction unary operator.
Definition rational.hpp:515
rational() noexcept
Empty constructor.
Definition rational.hpp:68
void as_integer(integer &i) const noexcept
Converts this rational to an integer value.
void set_rational(const rational &r) noexcept
Overwrites the value of this rational with the value .
Definition rational.hpp:166
void set_ui(uint64_t n, uint64_t d=1) noexcept
Overwrites the value of this rational with .
Definition rational.hpp:134
friend bool operator!=(int64_t i, const rational &r) noexcept
Non-equality operator.
Definition rational.hpp:273
friend bool operator<=(int64_t i, const rational &r) noexcept
Less than or equal to operator.
Definition rational.hpp:351
integer get_denominator() const noexcept
Returns the denominator of this rational number.
Definition rational.hpp:763
bool m_initialized
Is this rational initialised?
Definition rational.hpp:796
integer to_integer() const noexcept
Converts this rational to an integer value.
Definition rational.hpp:721
rational(rational &&r) noexcept
Move constructor.
rational & powt(uint64_t i) noexcept
Exponentiation operator.
friend bool operator>=(int64_t i, const rational &r) noexcept
Greater than or equal to operator.
Definition rational.hpp:429
void invert() noexcept
Changes numerator and denominator.
Definition rational.hpp:177
friend void swap(rational &r1, rational &r2) noexcept
Swaps two rationals.
Definition rational.hpp:789
friend bool operator<(int64_t i, const rational &r) noexcept
Less than operator.
Definition rational.hpp:312
rational & operator=(int64_t i) noexcept
Assignment operator.
Definition rational.hpp:187
double to_double() const noexcept
Converts this rational to a double-precision floating-point value.
Definition rational.hpp:736
rational(const integer &n, const integer &d=1) noexcept
Constructor with numerator and denominator.
Definition rational.hpp:81
integer get_numerator() const noexcept
Returns the numerator of this rational number.
Definition rational.hpp:755
friend bool operator==(int64_t i, const rational &r) noexcept
Equality operator.
Definition rational.hpp:234
~rational() noexcept
Destructor.
Definition rational.hpp:114
mpq_t m_val
Structure from GMP storing the rational's value.
Definition rational.hpp:794
friend rational operator*(int64_t i, const rational &r) noexcept
Multiplication operator.
Definition rational.hpp:587
rational rational_from_ui(uint64_t n, uint64_t d=1) noexcept
Make a rational value from two 64-bit unsigned integers.
Definition rational.hpp:800
Main namespace of the library.
Definition definitions.hpp:48