Karim BELABAS on Thu, 13 Feb 2003 19:12:29 +0100 (MET)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

pari-2.2.5.alpha released

Dear PARI lover,

  I would like to announce the release of pari-2.2.5.ALPHA. As usual, you can
fetch the sources from the link


which points to the up-to-date sources, or from CVS [ the tag is
release-2-2-5 ]. This is still an ALPHA release, so usual caveats apply.
Hopefully, it is the last alpha in the 2.2 series.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   FEATURES   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

* The most important feature of this release is probably the introduction of
a new multiprecision kernel based on GNU MP library, with vastly improved
handling of large integers and reals. This kernel is disabled by default
[ it is still experimental, and breaks binary compatibility ]; if GMP is
installed on your system, you can give it a try under PARI using

  Configure --with-gmp

before the usual compilation. General speedup becomes noticeable around 150
decimal digits.

* Many speed improvements in Class field-theoretic functions, e.g rnfkummer or

* enabled Mestre's quadratic algorithm to compute the archimedean part of the
height of elliptic curves using the AGM [ remained disabled for 4 years ]

* Fixed improper rounding and conversions from and to floating point numbers
[ both in internal operations and during output ]. Eg at \p9

    (18:30) gp > 1.2
    %1 = 1.19999999  \\ acceptable output, but actually a bug
    (18:31) gp > 1.2e100000
    %2 = 1.19999889 E100000 \\ huge loss of accuracy

* A huge number of miscellaneous bugs were fixed (a few of which were
introduced in 2.2.3 and 2.2.4). The Changelog is the longest ever.

* Configure has been simplified and broken into many smaller files, much
easier to maintain. Hopefully gp should compile out of the box on many more

* The old 68000 assembler kernel is no longer supported and was removed from
the distribution.

Have fun,


P.S: The complete Changelog:

Done for version 2.2.5 (released 11/02/2003):
    1- [bnfinit:] typo in be_honest() --> SEGV when cbach2 > cbach [from 2.2.4]
    2- apprpadic() when p = 2 (could not work) + typos
    3- typo in gphelp [detex mode]: ubiquitous "var" in translation [from 2.2.4]
    4- typo in var_make_safe() [ protecting user variables after trapped
       "stack overflow" ] --> possible SEGV  [from 2.2.4]
BA  5- [Configure:] add -lm -lc to EXTRADLLDFLAGS, not DLLDFLAGS
    6- typo in gp_main_loop: avma not restored properly after allocatemem.
       [from 2.2.4]
    7- typo in [imag|real]_be_honest: SEGV in quadclassunit(D,,[c,c2]), c2 > c
       [from 2.2.4]
    8- typo in rnfisnorminit (pol_up)
    9- at \p28: x = (1. + 10^-28) - 1; for (j=1, 100, x = (x-10^-28) + 10^-28)
       now x has 200 words of precision
   10- stack corruption in addition (t_INT + t_PADIC)
   11- factorpadic(z+y,2,4) --> SEGV
   12- wrong result in idealchinese when the y_i had denominator
BA 13- sigma(n,-1) output a wrong result.
BA 14- inline alpha assembler broken (registers clobbered)
GH 15- polsturm(1, 0, 1) ---> error  [ return 0! ]
   16- "break loop" did not react correctly to allocatemem() read from a file
       with \r (stopped reading file right away)
   17- matker(x, 1): internal loop forgot a pointer when garbage collecting
       --> SEGV (or weird error, e.g division by 0)
   18- ideallog(nfinit(y),2,idealstar(nfinit(y),4,1)) --> SEGV [bad input]
   19- ellrootno(ellinit([0,-25,0,-1250,0])) --> SEGV [from 2.2.3]
   20- typo in elllocalred (wrong Tamagawa number, case I0). [from 2.2.4]
   21- idealtwoelt(nfinit(y),2/3,1) --> SEGV [bad input]
   22- for transcendental function f and polynomial p, f(p) only gave
       seriesprecision significant terms when val(p) = 0
   23- Ser(a/b) --> 1 + O(x^16) (!!)
   24- (x^2)^(1/2) --> error
   25- idealnorm(nfinit(y),matdiagonal([1+I])) --> SEGV [bad input]
   26- polylog(10,x^10) --> O(x^6) at \ps16 [ 16 significant terms ?]
                        --> x^10 + O(x^21) at \ps 21 [missing x^20 term]
   27- nffactor/nfroots: SEGV over Q
   28- missing sanity checks in install() [ did not check the parser code ]
   29- typo in nilord() [lg-->lgefint]: nfdisc() didn't work on 64bit HP
   30- ellisoncurve(ellinit([0,0,0,0,1]),[1/2-sqrt(3)/2*I,0]) --> 0
   31- type 'gphelp' from command line: carriage return is missing
   32- typo in LLL_cmbf() [ rare infinite loop in factor() over Z[X] ]
IS 33- [HPUX:] should compile with cc -Ae, not -Aa
   34- excessive memory usage in bnrstark() [ InitPrimes ]
   35- bessel[jk](t_SER) not implemented around a!=0, but gave (bogus) results
       [output error message for now]
IZ 36- [OS/2:] rename static functions _core[2] (conflict with stdlib.h)
IZ 37- [OS/2:] ^C would only work once
   38- algdep(.1^5,1,10) --> 1
   39- { "a
            b" }  \\ with an explicit \n
       produced "ab", whereas whitespace in strings is to be retained.
   40- inconsistencies in return type from lindep [t_VEC/t_COL].
   41- possible oo loop in ellap [ typo in appell1 ]
   42- made PSLQ (algdep/lindep) insensitive to 'realprecision' [use
       precision of the input]
   43- nfinit(x^2-4*3,4) --> SEGV
   44- Compilation failure on ORIGIN + Irix: rename 'sgi' --> 'SG' in
   45- '\r a' where file 'a' is empty --> "a is not a GP binary file".
   46- make sure qflll[gram](x) never fails when x has exact entries [ much
       faster than qflll(x,1) when the entries are large ]
   47- increase subFB sooner in buchall() + add GC in Q_denom { bnfinit(x^8 -
4*x^7 + 462*x^6 - 1372*x^5 + 85789*x^4 - 169296*x^3 + 7540560*x^2 - 7456140*x
+ 263038707) } took a long time, then overflowed the stack
   48- make test-kernel did not work anymore (prototype error in kerntest.c)
   49- overflow in u_FpM_gauss (oo loop in ZM_inv for huge matrices)
   50- polcoeff(1+O(x^2),1,y) --> SEGV
   51- content(y/x) --> 1   [ should be y ]
   52- divrem(x,2) --> x/2 instead of [x/2, 0]~
   53- divrem([1.,2],x) --> stack corruption
   54- ff(n)=local(v=[],w=[]);n
       ff(f(n))=n  --> error (OK) + SEGV on Linux (same data freed twice)
   55- qflll(matrix(2,3,x,y,x+y)) --> SEGV
IZ 56- default(primelimit, 2156858852) --> SEGV and other signed/unsigned
       conversion problems.
IZ 57- printtex("x1") and printtex("x_1") gave same output
IZ 58- printtex(t_STR) [ protect special characters, eg ~ or \ ]
IZ 59- [readline:] support old versions (1.0), try to recover from
       mismatched headers wrt. library, report version of loaded library in
       gp header [as opposed to library version at Configure time]
BA 60- add "const" keyword to allow building with g++
   61- agm(1+x,2+x) --> oo loop
   62- lindep([1,0]) --> error [ problem with trivial cases in PSLQ ]
   63- wrong reconstruction bounds in nffactor
   64- short help message for isprime/ispseudoprime
   65- issquare(t_FRAC or t_RFRAC, &x) did not work [ worked without &x ]
   66- nfgaloisconj(x^2+1,4, 0) --> SEGV [ bad input ]
   67- typo in quadhilbert(-D): required O(D) memory instead of O(sqrt(D))
   68- all signed/unsigned compiler warnings
   69- \p29, tan(Pi/2) --> "division by zero". Made error more explicit
   70- nfnewprec(nfinit(x,3)) --> SEGV
   71- bnrconductorofchar(0,0)--> SEGV [bad input]
   72- qfjacobi( non-square matrix )  --> SEGV [bad input]
   73- matmultodiagonal([;],matrix(0,1)); --> SEGV [bad input]
   74- [GP, trap:] prevent infinite recursion if default exception handler
       itself raises an exception
   75- allow qfbred(,2) [don't update Shanks's distance] also for definite
       forms [ignore flag].
   76- lex(x,"y") --> error [ should be -1 ]
   77- algdep(0,1) --> 0 [ should be x ]
   78- log(1, AGM) --> oo loop
   79- [Configure+gcc] remove useless -m* arguments from CFLAGS [ obsolete ]
   80- improper rounding when printing floats: 1.2 --> 1.199999999
   81- [default:] realprecision was allowed to be 0, and then treated as 9.
   82- Precision loss in inputs of large exponent: 1e100000 -->9.99999824 E99999
   83- quadgen / quadpoly accepted square inputs --> weird bugs later.
   84- poldegree(x^2 / y^4, y) --> -1
   85- setrand(178);quadclassunit(82421) --> 2 instead of 1 [from 2.2.4:]
   86- polroots( Pol(subst([1,0,4*x,0,2*x^2+24,0,16*x,0,16],x,10^2589) )
       --> division by zero [ double overflow ]
   87- LLL-reduction over polynomial rings (almost always failed)
   88- (x/y)*(y/x) --> y/y
   89- fix pari_init_stackcheck to avoid bogus "deep recursion" messages on
       broken machines.
   90- reused invalid (gerepile'd) pointer in mat_ideal_two_elt.

    1- "not enough precomputed primes": output largest needed p if available
XR  2- factorpadic so that factorback gives back the original polynomial, up
       to a power of p
    3- type of avma, bot, top to 'pari_sp' (pari stack pointer) [does not
       break existing code]
    4- [library:] make floating point assignments round the inputs (used to
    5- ensure proper rounding in divrr/mulrr() [ important for numbers input
       in scientific format, e.g. 1e20 ]
BA  6- moved internals of mppgcd to mp.c/gcdii
BA  7- moved internals of genrand to mp.c/randomi
BA  8- renamed mymyrand --> pari_rand31
    9- bnrstark: use partial factorization of discriminant when (pol)reducing
       the polynomial [could embark into hopeless factorizations]
   10- primedec: improved search for uniformizers when p | index
IZ 11- [OS/2:] improve dlopen(NULL,...)
IZ 12- [OS/2:] enable dynamic-linking build
IZ 13- [OS/2:] use same CFLAGS as under Linux
IZ 14- when using external prettyprinter, write in raw format to logfile
       [not in TeX format sent to prettyprinter]
IZ 15- don't output pseudo-TeX sequences to logfile when using external
       prettyprinter (raw format)
IZ 16- make X11.builtin-gnuplot-dynamic the default graphic library.
IZ 17- allow changing the gnuplot DLL name for gnuplot-dynamic at Configure-time
       e.g. Configure --graphic=gnuplot-dynamic,gnpltdrw
   18- allow Vecsmall(t_STR)
   19- polredabs heuristic (try harder to detect subfields).
       Ex: try it on polcompositum(x^2 - d, polcyclo(11));
MSo20- simplified polzagier()
DS 21- improvements in elltors() [ faster torsion bound, check bound > 1
       before checking precision ]
   22- minor improvements in plindep() [p-adic lindep/algdep]
   23- 'make all' now builds the documentation [ that way, 'make install' need
       not run a bunch of TeX commands as root ]
   24- improved idealaddtoone/idealchinese/idealapprfact [use dedicated HNF
       variant + simpler uniformizers in idealapprfact]
   25- rnfkummer: do not return rational coeffs as POLMODs: -1, not Mod(-1,pol)
   26- improved idealval()
   27- simplified element_reduce, idealmodidele (redideal), compute_raygen
       (create bnr.gen): faster, smaller elements
   28- new algorithm for conductor() and bnrdisc() [much faster, does not
       need bnr.gen]: find minimal f such that P_{1,f}(K) \subset H,
       computations are done for a fixed modulus F instead of computing the
       image of H in Cl_f(K) for many f | F.
IZ 29- improve portability of make_vi_tags (cf 'make ctags')
   30- using install() twice on the same symbol now updates the prototype code
   31- re-enable ranlib support (disabled in 2.0.13)
   32- declare first argument in pariputs[f] as 'const char*'
   33- enabled Karatsuba multiplication for t_REAL
   34- broken Configure into many smaller files (config/get_*)
   35- let gphelp write all cross-references as [label:LABELNAME] (was [??])
IZ 36- cache optimization in initprimes() [ default(primelimit,.) ]
   37- Str() now takes multiple arguments as print(). Str(,1) replaced by
   38- prototype of strtoGENstr() [remove flag]
   39- remove -Wno-implicit from CFLAGS
   40- prototype code 's*' now produces a t_VEC of GENs [callee's business
       to call GENtostr] (used to be a NULL-terminated list)
   41- [gphelp:] if perl not available, don't pretend extended help is.
   42- try harder to detect precision problems in floating point lllgram
   43- [ix86 kernel:] macroified bfffo()
   44- made all GEN macros return signed types [ had inadvertently switched
       to ulong as a side effect of some other change, long ago ]
BA 45- split kernel Makefiles in MakeLVL0 and MakeLVL1.
BA 46- --disable-kernel Configure option replaced by --kernel=none
   47- compute_polrel() [rnfkummer] was very slow for [L:K] > 5 (compute
       Newton sums directly)
   48- simplified fincke_pohst() [don't recompute gram_matrix]
   49- faster trueeta(), faster quadhilbert(D < 0)
   50- faster isprime (trial divide by small primes, recognize 1-word moduli)
   51- ellheight: use Mestre's AGM to compute Archimedean height
   52- poldegree(0) is now VERYBIGINT
   53- alpha + gcc: compile with -O3 [ since F14 fixed the optimizer "bugs" ]

    1- [TeXmacs:] contextual completion (<TAB>)
BA  2- routines ishiftr, gfloor2n, isqrti, randomi
    3- routine random_bits
BA  4- [Configure:] --builddir flag
IZ  5- File README.os2
    6- Allow nfroots(, P) [ roots in Q ]
    7- routines Strexpand(), Strtex()
IZ  8- detect infinite recursion on OS/2 [as on Unix systems] (cf STACK_CHECK)
RS  9- routine numbpart()
BA 10- GMP kernel
BA 11- --kernel Configure option
IZ 12- allow an arbitrary polynomial as a 2nd argument to subst()
   13- many files in config/  [ from Configure ]

    1- macro definition BITS_IN_RANDOM (useless)
    2- appr_reduce() [static base4.c]: lllreducemodmatrix does the same. Faster.
    3- [useless,undocumented]: idealoplll, idealmullll, idealdivlll
    4- 68k assembler kernel [ unmaintained, obsoleted by the GMP kernel ]
Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas/
PARI/GP Home Page: http://www.parigp-home.de/