Karim Belabas on Thu, 18 Dec 2003 01:44:20 +0100


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

pari-2.2.7 released


Dear PARI enthousiast,

I would like to announce the release of pari-2.2.7.ALPHA. The sources can be
obtained using the old address

  ftp://megrez.math.u-bordeaux.fr/pub/pari/pari-alpha.tgz

or (preferably) through the new website:

  http://pari.math.u-bordeaux.fr/download.html

where an updated Windows binary is available.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

This is again mostly a bugfix release. A few outstanding points :

-- since 2.2.0, zeta() had become much slower for a variety of inputs (for
instance large imaginary part).  The problem has been fixed, and the routine
is now consistently faster. Gamma and a few other routines using Bernoulli
numbers and Euler-Mac Laurin summation have been improved in the process.
bernfrac() is orders of magnitude faster:

? bernfrac(2000);  \\ 2.1.5
time = 2,130 ms.

? bernfrac(2000);  \\ 2.2.7
time = 20 ms.

-- polredabs() is more robust, and often able to handle a nasty cases now
(compositum of many small subfields). The algorithm remains exponential, but
small polynomials tend to be found much sooner. Also the output is truly
canonical now: polynomials P and Q define isomorphic number fields
iff polredabs(P) == polredabs(Q).

-- bnfinit() restarted from scratch when hit by precision problems. This was
especially painful if a number of hours had been spent locating algebraic
relations in the class group. This has been fixed, and increasing accuracy is
essentially painless now (a few seconds lost for the update, no information
forgotten). As a result a number of computations can be run at lower
precisions. Faster.

BEWARE: the "technical" argument in bnfinit calls has been changed ( obsolete
components deleted ). Calls like bnfinit( pol,, [0.1,0.1] ) remain valid,
but using more than 2 arguments will act differently than in previous
versions.

-- the GP interface to PARI functions is now stored in an external database
instead of being hard-coded in C files, and a number of further defaults have
been delegated to config files installed in standard places. Besides the
cleaner internals, synchronization with GP2C is no longer a problem, and
polgalois() for extended degrees works out of the box on Windows.

-- If you have not been following the Windows improvements, there is now a
fully functional binary, including install Wizard, line editing, online 
help, hi-res graphics, dynamical loading & install(), Galois files ...
Try it out !

Have fun!

    Karim.

P.S: The complete Changelog.

Done for version 2.2.7 (released ??/07/2003):
  Fixed
    1- bench input files: should all start by a 'gettime()' instruction
    2- bnfisnorm(bnfinit(x^2-11),1) --> [Mod(1, #), 1]   [ return a result
       involving MAXVARN on trivial input ]
    3- [Mat(5)] * [[0]~]~ --> 0. Should be [0]~   [introduced in 2.2.6-C.25]
    4- \p 1000
E=ellinit([1,0,1,-120039822036992245303534619191166796374,5042249924849106700108
01799168082726759443756222911415116]);
x1=1e100; y1=ellordinate(E,x1)[1];
ellpointtoz(E,[x1,y1]); -->  impossible addition t_VEC + t_VEC.
       [ precision error ]
    5- erfc(non scalar) --> type error
    6- raising to t_FRAC power didn't work with p-adics: (-1+O(5))^(1/2) --> 1
    7- [ isprime / APRCL: ] integer overflow, e.g isprime(2^32 + 1, 2)
    8- sum(i=2^32-10,2^32+10,1) --> 11  [ kind of overflow ] + didn't use the 
       t_INT interface ==> broken with GMP kernel
    9- polgalois(x^6-3*x^4+3) --> [24, -1, 1], should be [24, -1, 2]. From 2.2.4
   10- nfisincl(x, x^2+1/2) --> SEGV   [ assumed integral inputs ]
   11- numbpart(10^15+2) --> SEGV  [ check for x < 10^15 incorrect ]
   12- polcompositum(x,x) --> SEGV [ problem with poldeflate(deg 0 pol) ]
   13- zeta((1+I)/2^225) --> 7e28  [ precision error when using func. eq. ]
   14- typos in qfsign/qfgaussred() [ aka sqred2 ]: wrong results: e.g
       qfsign([0, -1, 1, 1; -1, 0, 0, 1; 1, 0, 0, -1; 1, 1, -1, 0]) --> [2,2]
       ( should be [2,1] )
   15- numbpart(0) --> 0 [ should be 1 ]
GN 16- assembler section of Sparc Makefiles relied on GNU make specific $<
MSo17- off-by-1 error in Vec( t_STR )  [ memory corruption ]
   18- off-by-1 error in itostr(), e.g 10^11 [ memory corruption ]
BA 19- [hi-res plot: X-Windows] rescaling bug
MSo20- bittest(1,32) --> 1  [ off-by-1 error ]
   21- nfeltpowmodpr(nf,x, prime of degree 1) --> SEGV [ FpXQ_pow couldn't
       handle computation in prime fields ]
   22- charpoly( Mod(mat, poly) ) --> SEGV [ out of stack components not
       treated properly ]
   23- memory corruption when parsing floating point constants [ constante() ]
   24- too little GC in serreverse()
   25- bnfinit(huge field) --> "precision loss in truncation" [ missing
       term sqrt(disc(K)) in norm bound ]
   26- allow conj(t_POLMOD) provided the modulus degree is <= 2.
MSo27- ?0 with _many_ user functions defined --> SEGV [ typo in commands() ]
   28- quadclassunit(5) --> PLEASE REPORT  [ can't build subfactorbase,
       introduced in 2.2.6 ]
   29- valuation(x^3, x^2) --> 3  [ valuation at a monomial assumed it
       had degree 1, introduced in 2.2.2 ]
   30- Set(matid(2)) --> [ "[1, 0;\n0, 1]" ]. Ensure "raw" format is used,
       not "prettymat".
   31- typo in rnfpolred(bnf, *). E.g rnfpolred(nfinit(polcyclo(3,a)),x^3-19)
       --> oo loop  [ non-positive T_2 form ]
   32- typo in ellap: rare wrong result. E.g
       E=ellinit([0,0,1,-5115523309,-140826120488927]);
       ellap(E, 1315717181)
BA 33- qfbprimeform(-3, 1) --> data corruption [ gzero's signe set to 1 ]
   34- qfbpowraw(x, n < 0) reduced its output
   35- stack corruption when adding huge p-adics
   36- idealintersect did not allow fractional ideals
   37- Ser([1,2]) --> 1 + 2*x + O(x^2) [ OK ], but Ser([0,0]) --> O(x^16)
   38- writebin() still produced incompatible output depending on the
       multiprecision kernel.
   39- [alg | lin]dep( t_PADIC ) had stopped working in 2.2.6
   40- some precision problems in polgalois(deg(p) > 7) [ changed slightly
       some heuristic settings: the algorithm is simply not rigorous... ]
   41- typo in polredabs: polynomial of minimal T_2 norm might be missed
       [ actually found, then deleted due to a typo when "Sorting" small
       vectors, which would assess them the norm of a larger element ]
   42- polredabs(,4): some polynomials of minimal norm could be eliminated
       due to fixed buffer size for the small vectors. Made that dynamic.
   43- in certain situations (when using Allombert's algo.), subfields did
       not output subfields sorted by degree
   44- [Windows installer:] online help did not work on most installations
   45- lines continuation with \ did not work with DOS fileformat
BG 46- random(2^31) returned integers in [0, 2^32-1]  [ long/ulong problem ]
   47- isprime(156499227435744375600531968861048687296374896432841731) --> SEGV
       [ missing case in aprcl:sqrmod5() ]
BA 48- Configure: using gcc-3.3 + LANG=french, Configure failed to detect gcc
       [ messages translated ]
   49- alpha kernel would not compile with a C++ compiler (missing extern "C")
   50- rare stack corruption in gmul(t_COMPLEX, t_COMPLEX) [ when result is
       real ]
   51- valuation(Mod(x,x^2), y) --> oo loop  [ now 0 ]
   52- optimization problems in new zeta() and gamma() [2.2.0 C13]
       ( e.g zeta(0.5 + 10000*I) was _much_ slower than before )
   53- precision problem in nffactor [ in get_R() ], could yield to a SEGV, e.g
       nffactor(nfinit(y^4+7^2),x^28-14*x^24+20321*x^20+166992*x^16+1171296*x^12+1342208*x^8-5005056*x^4+3211264); 
   54- contfrac(Pi/2,2) --> [1, 1]  (doc says a_n != 1, so should be [2])
   55- factorint(
3280696195200006885547973357173182411881462602934802054749349683516314460050
2548596646024265171468102088952756084355402608216473040677346490348936595334
0299389230010814564530645152250241760175805765084544728012391149823776145022
4913178048870032606672750626773595019035786804361581343222144074318522768947
2061349830773562073895748494534362180537529975336881525935996152181576667869
0625865166662910961888106910345518707973056625912728422391238723575276042635
9727112469435556047168454738353621102783718736137552743946577993495054202848
9372915917197045423574773583244796785665263319216397122018435444897 ,11)
      --> impossible assignment I-->S  [ stack corruption ].
   56- typo in kummer.c:invimsubgroup [ hnfmod --> hnfmodid ]. Very rare
       weird error message in rnfkummer(): "wrong subgroup in conductor".
   57- typo in alglin2.c:hnfspec() [ same loop index used twice ]
   58- zeta(x) very slow for large integer |x| (use new bernfrac() code)
   59- removed -mimpure-text from DLLDFLAGS on non-sparc architecture
XR 60- Configure/bench: use head -n # instead of head -# (deprecated and
       unsupported by GNU coreutils)
   61- not enough GC in mpbern() [ Bernoulli numbers ] and psi()
   62- \p50000, then polroots(x) --> exponent overflow
   63- ellj( t_QUAD ) / eta( t_QUAD ) was forbidden.
   64- polredabs(x,1) did not work when x was already reduced
   65- polroots(x^3 + 0e-20) --> oo loop [ didn't handle nicely non-exact 0
       as a constant coeff ]
   66- 'make doc' always rebuilt the documentation, even if it was up to date

  Changed
    1- bnfinit: [small_norm phase] speed up norm computations.
    2- [make etags:] use $ETAGS instead of 'etags' if defined
    3- [libpari:] renamed incgam4 --> incgam0, incgam3 --> incgamc
BA  4- [Description system] Store GP functions in a database in
       src/functions/ instead of hard-coding them in C files.
    5- [libpari:] modified zbrent interface to allow library programming
    6- ellpointtoz(E, P): remove the test that P be on E [ useless and
       often wrong when P has inexact entries]
    7- allow serconvol() with 0 series.
MSo 8- allow numtoperm(0,k)  [ --> [] ]
    9- simplify result of basic op. involving complex numbers,
       e.g. I*I --> -1 as t_INT  (was t_COMPLEX)
   10- embedings of number fields: use x + iy --> (x + y, x - y) instead of
       (sqrt(2)x, sqrt(2)y) to map complex embeddings to R^2.
   11- disallow Ser( t_MAT )  [ resulted in a series with t_COL coefficients ]
   12- nf format to improve idealinv() [ nf[5][6] and nf[5][7] ]
   13- disallow sqrtint( x < 0 )
   14- meaning of the GP_DATA_DIR global variable: now points to the
       directory _containing_ galdata, not to the galdata files
   15- qfminim(,,2) + polredabs: look for points by (roughly) increasing
       norms (was: full enumeration and roughly decreasing norms)
   16- exp(-10^10) --> 0.E2525223  [ was 'underflow' ]
   17- polredabs: improve the search for subfields (no polynomial
       factorization required now, only linear algebra)
   18- ellglobalred(): use gcd(e.c4, e.c6) to help factor e.disc
   19- removed obsolete components ("checks", "bits of accuracy left in
       computation") from quadclassunit / bnfinit / bnfisprincipal /
       bnrisprincipal / bnfunit outputs.
   20- 'make test-graphic' is gone. Use 'make test-ploth'
HC 21- new implementation of gamma()
   22- renamed Oxxx/dft.Config.in --> pari.cfg
   23- new implementation of bernfrac() [ use zeta(2k), initial GP code by HC]
   24- bernvec always calls bernfrac()  [ hence has become useless ]
   25- [sparcv8_super kernel:] replace asm divll with portable one
       (slightly slower but fixes many compilation problems, and easier to
       maintain on an architecture which has become hard to test)
   26- buchall() [ bnfinit, etc ]: complete rewrite to avoid restarting from
       scratch after a precision increase. All relations stored in algebraic
       form, so that data is easily recomputed to higher accuracy if necessary.
       Use lower default precision.
   27- remove special handling of t_STR by printtex / writetex [ 2-2-6-C19:
       a \ would be inserted in front of $, %,  etc. ]. This broke things like
       printtex("$", x, "$"), and is better done by the user herself.
   28- bnfinit(): remove useless components from the "technical parameter".

  Added
    1- [Configure:] flag --with-ncurses-lib=*
BA  2- support for FLTK graphical library [ hi-res plot ]
BA  3- galoisidentify for order 96 to 127.
    4- default 'datadir' [ to allow relocating 'galdata' for polgalois ]
    5- hi-res plotting under Windows
GTo 6- routine qfrep()
BA  7- routine qfbsolve(Q,p) for Q imaginary and p prime
    8- new testsuite: make test-galois (~ 1 minute)
    9- new options to Configure: --with-fltk, --emacsdir, --datadir,
       --sysdatadir
SG 10- updated micro-kernel for HPPA
BA 11- Add code 'i' for functions returning C int (not long)

  Removed
    1- bruteall [ useless, undocumented variant of 'brute' ]
    2- option to Configure: --miscdir
-- 
Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
Dep. de Mathematiques, Bat. 425   Fax: (+33) (0)1 69 15 60 19
Universite Paris-Sud              http://www.math.u-psud.fr/~belabas/ 
F-91405 Orsay (France)            http://pari.math.u-bordeaux.fr/  [PARI/GP]