Jens Vollinga [Sun, 9 Aug 2009 21:38:48 +0000 (23:38 +0200)]
Added get_builtin_reader() that parses only the builtin GiNaC functions
and pow, sqrt, and power.
Jens Vollinga [Sun, 9 Aug 2009 21:27:10 +0000 (23:27 +0200)]
Fixed include of stdint.h (parser.cpp needs the header as well).
Alexei Sheplyakov [Sat, 8 Aug 2009 08:43:12 +0000 (11:43 +0300)]
Fix the compliation error *for real* ... and restore performance
Commit
8bf0597dde55e4c94a2ff39f1d8130902e3d7a9b (titled as 'Fixed the parser
such that it can read in user defined classes again.') made the parser a bit
slower, especially if the input contains many terms of user-defined type.
The reason for that is quite simple: we throw and catch an exception every
time we construct an object of user-defined type:
// dirty hack to distinguish between serial numbers of functions and real
// pointers.
GiNaC::function* f = NULL;
try {
unsigned serial = (unsigned)(unsigned long)(void *)(reader->second);
f = new GiNaC::function(serial, args);
}
catch ( std::runtime_error ) {
if ( f ) delete f;
ex ret = reader->second(args);
return ret;
}
Fortunately functions are aligned and we can use much more efficient
technique to distinguish between serial and pointers to functions.
Alexei Sheplyakov [Fri, 7 Aug 2009 20:22:18 +0000 (23:22 +0300)]
Fix the compliation error *for real*
Jens Vollinga [Fri, 31 Jul 2009 15:54:16 +0000 (17:54 +0200)]
Fixed memory leak.
Jens Vollinga [Fri, 31 Jul 2009 13:29:17 +0000 (15:29 +0200)]
Jens Vollinga [Fri, 31 Jul 2009 12:41:08 +0000 (14:41 +0200)]
Fixed dirty hack in parser to distinguish between serial numbers and pointers.
Jens Vollinga [Fri, 31 Jul 2009 10:48:58 +0000 (12:48 +0200)]
Fixed the parser such that it can read in user defined classes again.
Fixed default reader to parse also pow, sqrt and power.
Jens Vollinga [Fri, 31 Jul 2009 09:14:01 +0000 (11:14 +0200)]
Fixed cast that caused compile error on 64bit machines.
Jens Vollinga [Wed, 15 Jul 2009 06:26:33 +0000 (08:26 +0200)]
Allow user defined functions to be parsed.
This patch is an ugly hack that does the same as the commit
f38cbcd651246fb5c1294705d29399f3cbfddaf5
but without changing the ABI (so it can be used in ginac_1-5).
Alexei Sheplyakov [Thu, 9 Dec 2010 18:42:50 +0000 (20:42 +0200)]
Revert "Changed the parser such that it understands all defined functions"
This reverts commit
f38cbcd651246fb5c1294705d29399f3cbfddaf5, which
broke parsing user-defined classes.
Richard Kreckel [Thu, 9 Dec 2010 08:18:34 +0000 (09:18 +0100)]
Make symbol::name be initialized lazily.
This fixes symbol::get_name(), which returned an empty string instead of
"symbol" followed by the serial number if the symbol's name wasn't
specified in the constructor.
Thanks to Warren Weckesser for reporting this bug.
Alexei Sheplyakov [Fri, 3 Dec 2010 23:36:50 +0000 (00:36 +0100)]
[PATCH 2/2] chinrem_gcd: return correct integer content when GCD is a number.
This patch fixes a silly typo and makes chinrem_gcd work correctly with
polynomials which are "almost" (up to an integer coefficient) relatively
prime.
Thanks to Ernst Moritz Hahn for a bug report and a test case.
Alexei Sheplyakov [Fri, 3 Dec 2010 23:35:06 +0000 (00:35 +0100)]
[PATCH 1/2] extract_integer_content: check for rational numbers properly.
Commit
3d09388a (titled as `[bugfix] chinrem_gcd: handle polynomials over
rationals properly.') broke extract_integer_content: now it always returns 1.
The check for rational `integer_contnent' introduced by that commit is wrong
(since integers is a subset of rationals). Rewrite the check proprerly.
Alexei Sheplyakov [Tue, 23 Nov 2010 16:45:52 +0000 (17:45 +0100)]
[bugfix] chinrem_gcd: handle polynomials over rationals properly.
* extract_integer_content():
integer_content() can also return a rational number, e.g if the expression
is a polynomial over rationals (in this case expr/content is polynomial
over integers with integer content being 1). Therefore check if
integer_content() is really an integer (and if it's not just return 1,
GCD for polynomials over a field is defined up to arbitrary element of
the field).
This fixes possible segfault when computing GCD of polynomials over
rationals (this is not theoretical, see the added test case).
Thanks to Ernst Moritz Hahn for reporting this bug.
Alexei Sheplyakov [Tue, 9 Nov 2010 07:27:47 +0000 (08:27 +0100)]
power::series(): handle someg (trivial) singularities of the exponent...
... so GiNaC can expand expressions like
cos(x)^(sin(x)/x) // (x -> 0)
(1 + x)^(1/x) // x -> 0
and so on.
[Reported by Camille Gillot.]
Alexei Sheplyakov [Sat, 9 Oct 2010 16:39:41 +0000 (18:39 +0200)]
mul: algebraic_subs_mul(), has(): don't write beyond the end of array
algebraic_match_mul_with_mul() iterates over operands of mul, that is
for (size_t i=0; i<e.nops(); ++i)
However, the size of arrays (`vectors' in STL speak) passed to this
function is seq.size(), which is nops() - 1 for any mul object. Thus
algebraic_match_mul_with_mul() accesses beyond the arrays limit. Usually
it's not a problem, since any reasonable implementation of std::vector<bool>
packs booleans into ints (or longs). However, some STL implementations
(in particular, the one shipped with msvc) are more picky, and access
beyond the vector<bool> limits results in a segfault. Therefore let's
play safe and allocate proper number of elements (that is, nops()) for
those arrays (subsed and currsubsed).
Alexei Sheplyakov [Mon, 4 Oct 2010 07:21:05 +0000 (09:21 +0200)]
Avoid infinite loop when unarchiving realsymbol and possymbol.
symbol::read_archive(): explicitly set status_flags::evaluated (and
status_flags::expanded) on object being unarchived. These flags get
reset by basic::operator=(const basic&) for realsymbol and possymbol,
and nothing sets (except symbol ctor), so automatic evaluation never
terminates (or rather, terminates due to a stack overflow). Therefore
it's necessary need to set status_flags::evaluated explicitly.
Thanks to Markus Fröb for a bugreport and a test case.
Alexei Sheplyakov [Sat, 8 Aug 2009 10:03:38 +0000 (13:03 +0300)]
ncmul::eval(): don't write beyond the end of the vector.
Richard Kreckel [Wed, 22 Sep 2010 22:40:38 +0000 (00:40 +0200)]
Make sure add::eval() collects all numeric terms.
Apparently, add::eval() assumed that none of the elements of its epvector
has a numeric rest. However, nothing guarantees that -- in particular
evalchildren() doesn't (and actually cannot) do so. Since there are many
places where a new add is constructed directly from an epvector, enforcing
this doesn't make sense either. One example where it did fail was found by
Burgin Erocal: real_part(1+2*(sqrt(2)+1)*(sqrt(2)-1)) returned 1+2*1, not 3.
Thanks to Burcin Erocal for reporting this bug.
Richard Kreckel [Wed, 15 Sep 2010 07:11:57 +0000 (09:11 +0200)]
Be more careful about final top-level substitution.
Substituting x==log(x) in exp(x) erroneously returned log(x) because of a
final subst(x==log(x)) after having eval'ed exp(log(x)) -> x. This final
substitution is wrong in the general case. On the other hand, the intent
is to syntactically substitute functions of a given kind etc. This patch
suppresses the final top-level substitution unless the intermediate result
is a container.
Thanks to Burcin Erocal for reporting this bug (originally described by
Kees van Schaik on sage-support@googlegroops.com).
Richard Kreckel [Mon, 13 Sep 2010 20:39:05 +0000 (22:39 +0200)]
Fix autoconf warning about AC_INIT use.
Apparently, autoconf doesn't like the angle brackets in the bug-report
argument any more. It comlains "not a literal: <ginac-list@ginac.de>".
So let's remove it. And while at it, also provide tarname and url
arguments.
Alexei Sheplyakov [Sun, 22 Aug 2010 20:09:18 +0000 (23:09 +0300)]
power::eval(): fix several memory leaks
While working on fsolve bug I've noticed the following in valgrind log:
==17455== 136 (56 direct, 80 indirect) bytes in 1 blocks are definitely lost in loss record 16 of 19
==17455== at 0x4C249C7: operator new(unsigned long) (vg_replace_malloc.c:220)
==17455== by 0x516CA70: GiNaC::power::eval(int) const (power.cpp:540)
==17455== by 0x4FC1E39: GiNaC::ex::construct_from_basic(GiNaC::basic const&) (ex.cpp:310)
==17455== by 0x406FBF: main (ex.h:255)
Heap allocated objects definitely need the status_flags::dyncallocated flag.
Alexei Sheplyakov [Sat, 21 Aug 2010 16:13:29 +0000 (19:13 +0300)]
fsolve: avoid useless numerical evaluation of the function
Don't compute f(x) if new x is outside of the interval. We don't need that
value anyway, and the function might be difficult to compute numerically or
even ill defined outside the interval.
As a result fsolve is able to find root(s) of some weird functions.
For example
fsolve((1/(sqrt(2*Pi)))*integral(t, 0, x, exp(-1/2*t^2)) == 0.5, x, 0, 100)
actually works now.
Alexei Sheplyakov [Thu, 19 Aug 2010 08:10:25 +0000 (11:10 +0300)]
integral::evalf(): don't attempt to ignore problems.
Don't ignore exceptions thrown by numerical integration routine.
In general, the code like this
try {
// blah-blah
} catch (std::exception& err) { }
is just plain evil. Case in the point:
fsolve((1/(sqrt(2*Pi)))*integral(t,0,x,exp(-1/2*t^2))==0.5,x,0,100)
Alexei Sheplyakov [Wed, 18 Aug 2010 21:07:13 +0000 (00:07 +0300)]
fsolve: check if evalf() return value is actually a number.
Fixes the segfault triggered by
fsolve((1/(sqrt(2*Pi)))*integral(t,0,x,exp(-1/2*t^2))==0.5,x,0,100)
In general, ex_to is unsafe, and should be used only after proper checks.
evalf() may return non-numeric expression for various reasons (bad
convergence, floating point over- or underflow, out of memory, etc).
So let's add missing checks.
Thanks to Ernst Moritz Hahn for a bug report.
Jens Vollinga [Tue, 6 Jul 2010 12:38:36 +0000 (14:38 +0200)]
Removed trailing spaces.
Jens Vollinga [Tue, 6 Jul 2010 09:23:21 +0000 (11:23 +0200)]
Texinfo interprets @strong{Note...} as a cross reference and gives a
warning about it. Changed the text to avoid this.
Alexei Sheplyakov [Mon, 5 Jul 2010 07:15:20 +0000 (09:15 +0200)]
Parser: handle abbreviations as advertized in the manual.
The following example from the tutorial
GiNaC::symbol x, y;
GiNaC::symtab table;
table["x"] = x+log(y)+1;
GiNaC::parser reader(table);
GiNaC::ex e = reader("5*x3 - x2");
fails with the following exception:
terminate called after throwing an instance of 'std::invalid_argument'
what(): find_or_insert_symbol: name "x" does not correspond to a symbol
Remove silly checks from find_or_insert_symbol, and fix its return value
(should be ex, not symbol).
Richard Kreckel [Sat, 22 May 2010 20:34:42 +0000 (22:34 +0200)]
Be more careful with conjugate(f(x)) -> f(conjugate(x)).
That identity is correct for holomorphic functions, but we have to be
careful with some functions not being holomorphic everywhere. On branch
cuts, it is wrong. For a discussion, see:
<http://www.ginac.de/pipermail/ginac-list/2010-April/001601.html>.
This patch changes the default behavior of user-defined functions. From
now on, a user-defined conjugate_func must be registered, in order to
evaluate conjugate(f(x)) -> f(conjugate(x)). This patch also adds such
functions for most initially known functions.
Richard Kreckel [Tue, 18 May 2010 22:18:35 +0000 (00:18 +0200)]
Fix dangerous iterator use.
This was detected by cppcheck and reported by Martin Ettl <ettl.martin@gmx.de>.
Alexei Sheplyakov [Mon, 17 May 2010 22:23:03 +0000 (00:23 +0200)]
pgcd(), chinrem_gcd(): use appropriate definition of the degree.
Effect: fixes (rare) GCD miscalculation.
pgcd() treats polynomials Z_p[x_0, ..., x_n] as R[x_0, ..., x_{n - 1}], where
R = Z_p[x_n]. Therefore one should use correct definition of the degree
(i.e. compute it w.r.t. x_0, ..., x_{n-1}, but NOT w.r.t. x_n!).
One should use appropriate definition of degree (that is, w.r.t. x_0, ..., x_n)
in chinrem_gcd() too.
Thanks to Aless Lasaruk for a bug report.
Alexei Sheplyakov [Mon, 17 May 2010 22:21:53 +0000 (00:21 +0200)]
Added `degree_vector' utility function.
It's a generalization of degree(expr, var) for multivariate polynomials.
Alexei Sheplyakov [Mon, 17 May 2010 22:20:08 +0000 (00:20 +0200)]
primpart_content: correctly handle monomials.
Impact: fixes (rare) incorrect gcd calculation and (potential) segfault.
Thanks to Aless Lasaruk for a bug report.
Alexei Sheplyakov [Mon, 17 May 2010 22:17:26 +0000 (00:17 +0200)]
pgcd(): avoid infinite loop if the first GCD candidate coincides with GCD
136 if (H_lcoeff.is_equal(lc_gcd)) {
137 if ((Hprev-H).expand().smod(pn).is_zero()) // (*)
138 continue;
The check (*) can result in infinite loop if the (very) first GCD candidate
gives the correct GCD: any subsequent iterations give the same result, so
Hprev and H will be equal (hence the infinite loop). That check is not very
useful (AFAIR I was trying to avoid extra division checks), so let's remove it.
Richard Kreckel [Mon, 17 May 2010 06:37:08 +0000 (08:37 +0200)]
Fix URL of CODA.
Richard Kreckel [Thu, 13 May 2010 20:54:52 +0000 (22:54 +0200)]
Fix memory leak in excompiler due to use of wrong operator delete.
This was reported by Martin Ettl <ettl.martin@gmx.de>.
Richard Kreckel [Thu, 13 May 2010 16:30:40 +0000 (18:30 +0200)]
Explicit function disambiguation.
This is necessary for compilers where the hyperbolic and the tgamma function
templates are pulled in from <cmath> and compete with GiNaC's function
templates. GCC 4.4 and 4.5 need this, when compiling with -std=cxx0x.
Richard Kreckel [Tue, 27 Apr 2010 20:44:35 +0000 (22:44 +0200)]
Fix weird ctor invocation syntax.
This patch is required for GCC-4.5.
Jens Vollinga [Sun, 28 Mar 2010 22:21:18 +0000 (00:21 +0200)]
Products (class mul) now answer correctly to info_flags::negative and
info_flags::negint.
Richard Kreckel [Thu, 25 Mar 2010 22:08:54 +0000 (23:08 +0100)]
Really fixed the atan2(-Pi, 0) bug.
The problem was that atan2_eval assumed that if y is real and not
positive, it must be negative. But this neglects the fact that in
symbolic compution it may just not be possible to determine the
sign. Now, the expression is returned as it is. Ugly, but correct.
Richard Kreckel [Thu, 25 Mar 2010 21:23:13 +0000 (22:23 +0100)]
Merge branch 'master' of ssh://ginac.de/srv/git/ginac
Jens Vollinga [Thu, 25 Mar 2010 09:36:41 +0000 (10:36 +0100)]
Fixed a bug in atan2. It gave a division by zero error for calls like
atan2(-Pi,0), because arguments like -Pi were not recognized (via
info_flags) as negative but as real nevertheless.
Jens Vollinga [Fri, 5 Mar 2010 20:37:19 +0000 (21:37 +0100)]
Copyright goes 2010.
Richard Kreckel [Sat, 27 Feb 2010 14:00:22 +0000 (15:00 +0100)]
Update copyright notice.
Alexei Sheplyakov [Tue, 23 Feb 2010 10:01:23 +0000 (12:01 +0200)]
pgcd(): detect relatively prime polynomials properly...
... so pgcd() doesn't loop forever any more. Division test does not handle
relatively prime polynomials (because C = 1 divides any polynomial). So we
should stop interpolation (and return gcd of contents) if we got relatively
prime images (we should do that for efficiency reasons too).
Thanks to Jörg Arndt for a bug report.
Alexei Sheplyakov [Wed, 6 Jan 2010 17:56:04 +0000 (19:56 +0200)]
Install the ginac-excompiler script iff excompiler is supported and enabled.
Richard Kreckel [Wed, 4 Nov 2009 20:58:26 +0000 (21:58 +0100)]
Fix libtool versioning fiasco.
Fix
f2f67dde5c9caca, which caused the soname to be bumped too frequently.
Richard Kreckel [Sun, 11 Oct 2009 21:19:21 +0000 (23:19 +0200)]
Add mul::info() and add::info() support for numeric info_flags.
This way, GiNaC knows that the sum or product of a number of positive
expressions is again a positive expression. [by Vladimir Kisil]
Richard Kreckel [Sun, 4 Oct 2009 20:30:45 +0000 (22:30 +0200)]
Output LaTeX-symbols using \mathrm, instead of \mbox.
Using \mathrm improves printing in complex formulae.
One reason is that it scales in fractions. [by Vladimir Kisil]
Richard Kreckel [Tue, 29 Sep 2009 20:25:16 +0000 (22:25 +0200)]
Remove debian/ directory.
The lifecycle of the Debian packaging files is better maintained in
the Debian pool's diff file. Removing these files makes the life of
the GiNaC releaser easier.
Richard Kreckel [Tue, 29 Sep 2009 20:08:11 +0000 (22:08 +0200)]
Properly document how to deal with libtool versioning.
The old description was referring to ginac_lt_age which should always
stay 0, because we promised to mark incompatible binary interfaces by
bumping ginac_minor_version (or even ginac_major_version). Let's get
rid of ginac_lt_age.
Alexei Sheplyakov [Sat, 8 Aug 2009 10:03:15 +0000 (13:03 +0300)]
modular_matrix: don't use STL iterators in {mul, sub}_col and friends.
Not using STL iterators makes the code simpler and cleaner. Also we don't
have to argue whether the standard ([lib.random.access.iterators]) imposes
any pre/post-condictions on operator+=.
Alexei Sheplyakov [Sat, 8 Aug 2009 10:03:48 +0000 (13:03 +0300)]
shaker_sort, permutation_sign: fix invalid use of STL iterators.
According to the standard incrementing end(), and decrementing begin()
are ill-defined operations (see [lib.forward.iterators],
[lib.bidirectional.iterators]).
Alexei Sheplyakov [Sat, 8 Aug 2009 10:07:14 +0000 (13:07 +0300)]
symmetry::calchash(): be careful to not dereference past-the-end iterator.
Alexei Sheplyakov [Sat, 8 Aug 2009 10:06:36 +0000 (13:06 +0300)]
check_parameter_G: fix pontential increment of end().
Incrementing past-the-end iterator is not permitted by the standard, see
[lib.input.iterators].
Alexei Sheplyakov [Sat, 8 Aug 2009 10:02:47 +0000 (13:02 +0300)]
G_eval: fix incorrect use of STL iterator.
According to [lib.bidirectional.iterators] it's not OK to decrement
an iterator pointing to the beginning of the sequence. Fortunately random
access iterators provided by (current versions of) gcc/libstdc++ don't have
this silly limitation, so the code which works with pointers works with
iterators without any changes at all. However,
- there's no guarantee that the current behavior won't change in the future
- some non-GNU compilers are not that smart (i.e. the program segfaults
upon when decrementing beginning-of-the-sequence iterator).
Jens Vollinga [Wed, 15 Jul 2009 03:19:07 +0000 (05:19 +0200)]
Allow underscores in identifiers.
Jens Vollinga [Fri, 10 Jul 2009 13:01:04 +0000 (15:01 +0200)]
Changed the parser such that it understands all defined functions
including the user defined ones.
To this end a method has been added to class function to allow the
modified get_default_reader() function to build up a complete prototype
table. The autogen tool is no longer required.
Jens Vollinga [Fri, 10 Jul 2009 07:54:09 +0000 (09:54 +0200)]
Fixed manual to correctly explain return_type_tinfo().
Jens Vollinga [Wed, 10 Jun 2009 09:28:34 +0000 (11:28 +0200)]
Raised required version of CLN to 1.2.2.
Jens Vollinga [Fri, 24 Apr 2009 21:37:44 +0000 (23:37 +0200)]
Added include for cstdio header.
gcc 4.0 does not include cstdio as part of other headers like string
anymore. As a result, gcc 4.0 complained about EOF being undefined.
Alexei Sheplyakov [Mon, 23 Feb 2009 12:08:42 +0000 (14:08 +0200)]
calchash(): work around broken RTTI.
Due to the strange (although permitted by the standard) behaviour of C++
RTTI on woe32 calchash() returns different hash values for equal objects.
As a result automatic evaluation gets spectacularly broken:
examining clifford objects.....({1+t,2+x,3+y,4+z}) - ({1+t,2+x,3+y,4+z}) erroneously returned -{1+t,2+x,3+y,4+z}+{1+t,2+x,3+y,4+z} instead of 0
({1+t,2+x,3+y,4+z}) - ({1+t,2+x,3+y,4+z}) erroneously returned -{1+t,2+x,3+y,4+z}+{1+t,2+x,3+y,4+z} instead of 0
.({1+t,2+x,3+y,4+z}) - ({1+t,2+x,3+y,4+z}) erroneously returned -{1+t,2+x,3+y,4+z}+{1+t,2+x,3+y,4+z} instead of 0
({1+t,2+x,3+y,4+z}) - ({1+t,2+x,3+y,4+z}) erroneously returned {1+t,2+x,3+y,4+z}-{1+t,2+x,3+y,4+z} instead of 0
[skipped]
.......FAIL: exam_clifford.exe
This patch works around `features' of woe32 RTTI, so calchash() works
properly.
Alexei Sheplyakov [Mon, 23 Feb 2009 12:03:16 +0000 (14:03 +0200)]
Fix compilation failure due to (template) operator- defined in factor.cpp
GiNaC 1.5.0 fails to compile with g++ 3.4.
The fix is simple: declare (and define) operator- (and operator+) only
for (univariate) polynomials.
Alexei Sheplyakov [Mon, 16 Feb 2009 14:23:16 +0000 (16:23 +0200)]
Univariate GCD timing: use sr_gcd when appropriate.
The benchmark consists of two parts:
1) timing of different GCD calculation methods (i.e. subresultant PRS,
heuristic, chinese remaindering).
2) timing of different implementations of the same method. The purpose
is to find out how (in)efficient GiNaC::ex is as a representation
of (univariate) polynomials (as a side note, the result is a bit
depressing -- using coefficient vector instead of GiNaC:ex makes
GCD calculation 50x -- 1000x faster).
Now GiNaC uses modular (chinese remaindering) GCD by default, so part 2)
got broken, i.e. instead of (intended) timings
a) (heuristic, GiNaC::ex) versus (heuristic, coefficient vector)
b) (PRS, GiNaC::ex) versus (PRS, coefficient vector)
one gets
a') (heuristic, GiNaC::ex) versus (heuristic, coefficient vector)
b') (chinese remaindering, GiNaC::ex) versus (PRS, coefficient vector)
Set the gcd_options::use_sr_gcd to restore the meaning of the benchmark.
Note: this patch does not affect the library proper.
Alexei Sheplyakov [Mon, 16 Feb 2009 14:24:15 +0000 (16:24 +0200)]
Polished NEWS a little bit.
Jens Vollinga [Tue, 17 Feb 2009 13:38:17 +0000 (14:38 +0100)]
Added release date.
Jens Vollinga [Fri, 6 Feb 2009 15:49:47 +0000 (16:49 +0100)]
Adjusted NEWS and INSTALL documentation.
Jens Vollinga [Fri, 6 Feb 2009 15:35:22 +0000 (16:35 +0100)]
Missed to change one date in function.pl.
Jens Vollinga [Fri, 6 Feb 2009 15:24:58 +0000 (16:24 +0100)]
Changed name of debugging macro (to avoid warning cause by multiple definition).
Jens Vollinga [Fri, 6 Feb 2009 15:22:58 +0000 (16:22 +0100)]
Fixed returning of test result (++result was +result).
Jens Vollinga [Fri, 6 Feb 2009 15:07:10 +0000 (16:07 +0100)]
Prettified source code.
- Added copyright and GPL licencing to new files.
- Increased year to 2009.
- Changed guarding macros in header to uniform pattern without leading or
trailing __ (double underscores).
- Put includes of system wide header consistently below own includes (help
a tiny bit to clarify dependencies).
Alexei Sheplyakov [Fri, 6 Feb 2009 06:57:32 +0000 (08:57 +0200)]
Fix chinese_remainder() so modular GCD actually works.
Jens Vollinga [Fri, 6 Feb 2009 12:13:06 +0000 (13:13 +0100)]
Automake now needs to be version >=1.8. Older versions like 1.7.9 do not create
the directory m4 in a VPATH build.
Jens Vollinga [Thu, 5 Feb 2009 09:54:21 +0000 (10:54 +0100)]
Renamed files *.tcc and *.hpp to *.h.
Jens Vollinga [Tue, 3 Feb 2009 12:50:33 +0000 (13:50 +0100)]
Fixed compile errors introduced in previous commit
45b1e47372090352ac5af655b32473df2abab23b.
Alexei Sheplyakov [Mon, 19 Jan 2009 06:45:38 +0000 (08:45 +0200)]
Implement modular multivariate GCD (based on chinese remaindering algorithm).
Both algorithm and implementation are a bit inefficient:
* algorithm does not make use of sparseness of inputs (and most of
multivariate polynomials are quite sparse)
* GiNaC's expressions are essentially immutable. Thus some simple
operations (i.e. multiplying a polynomial by an element of the base ring)
are prohibitively expensive.
* All numbers (i.e. GiNaC::numeric objects) are heap allocated.
Still it's much faster (~5x on bivariate polynomials, ~100x on 3-variate
ones) than (subresultant) PRS algorithm, so gcd() uses modular algorithm
by default.
Alexei Sheplyakov [Mon, 19 Jan 2009 06:44:36 +0000 (08:44 +0200)]
Improve (fix?) smod: now it really converts into symmetric representation...
... instead of clumsy convention inspirited by some proprietary CAS.
Alexei Sheplyakov [Mon, 19 Jan 2009 06:43:50 +0000 (08:43 +0200)]
Fix copy-paste error in GINACLIB_MICRO_VERSION.
Jens Vollinga [Thu, 8 Jan 2009 09:26:50 +0000 (10:26 +0100)]
Fixed bug in binomial(). binomial(n,0) erroneously returned 0.
Jens Vollinga [Thu, 18 Dec 2008 11:19:35 +0000 (12:19 +0100)]
Small fixes to avoid compile warnings (-Wall).
Jens Vollinga [Thu, 18 Dec 2008 10:10:50 +0000 (11:10 +0100)]
Fixed bug in multivariate factorization. Fractional numerical content was not
extracted and led to a not so finite running behavior. Added new checks for that
bug.
Added static keywords to hide debugging output operators.
Jens Vollinga [Mon, 1 Dec 2008 09:26:38 +0000 (10:26 +0100)]
Added new items.
Alexei Sheplyakov [Mon, 1 Dec 2008 09:13:12 +0000 (10:13 +0100)]
[PATCH] [build] Simplify generation of ginac/version.h
Alexei Sheplyakov [Mon, 1 Dec 2008 09:12:25 +0000 (10:12 +0100)]
[PATCH] Fix GiNaC library version information.
The libtool naming scheme cannot guarantee that on all systems, the numbering
is consecutive. It only guarantees that it is increasing. This doesn't matter,
though: there is not incurred cost for numbers that are omitted, except for
shrinking the available space of leftover numbers. Not something we need to
worry about yet. ;-) On the other hand, tricks which we were using to make
version numbers consecutive on GNU/Linux break versioning on other OSes.
Jens Vollinga [Mon, 1 Dec 2008 08:54:53 +0000 (09:54 +0100)]
Fixed a problem in polynomial divide by deactivating a recursion that lead to a
significant slowdown in sqrfree() and sometimes to a infinite loop.
Jens Vollinga [Fri, 14 Nov 2008 11:00:52 +0000 (12:00 +0100)]
Added section about factor(). Made appropriate changes at other places.
Jens Vollinga [Thu, 13 Nov 2008 15:36:02 +0000 (16:36 +0100)]
Added many comments.
Jens Vollinga [Thu, 13 Nov 2008 10:13:05 +0000 (11:13 +0100)]
Fixed lots of bugs in factor_multivariate().
factor_univariate() takes now the content of the polynomial into accout when
choosing a prime. It also returns the chosen prime. This supports the
factor_multivariate() code.
Polynomials are expanded before calling factor_sqrfree(). This avoids problems
with some input polynomials.
Added static qualifiers to all hidden functions.
Jens Vollinga [Tue, 11 Nov 2008 09:33:29 +0000 (10:33 +0100)]
Fixed a bug in squarefree(). Some polynomials were erroneously classified as
square free (e.g. x^prime+1).
Fixed a bug in multivar_diophant() causing sporadically an infinite loop.
Improved lifting bound code.
Univariate lifting can now use a cache for the modular factors. At the moment,
this gives no measurable speed gain.
Jens Vollinga [Mon, 10 Nov 2008 12:38:11 +0000 (13:38 +0100)]
Added modular square free factorization.
Completed distinct degree factorization.
Univariate polynomial factorization uses now upoly.
Merged class Partition and function split into class factor_partition.
Jens Vollinga [Thu, 6 Nov 2008 13:18:01 +0000 (14:18 +0100)]
Stupid error: did the revert on the wrong branch (master instead of ginac_1-4).
Revert "Revert "[portability] GiNaC::compile_ex works on OpenBSD now.""
This reverts commit
a6854a8a0f1e5db722320f5d7ccb9097053500cf.
Jens Vollinga [Thu, 6 Nov 2008 13:13:54 +0000 (14:13 +0100)]
Revert "[portability] GiNaC::compile_ex works on OpenBSD now."
This reverts commit
375a7aa1f13fa6061c278eb2c2447fd91521b45d.
Jens Vollinga [Thu, 6 Nov 2008 13:11:02 +0000 (14:11 +0100)]
Univariate Hensel lifting now uses upoly.
Changed q_matrix code.
Paul Irofti [Tue, 4 Nov 2008 14:55:34 +0000 (17:55 +0300)]
Equip ginac-examples.texi with directory entry for info.
Alexei Sheplyakov [Mon, 3 Nov 2008 16:17:16 +0000 (19:17 +0300)]
[portability] GiNaC::compile_ex works on OpenBSD now.
* acinclude.m4: check for dlopen() in libdl and in libc itself.
Thanks to Paul Irofti for a bug report and a suggestion.
Alexei Sheplyakov [Mon, 3 Nov 2008 14:34:29 +0000 (17:34 +0300)]
[build] Set correct rpath for linking with CLN...
... so users won't get 'error while loading shared libraries: no such file
or directory'. Also embed rpath into pkg-config meta data, so
g++ `pkg-config --cflags --libs ginac` foo.cc
actually works without any additional effort from the user side.
Alexei Sheplyakov [Thu, 23 Oct 2008 13:48:14 +0000 (17:48 +0400)]
[bugfix] integer_cra: check if arguments contain at least 2 moduli
While at it, also fix exam_cra so it does not produce pointless inputs.
Alexei Sheplyakov [Tue, 21 Oct 2008 06:09:33 +0000 (10:09 +0400)]
exam_cra: explicitly #include <limits>. This should make g++ 4.3 happy.
Jens Vollinga [Wed, 5 Nov 2008 12:56:53 +0000 (13:56 +0100)]
Changed debugging facilities in factor.cpp.