📄 polynomial.h
字号:
// SPECIALIZING pure int params: // lefthand side template <class NT> Polynomial<NT> operator + (const int& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) + p2); } template <class NT> Polynomial<NT> operator - (const int& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) - p2); } template <class NT> Polynomial<NT> operator * (const int& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) * p2); } template <class NT> Polynomial<NT> operator / (const int& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)/p2); } template <class NT> Polynomial<NT> operator % (const int& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)%p2); } // righthand side template <class NT> Polynomial<NT> operator + (const Polynomial<NT>& p1, const int& num) { return (p1 + Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator - (const Polynomial<NT>& p1, const int& num) { return (p1 - Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator * (const Polynomial<NT>& p1, const int& num) { return (p1 * Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator / (const Polynomial<NT>& p1, const int& num) { return (p1 / Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator % (const Polynomial<NT>& p1, const int& num) { return (p1 % Polynomial<NT>(num)); } // lefthand side template <class NT> bool operator == (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );} template <class NT> bool operator != (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );} template <class NT> bool operator < (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const int& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );} // righthand side template <class NT> bool operator == (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );} template <class NT> bool operator != (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );} template <class NT> bool operator < (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const Polynomial<NT>& p, const int& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZING inline to : // lefthand side inline Polynomial<double> operator + (const double& num, const Polynomial<double>& p2) { return (Polynomial<double>(num) + p2); } inline Polynomial<double> operator - (const double& num, const Polynomial<double>& p2) { return (Polynomial<double>(num) - p2); } inline Polynomial<double> operator * (const double& num, const Polynomial<double>& p2) { return (Polynomial<double>(num) * p2); } inline Polynomial<double> operator / (const double& num, const Polynomial<double>& p2) { return (Polynomial<double>(num)/p2); } inline Polynomial<double> operator % (const double& num, const Polynomial<double>& p2) { return (Polynomial<double>(num)%p2); } // righthand side inline Polynomial<double> operator + (const Polynomial<double>& p1, const double& num) { return (p1 + Polynomial<double>(num)); } inline Polynomial<double> operator - (const Polynomial<double>& p1, const double& num) { return (p1 - Polynomial<double>(num)); } inline Polynomial<double> operator * (const Polynomial<double>& p1, const double& num) { return (p1 * Polynomial<double>(num)); } inline Polynomial<double> operator / (const Polynomial<double>& p1, const double& num) { return (p1 / Polynomial<double>(num)); } inline Polynomial<double> operator % (const Polynomial<double>& p1, const double& num) { return (p1 % Polynomial<double>(num)); } // lefthand side inline bool operator == (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() == CGAL::ZERO );} inline bool operator != (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() != CGAL::ZERO );} inline bool operator < (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() == CGAL::NEGATIVE );} inline bool operator <= (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() != CGAL::POSITIVE );} inline bool operator > (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() == CGAL::POSITIVE );} inline bool operator >= (const double& num, const Polynomial<double>& p) { return ( (Polynomial<double>(num)-p).sign() != CGAL::NEGATIVE );} // righthand side inline bool operator == (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() == CGAL::ZERO );} inline bool operator != (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() != CGAL::ZERO );} inline bool operator < (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() == CGAL::NEGATIVE );} inline bool operator <= (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() != CGAL::POSITIVE );} inline bool operator > (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() == CGAL::POSITIVE );} inline bool operator >= (const Polynomial<double>& p, const double& num) { return ( (p-Polynomial<double>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZING pure double params: // lefthand side template <class NT> Polynomial<NT> operator + (const double& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) + p2); } template <class NT> Polynomial<NT> operator - (const double& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) - p2); } template <class NT> Polynomial<NT> operator * (const double& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) * p2); } template <class NT> Polynomial<NT> operator / (const double& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)/p2); } template <class NT> Polynomial<NT> operator % (const double& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)%p2); } // righthand side template <class NT> Polynomial<NT> operator + (const Polynomial<NT>& p1, const double& num) { return (p1 + Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator - (const Polynomial<NT>& p1, const double& num) { return (p1 - Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator * (const Polynomial<NT>& p1, const double& num) { return (p1 * Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator / (const Polynomial<NT>& p1, const double& num) { return (p1 / Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator % (const Polynomial<NT>& p1, const double& num) { return (p1 % Polynomial<NT>(num)); } // lefthand side template <class NT> bool operator == (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );} template <class NT> bool operator != (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );} template <class NT> bool operator < (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const double& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );} // righthand side template <class NT> bool operator == (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );} template <class NT> bool operator != (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );} template <class NT> bool operator < (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const Polynomial<NT>& p, const double& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZE_FUNCTION ORIGINAL // lefthand side template <class NT> Polynomial<NT> operator + (const NT& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) + p2); } template <class NT> Polynomial<NT> operator - (const NT& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) - p2); } template <class NT> Polynomial<NT> operator * (const NT& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num) * p2); } template <class NT> Polynomial<NT> operator / (const NT& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)/p2); } template <class NT> Polynomial<NT> operator % (const NT& num, const Polynomial<NT>& p2) { return (Polynomial<NT>(num)%p2); } // righthand side template <class NT> Polynomial<NT> operator + (const Polynomial<NT>& p1, const NT& num) { return (p1 + Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator - (const Polynomial<NT>& p1, const NT& num) { return (p1 - Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator * (const Polynomial<NT>& p1, const NT& num) { return (p1 * Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator / (const Polynomial<NT>& p1, const NT& num) { return (p1 / Polynomial<NT>(num)); } template <class NT> Polynomial<NT> operator % (const Polynomial<NT>& p1, const NT& num) { return (p1 % Polynomial<NT>(num)); } // lefthand side template <class NT> bool operator == (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::ZERO );} template <class NT> bool operator != (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::ZERO );} template <class NT> bool operator < (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const NT& num, const Polynomial<NT>& p) { return ( (Polynomial<NT>(num)-p).sign() != CGAL::NEGATIVE );} // righthand side template <class NT> bool operator == (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::ZERO );} template <class NT> bool operator != (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::ZERO );} template <class NT> bool operator < (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::NEGATIVE );} template <class NT> bool operator <= (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::POSITIVE );} template <class NT> bool operator > (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() == CGAL::POSITIVE );} template <class NT> bool operator >= (const Polynomial<NT>& p, const NT& num) { return ( (p-Polynomial<NT>(num)).sign() != CGAL::NEGATIVE );}// SPECIALIZE_FUNCTION(NT,int double) END//------------------------------------------------------------------template <class NT> void print_monomial(std::ostream& os, const NT& n, int i){ if (i==0) os << n; if (i==1) os << n << "R"; if (i>1) os << n << "R^" << i;}// I/O template <class NT>std::ostream& operator << (std::ostream& os, const Polynomial<NT>& p){ int i; switch( os.iword(CGAL::IO::mode) ) { case CGAL::IO::ASCII : os << p.degree() << ' '; for(i=0; i<=p.degree(); ++i) os << p[i] << ' '; break; case CGAL::IO::BINARY : CGAL::write(os, p.degree()); for( i=0; i <= p.degree(); ++i) CGAL::write(os, p[i]); break; default: // i.e. PRETTY os << "Polynomial(" << p.degree() << ", "; for( i=0; i <= p.degree(); ++i) { os << p[i]; if (i < p.degree()) os << ", "; } os << ")"; // Alternative pretty format //print_monomial(os,p[p.degree()],p.degree()); //for(i=p.degree()-1; i>=0; --i) { // if (p[i]!=NT(0)) { os << " + "; print_monomial(os,p[i],i); } //} break; } return os;}template <class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -