]> www.ginac.de Git - ginac.git/blobdiff - ginac/normal.h
Univariate Hensel lifting now uses upoly.
[ginac.git] / ginac / normal.h
index 02f90688c8aebafea5b82d54283cc5727f28378b..5a735e346a8f485bfeaf1811ba329951b90c39c9 100644 (file)
@@ -6,7 +6,7 @@
  *  computation, square-free factorization and rational function normalization. */
 
 /*
- *  GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2008 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
 #ifndef __GINAC_NORMAL_H__
 
 namespace GiNaC {
 
+/**
+ * Flags to control the behaviour of gcd() and friends
+ */
+struct gcd_options
+{
+       enum {
+               /**
+                * Usually GiNaC tries heuristic GCD algorithm before PRS.
+                * Some people don't like this, so here's a flag to disable it.
+                */
+               no_heur_gcd = 2,
+               /**
+                * GiNaC tries to avoid expanding expressions when computing
+                * GCDs. This is a good idea, but some people dislike it.
+                * Hence the flag to disable special handling of partially
+                * factored polynomials. DON'T SET THIS unless you *really*
+                * know what are you doing!
+                */
+               no_part_factored = 4
+       };
+};
+
 class ex;
 class symbol;
 
@@ -52,7 +74,8 @@ extern ex sprem(const ex &a, const ex &b, const ex &x, bool check_args = true);
 extern bool divide(const ex &a, const ex &b, ex &q, bool check_args = true);
 
 // Polynomial GCD in Z[X], cofactors are returned in ca and cb, if desired
-extern ex gcd(const ex &a, const ex &b, ex *ca = NULL, ex *cb = NULL, bool check_args = true);
+extern ex gcd(const ex &a, const ex &b, ex *ca = NULL, ex *cb = NULL,
+             bool check_args = true, unsigned options = 0);
 
 // Polynomial LCM in Z[X]
 extern ex lcm(const ex &a, const ex &b, bool check_args = true);
@@ -66,6 +89,9 @@ extern ex sqrfree_parfrac(const ex & a, const symbol & x);
 // Collect common factors in sums.
 extern ex collect_common_factors(const ex & e);
 
+// Resultant of two polynomials e1,e2 with respect to symbol s.
+extern ex resultant(const ex & e1, const ex & e2, const ex & s);
+
 } // namespace GiNaC
 
 #endif // ndef __GINAC_NORMAL_H__