55#ifndef LASS_GUARDIAN_OF_INCLUSION_NUM_POLYNOMIAL_QUOTIENT_H
56#define LASS_GUARDIAN_OF_INCLUSION_NUM_POLYNOMIAL_QUOTIENT_H
67class PolynomialQuotient
71 typedef PolynomialQuotient<T> TSelf;
72 typedef Polynomial<T> TPolynomial;
73 typedef NumTraits<T> TNumTraits;
74 typedef typename util::CallTraits<T>::TValue TValue;
75 typedef typename util::CallTraits<T>::TParam TParam;
76 typedef typename util::CallTraits<T>::TReference TReference;
77 typedef typename util::CallTraits<T>::TConstReference TConstReference;
78 typedef std::vector<TValue> TCoefficients;
79 typedef std::pair<TCoefficients, TCoefficients> TCoefficientsPair;
82 explicit PolynomialQuotient(TParam scalar);
83 explicit PolynomialQuotient(
const TCoefficients& numerator);
84 explicit PolynomialQuotient(
const TPolynomial& numerator);
85 explicit PolynomialQuotient(
const TCoefficientsPair& numeratorDenominator);
86 PolynomialQuotient(TParam scalar,
const TCoefficients& denominator);
87 PolynomialQuotient(TParam scalar,
const TPolynomial& denominator);
88 PolynomialQuotient(
const TCoefficients& numerator,
const TCoefficients& denominator);
89 PolynomialQuotient(
const TPolynomial& numerator,
const TPolynomial& denominator);
90 template <
typename InputIterator> PolynomialQuotient(InputIterator numFirst, InputIterator numLast);
91 template <
typename InputIterator> PolynomialQuotient(InputIterator numFirst, InputIterator numLast,
92 InputIterator denFirst, InputIterator denLast);
94 const TPolynomial& numerator()
const;
95 const TPolynomial& denominator()
const;
97 const TValue operator()(TParam x)
const;
99 const TSelf& operator+()
const;
100 const TSelf operator-()
const;
102 TSelf& operator+=(
const TSelf& other);
103 TSelf& operator-=(
const TSelf& other);
104 TSelf& operator*=(
const TSelf& other);
105 TSelf& operator/=(
const TSelf& other);
107 TSelf& operator+=(
const TPolynomial& other);
108 TSelf& operator-=(
const TPolynomial& other);
109 TSelf& operator*=(
const TPolynomial& other);
110 TSelf& operator/=(
const TPolynomial& other);
112 TSelf& operator+=(TParam scalar);
113 TSelf& operator-=(TParam scalar);
114 TSelf& operator*=(TParam scalar);
115 TSelf& operator/=(TParam scalar);
117 TSelf derivative()
const;
118 TSelf pow(
unsigned power)
const;
125 TPolynomial numerator_;
126 TPolynomial denominator_;
129template <
typename T>
bool operator==(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
130template <
typename T>
bool operator!=(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
132template <
typename T> PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
133template <
typename T> PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
134template <
typename T> PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
135template <
typename T> PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b);
137template <
typename T> PolynomialQuotient<T> operator+(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b);
138template <
typename T> PolynomialQuotient<T> operator-(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b);
139template <
typename T> PolynomialQuotient<T> operator*(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b);
140template <
typename T> PolynomialQuotient<T> operator/(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b);
142template <
typename T> PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b);
143template <
typename T> PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b);
144template <
typename T> PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b);
145template <
typename T> PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b);
147template <
typename T> PolynomialQuotient<T> operator+(
const T& a,
const PolynomialQuotient<T>& b);
148template <
typename T> PolynomialQuotient<T> operator-(
const T& a,
const PolynomialQuotient<T>& b);
149template <
typename T> PolynomialQuotient<T> operator*(
const T& a,
const PolynomialQuotient<T>& b);
150template <
typename T> PolynomialQuotient<T> operator/(
const T& a,
const PolynomialQuotient<T>& b);
152template <
typename T> PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const T& b);
153template <
typename T> PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const T& b);
154template <
typename T> PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const T& b);
155template <
typename T> PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const T& b);
159template <
typename T,
typename Char,
typename Traits>
160std::basic_ostream<Char, Traits>&
161operator<<(std::basic_ostream<Char, Traits>& s,
const PolynomialQuotient<T>& a);
an univariate polynomial.
numeric types and traits.
Library for Assembled Shared Sources.