27#include <libavutil/rational.h>
80 template<
typename R =
double>
83 return num_ / (
R) den_;
92 return {num_ * r.den_ + r.num_ * den_, den_ * r.den_};
96 return {num_ * r.den_ - r.num_ * den_, den_ * r.den_};
103 std::swap(*
this, *
this + r);
108 std::swap(*
this, *
this - r);
166 explicit constexpr operator bool()
const {
return num_; }
171 bool inv = (den_ > 0) != (r.den_ > 0);
172 return inv != (num_ * r.den_ < den_ * r.num_);
176 bool inv = (den_ > 0) != (r.den_ > 0);
177 return inv != (num_ * r.den_ > den_ * r.num_);
183 constexpr bool operator<(
I i)
const {
return den_ < 0 ? (num_ >
i * den_) : (num_ <
i * den_); }
184 constexpr bool operator>(
I i)
const {
return den_ < 0 ? (num_ <
i * den_) : (num_ >
i * den_); }
195 if (std::is_integral<I>::value) {
197 auto g = gcd(num_ >= 0 ? num_ : -num_, den_ >= 0 ? den_ : -den_);
222template<
typename I,
typename II>
224template<
typename I,
typename II>
245 is >> r.num_ >>
sep >> r.den_;
258template<
typename T,
typename I>
265struct modulus<double>
267 double operator()(
const double& lhs,
const double& rhs)
const {
return std::fmod(lhs, rhs); }
Naive implementation of the boost::rational interface, described here: http://www....
constexpr bool operator!() const
constexpr bool operator<(I i) const
constexpr bool operator>(const rational &r) const
rational & operator=(I n)
constexpr rational operator-(const rational &r) const
constexpr bool operator!=(I i) const
constexpr bool operator==(const rational &r) const
constexpr I denominator() const
constexpr bool operator!=(const rational &r) const
constexpr bool operator==(I i) const
rational & operator*=(I i)
rational & operator*=(const rational &r)
constexpr rational operator/(const rational &r) const
constexpr I numerator() const
constexpr rational(AVRational r)
const rational & operator++()
constexpr bool operator<(const rational &r) const
rational & operator/=(const rational &r)
constexpr rational operator+(const rational &r) const
rational & operator+=(const rational &r)
constexpr bool operator>(I i) const
rational & operator/=(I i)
rational & operator-=(I i)
const rational & operator--()
constexpr rational(I n, I d)
constexpr rational operator*(const rational &r) const
rational & assign(I n, I d)
rational & operator+=(I i)
rational & operator-=(const rational &r)
rational< I > abs(const rational< I > &r)
void emitSignal(Args... args)
rational< I > operator+(const rational< I > &r)
std::istream & operator>>(std::istream &is, rational< I > &r)
T rational_cast(const rational< I > &r)
rational< I > operator-(const rational< I > &r)
rational< I > operator/(II i, const rational< I > &r)
static std::ostream & operator<<(std::ostream &os, const Account &acc)