#include "config.hpp"#include <iostream>#include <cstdlib>#include <sstream>#include <string>#include <cctype>#include <cmath>#include <functional>#include "type_traits.hpp"#include "type_pair_traits.hpp"#include "exception.hpp"#include "factory.hpp"#include "cmp.hpp"#include "io.hpp"#include "powerest.hpp"#include "big_int.hpp"#include "std_import.hpp"#include "rational.cpp"Go to the source code of this file.
Namespaces | |
| namespace | Arageli |
| namespace | std |
Classes | |
| class | Arageli::rational_base |
| Base for all rationals. More... | |
| class | Arageli::rational_base::exception |
| Exception of all rationals numbers. More... | |
| exception | Arageli::rational_base::exception::std |
| class | Arageli::rational< T > |
| Implementation of a Rational Number. More... | |
| struct | Arageli::select_numer< T > |
| Unary functor: selects a numerator of an argument of type rational. More... | |
| struct | Arageli::select_denom< T > |
| Unary functor: selects a denominator of an argument of type rational. More... | |
| struct | Arageli::factory< rational< T1 > > |
| class | std::numeric_limits< Arageli::rational< T > > |
| Specialization of standard template std::numeric_limits for rationals. More... | |
| struct | Arageli::type_traits< rational< T > > |
| Specialization of type_traits for rational. More... | |
Standard arithmetic operations. | |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator+ (const rational< T1 > &b, const rational< T2 > &c) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator- (const rational< T1 > &b, const rational< T2 > &c) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator * (const rational< T1 > &b, const rational< T2 > &c) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator/ (const rational< T1 > &b, const rational< T2 > &c) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator% (const rational< T1 > &b, const rational< T2 > &c) |
Standard arithmetic operations. | |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator+= (rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator+= (rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator+ (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator+ (const T2 &a, const rational< T1 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator-= (rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator-= (rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator- (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator- (const T2 &a, const rational< T1 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator *= (rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator *= (rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator * (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator * (const T2 &a, const rational< T1 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator/= (rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator/= (rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator/ (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator/ (const T2 &a, const rational< T1 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator%= (rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| rational< T1 > & | Arageli::operator%= (rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator% (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| rational< T1 > | Arageli::operator% (const T2 &a, const rational< T1 > &b) |
Standard comparision operators. | |
| template<typename T1, typename T2> | |
| bool | Arageli::operator< (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator< (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator< (const T1 &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator> (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator> (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator> (const T1 &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator== (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator== (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator== (const T1 &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator!= (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator!= (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator!= (const T1 &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator<= (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator<= (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator<= (const T1 &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator>= (const rational< T1 > &a, const rational< T2 > &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator>= (const rational< T1 > &a, const T2 &b) |
| template<typename T1, typename T2> | |
| bool | Arageli::operator>= (const T1 &a, const rational< T2 > &b) |
Defines | |
| #define | _ARAGELI_RATIONAL_OPERATOR_TO(TYPE) operator TYPE () const { return double(*this); } |
| #define | _ARAGELI_RATIONAL_OPERS(OPER) |
| #define | _ARAGELI_RATIONAL_CMP1(OPER) |
| #define | ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE_RATIONAL |
Functions | |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_ostream< Ch, ChT > & | Arageli::output_list (std::basic_ostream< Ch, ChT > &out, const rational< T > &x, const Ch *first_bracket=rational_output_list_first_bracket_default, const Ch *second_bracket=rational_output_list_second_bracket_default, const Ch *separator=rational_output_list_separator_default) |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_istream< Ch, ChT > & | Arageli::input_list (std::basic_istream< Ch, ChT > &in, rational< T > &x, const Ch *first_bracket=rational_input_list_first_bracket_default, const Ch *second_bracket=rational_input_list_second_bracket_default, const Ch *separator=rational_input_list_separator_default) |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_ostream< Ch, ChT > & | Arageli::output_default (std::basic_ostream< Ch, ChT > &out, const rational< T > &x, const Ch *oblique=rational_output_default_oblique_default) |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_istream< Ch, ChT > & | Arageli::input_default (std::basic_istream< Ch, ChT > &in, rational< T > &x, const Ch *oblique=rational_input_default_oblique_default) |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_ostream< Ch, ChT > & | Arageli::operator<< (std::basic_ostream< Ch, ChT > &out, const rational< T > &x) |
| Reads a rational from a string notation. | |
| template<typename T, typename Ch, typename ChT> | |
| std::basic_istream< Ch, ChT > & | Arageli::operator>> (std::basic_istream< Ch, ChT > &in, rational< T > &x) |
| Writes a rational to a string notation. | |
| template<typename T1, typename T2> | |
| int | Arageli::cmp (const rational< T1 > &a, const rational< T2 > &b) |
| Comparison of two rationals. | |
| template<typename T> | |
| int | Arageli::sign (const rational< T > &x) |
| template<typename T> | |
| bool | Arageli::is_coprime (const rational< T > &a, const rational< T > &b) |
| template<typename T> | |
| rational< T > | Arageli::gcd (const rational< T > &a, const rational< T > &b) |
| template<typename T> | |
| T | Arageli::ifloor (const rational< T > &x) |
| Floor of x. | |
| template<typename T> | |
| T | Arageli::iceil (const rational< T > &x) |
| Ceiling of x. | |
| template<typename T> | |
| rational< T > | Arageli::frac (const rational< T > &x) |
| Fractional part of x. | |
| template<typename T1> | |
| bool | Arageli::is_null (const rational< T1 > &x) |
| template<typename T1> | |
| rational< T1 > | Arageli::opposite (const rational< T1 > &x) |
| template<typename T1> | |
| rational< T1 > & | Arageli::opposite (const rational< T1 > &x, rational< T1 > *y) |
| template<typename T1> | |
| rational< T1 > & | Arageli::opposite (rational< T1 > *x) |
| template<typename T1> | |
| rational< T1 > | Arageli::inverse (const rational< T1 > &x) |
| template<typename T1> | |
| rational< T1 > & | Arageli::inverse (const rational< T1 > &x, rational< T1 > *y) |
| template<typename T1> | |
| rational< T1 > & | Arageli::inverse (rational< T1 > *x) |
| template<typename T1> | |
| std::ostream & | Arageli::output_polynom_first (std::ostream &out, const rational< T1 > &x) |
| template<typename T1> | |
| std::ostream & | Arageli::output_polynom_internal (std::ostream &out, const rational< T1 > &x) |
| template<typename T1> | |
| std::ostream & | Arageli::output_pow (std::ostream &out, const rational< T1 > &x) |
| template<typename T1> | |
| std::istream & | Arageli::input_polynom_first (std::istream &in, rational< T1 > &x) |
| template<typename T1> | |
| std::istream & | Arageli::input_polynom_internal (std::istream &in, rational< T1 > &x) |
| template<typename T1> | |
| std::istream & | Arageli::input_pow (std::istream &in, rational< T1 > &x) |
| template<typename T> | |
| rational< T > | Arageli::abs (const rational< T > &x) |
| Absolute value of x. | |
| template<typename T> | |
| rational< T > | Arageli::floor (const rational< T > &x) |
| Floor of x. | |
| template<typename T> | |
| rational< T > | Arageli::ceil (const rational< T > &x) |
| Ceiling of x. | |
| template<typename T> | |
| Arageli::rational< T > | std::abs (const Arageli::rational< T > &x) |
| Absolute value of x. | |
| template<typename T> | |
| Arageli::rational< T > | std::floor (const Arageli::rational< T > &x) |
| Floor of x. | |
| template<typename T> | |
| Arageli::rational< T > | std::ceil (const Arageli::rational< T > &x) |
| Ceiling of x. | |
| template<typename T> | |
| void | std::swap (Arageli::rational< T > &a, Arageli::rational< T > &b) |
| Swaps two rationals without actully copying (if possible). | |
| template<typename T1, typename T2> | |
| void | std::swap (Arageli::rational< T1 > &a, Arageli::rational< T2 > &b) |
| Swaps two rationals without actully copying (if possible). | |
Variables | |
| const char * | Arageli::rational_output_list_first_bracket_default |
| const char * | Arageli::rational_output_list_second_bracket_default |
| const char * | Arageli::rational_output_list_separator_default |
| const char * | Arageli::rational_input_list_first_bracket_default |
| const char * | Arageli::rational_input_list_second_bracket_default |
| const char * | Arageli::rational_input_list_separator_default |
| const char * | Arageli::rational_output_default_oblique_default |
| const char * | Arageli::rational_input_default_oblique_default |
Definition in file rational.hpp.
| #define _ARAGELI_RATIONAL_CMP1 | ( | OPER | ) |
Value:
template <typename T1, typename T2> \ inline bool operator OPER \ (const rational<T1>& a, const rational<T2>& b) \ { return cmp(a, b) OPER 0; } \ \ template <typename T1, typename T2> \ inline bool operator OPER \ (const rational<T1>& a, const T2& b) \ { return cmp(a, rational<T2>(b)) OPER 0; } /* WARNING! */ \ \ template <typename T1, typename T2> \ inline bool operator OPER \ (const T1& a, const rational<T2>& b) \ { return cmp(rational<T1>(a), b) OPER 0; }
Definition at line 515 of file rational.hpp.
| #define _ARAGELI_RATIONAL_OPERATOR_TO | ( | TYPE | ) | operator TYPE () const { return double(*this); } |
Converts from rational to integer base type T by division. Returns the result of (integer) division numerator/denominator.
Definition at line 136 of file rational.hpp.
| #define _ARAGELI_RATIONAL_OPERS | ( | OPER | ) |
Value:
template <typename T1, typename T2> \ inline rational<T1>& operator OPER##= \ (rational<T1>& a, const rational<T2>& b) \ { return a = a OPER b; } \ \ template <typename T1, typename T2> \ inline rational<T1>& operator OPER##= \ (rational<T1>& a, const T2& b) \ { return a = a OPER rational<T1>(b); } \ \ template <typename T1, typename T2> \ inline rational<T1> operator OPER \ (const rational<T1>& a, const T2& b) \ { return a OPER rational<T1>(b); } \ \ template <typename T1, typename T2> \ inline rational<T1> operator OPER \ (const T2& a, const rational<T1>& b) \ { return rational<T1>(a) OPER b; }
Definition at line 444 of file rational.hpp.
| #define ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE_RATIONAL |
Definition at line 960 of file rational.hpp.
1.4.7