43#ifndef LASS_GUARDIAN_OF_INCLUSION_NUM_POLYNOMIAL_QUOTIENT_INL
44#define LASS_GUARDIAN_OF_INCLUSION_NUM_POLYNOMIAL_QUOTIENT_INL
57PolynomialQuotient<T>::PolynomialQuotient():
65PolynomialQuotient<T>::PolynomialQuotient(TParam scalar):
67 denominator_(TNumTraits::one)
74PolynomialQuotient<T>::PolynomialQuotient(
const TCoefficients& numerator):
75 numerator_(numerator),
76 denominator_(TNumTraits::one)
83PolynomialQuotient<T>::PolynomialQuotient(
const TPolynomial& numerator):
84 numerator_(numerator),
85 denominator_(TNumTraits::one)
92PolynomialQuotient<T>::PolynomialQuotient(
const TCoefficientsPair& numeratorDenominator):
93 numerator_(numeratorDenominator.first),
94 denominator_(numeratorDenominator.second)
101PolynomialQuotient<T>::PolynomialQuotient(TParam scalar,
const TCoefficients& denominator):
103 denominator_(denominator)
110PolynomialQuotient<T>::PolynomialQuotient(TParam scalar,
const TPolynomial& denominator):
112 denominator_(denominator)
119PolynomialQuotient<T>::PolynomialQuotient(
const TCoefficients& numerator,
const TCoefficients& denominator):
120 numerator_(numerator),
121 denominator_(denominator)
128PolynomialQuotient<T>::PolynomialQuotient(
const TPolynomial& numerator,
const TPolynomial& denominator):
129 numerator_(numerator),
130 denominator_(denominator)
136template <
typename InputIterator>
137PolynomialQuotient<T>::PolynomialQuotient(InputIterator numFirst, InputIterator numLast):
138 numerator_(numFirst, numLast),
139 denominator_(TNumTraits::one)
145template <
typename InputIterator>
146PolynomialQuotient<T>::PolynomialQuotient(
147 InputIterator numFirst, InputIterator numLast, InputIterator denFirst, InputIterator denLast):
148 numerator_(numFirst, numLast),
149 denominator_(denFirst, denLast)
155template <
typename T>
inline
156const typename PolynomialQuotient<T>::TPolynomial&
157PolynomialQuotient<T>::numerator()
const
164template <
typename T>
inline
165const typename PolynomialQuotient<T>::TPolynomial&
166PolynomialQuotient<T>::denominator()
const
174const typename PolynomialQuotient<T>::TValue
175PolynomialQuotient<T>::operator()(TParam x)
const
177 return numerator_(x) / denominator_(x);
183const PolynomialQuotient<T>& PolynomialQuotient<T>::operator+()
const
191const PolynomialQuotient<T> PolynomialQuotient<T>::operator-()
const
193 return TSelf(-numerator_, denominator_);
199PolynomialQuotient<T>& PolynomialQuotient<T>::operator+=(
const TSelf& other)
201 numerator_ = numerator_ * other.denominator_ + other.numerator_ * other.denominator_;
202 denominator_ *= other.denominator_;
209PolynomialQuotient<T>& PolynomialQuotient<T>::operator-=(
const TSelf& other)
211 numerator_ = numerator_ * other.denominator_ - other.numerator_ * other.denominator_;
212 denominator_ *= other.denominator_;
219PolynomialQuotient<T>& PolynomialQuotient<T>::operator*=(
const TSelf& other)
221 numerator_ *= other.numerator_;
222 denominator_ *= other.denominator_;
229PolynomialQuotient<T>& PolynomialQuotient<T>::operator/=(
const TSelf& other)
231 numerator_ *= other.denominator_;
232 denominator_ *= other.numerator_;
239PolynomialQuotient<T>& PolynomialQuotient<T>::operator+=(
const Polynomial<T>& other)
241 numerator_ += other * denominator_;
248PolynomialQuotient<T>& PolynomialQuotient<T>::operator-=(
const Polynomial<T>& other)
250 numerator_ -= other * denominator_;
257PolynomialQuotient<T>& PolynomialQuotient<T>::operator*=(
const Polynomial<T>& other)
266PolynomialQuotient<T>& PolynomialQuotient<T>::operator/=(
const Polynomial<T>& other)
268 denominator_ *= other;
275PolynomialQuotient<T>& PolynomialQuotient<T>::operator+=(TParam scalar)
277 numerator_ += scalar * denominator_;
284PolynomialQuotient<T>& PolynomialQuotient<T>::operator-=(TParam scalar)
286 numerator_ -= scalar * denominator_;
293PolynomialQuotient<T>& PolynomialQuotient<T>::operator*=(TParam scalar)
295 numerator_ *= scalar;
302PolynomialQuotient<T>& PolynomialQuotient<T>::operator/=(TParam scalar)
304 numerator_ /= scalar;
311PolynomialQuotient<T> PolynomialQuotient<T>::derivative()
const
313 const TPolynomial num = denominator_ * numerator_.derivative() - denominator_.derivative() * numerator_;
314 const TPolynomial den = denominator_ * denominator_;
315 return TSelf(num, den);
321PolynomialQuotient<T> PolynomialQuotient<T>::pow(
unsigned power)
const
323 return PolynomialQuotient<T>(numerator_.pow(power), denominator_.pow(power));
329PolynomialQuotient<T> PolynomialQuotient<T>::one()
331 static PolynomialQuotient result(1);
338PolynomialQuotient<T> PolynomialQuotient<T>::x()
340 static TValue coefficients[2] = { 0, 1 };
341 static PolynomialQuotient result(coefficients, coefficients + 2);
350bool operator==(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
352 return a.numerator() == b.numerator() && a.denominator() == b.denominator();
357template <
typename T>
inline
358bool operator!=(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
365template <
typename T>
inline
366PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
368 PolynomialQuotient<T> result(a);
375template <
typename T>
inline
376PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
378 PolynomialQuotient<T> result(a);
385template <
typename T>
inline
386PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
388 PolynomialQuotient<T> result(a);
395template <
typename T>
inline
396PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const PolynomialQuotient<T>& b)
398 PolynomialQuotient<T> result(a);
405template <
typename T>
inline
406PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b)
408 PolynomialQuotient<T> result(a);
415template <
typename T>
inline
416PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b)
418 PolynomialQuotient<T> result(a);
425template <
typename T>
inline
426PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b)
428 PolynomialQuotient<T> result(a);
435template <
typename T>
inline
436PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const Polynomial<T>& b)
438 PolynomialQuotient<T> result(a);
445template <
typename T>
inline
446PolynomialQuotient<T> operator+(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b)
448 PolynomialQuotient<T> result(b);
455template <
typename T>
inline
456PolynomialQuotient<T> operator-(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b)
458 PolynomialQuotient<T> result(a);
465template <
typename T>
inline
466PolynomialQuotient<T> operator*(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b)
468 PolynomialQuotient<T> result(b);
475template <
typename T>
inline
476PolynomialQuotient<T> operator/(
const Polynomial<T>& a,
const PolynomialQuotient<T>& b)
478 PolynomialQuotient<T> result(a);
485template <
typename T>
inline
486PolynomialQuotient<T> operator+(
const T& a,
const PolynomialQuotient<T>& b)
488 PolynomialQuotient<T> result(b);
495template <
typename T>
inline
496PolynomialQuotient<T> operator-(
const T& a,
const PolynomialQuotient<T>& b)
498 PolynomialQuotient<T> result(-b);
505template <
typename T>
inline
506PolynomialQuotient<T> operator*(
const T& a,
const PolynomialQuotient<T>& b)
508 PolynomialQuotient<T> result(b);
515template <
typename T>
inline
516PolynomialQuotient<T> operator/(
const T& a,
const PolynomialQuotient<T>& b)
518 PolynomialQuotient<T> result(a);
525template <
typename T>
inline
526PolynomialQuotient<T> operator+(
const PolynomialQuotient<T>& a,
const T& b)
528 PolynomialQuotient<T> result(a);
535template <
typename T>
inline
536PolynomialQuotient<T> operator-(
const PolynomialQuotient<T>& a,
const T& b)
538 PolynomialQuotient<T> result(a);
545template <
typename T>
inline
546PolynomialQuotient<T> operator*(
const PolynomialQuotient<T>& a,
const T& b)
548 PolynomialQuotient<T> result(a);
555template <
typename T>
inline
556PolynomialQuotient<T> operator/(
const PolynomialQuotient<T>& a,
const T& b)
558 PolynomialQuotient<T> result(a);
565template <
typename T>
inline
566PolynomialQuotient<T> operator/(
const Polynomial<T>& a,
const Polynomial<T>& b)
568 return PolynomialQuotient<T>(a, b);
573template <
typename T,
typename Char,
typename Traits>
574std::basic_ostream<Char, Traits>&
575operator<<(std::basic_ostream<Char, Traits>& s,
const PolynomialQuotient<T>& a)
577 s <<
"(" << a.numerator() <<
")/(" << a.denominator() <<
")";
numeric types and traits.
Library for Assembled Shared Sources.