Karim Belabas on Thu, 21 Apr 2005 19:20:09 +0200


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

pari-2.2.10 released


Dear PARI enthusiast,

I would like to announce the release of pari-2.2.10.ALPHA. The sources and a
pre-compiled binary for Windows can be obtained through the address

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

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

This is mostly a bug-fix release. The main user-visible changes are
faster basic routines, propagating to high-level ones.

  - factoring : trial division, MPQS, factorization of polynomials over
non-prime finite fields, polroots()

  - exponential function

  - quadclassunit().

Have fun,

    Karim.

P.S: The Changelog

Done for version 2.2.10 (released 17/04/2005):
  Fixed
BA  1- gp2c description of == operator was broken.
    2- asin(I) --> SEGV, acos(1 + 0. * I) --> SEGV, atan(I/2) --> SEGV
       sqrt(0*I),acosh(1+0*I) --> oo loop
    3- make test-kernel didn't work [missing gen_m1 & int2n]
    4- thetanullk(1/2,1) --> SEGV [from 2.2.9]
    5- unit component in factor(t_INT + 0*I) was wrong
    6- no typecheck for qfbhclassno input
    7- diviuexact destroyed input and made further assumptions [=> wrong results
       in ellglobalred]. Replaced it by a clean wrapper.
GH  8- thue(thueinit(x^3 - 2), 2) --> SEGV
    9- reorder([1]) --> SEGV (bad input, but sanity check was wrong)
   10- rnfconductor(,1) [ = rnf_is_abelian() ] didn't accept polynomials with
       POLMOD coeffs + used a wrong algorithm [ not modular + wrong result ]
   11- broken code in hnfmodid() wrt GC (would add one 0 column, Bug #129)
   12- sqrti(gen_0) --> SEGV [native kernel]
BA 13- polrootsmod(,,1) could return a line vector instead of a column.
   14- issquare(Pol(1)) --> SEGV
BA 15- polsubcyclo() used too much memory for large conductors.
   16- typo in quadtoc() --> quadgen(odd t_INT)*1. was wrong
   17- subgrouplist([], [2]) --> [[;]]  (instead of [])
   18- typo in FqX_split [  (!degpol(x))  --> degpol(x) <= 0 ] -> very rare SEGV
   19- after alias(a, b); kill(b), invoking 'a' would access corrupted data
   20- round(-0.5) --> -1 [ should be 0, as was output by round(-0.5, &e) ]
RS 21- gcc-3.4 breaks on compatibility code to support old readline versions
       [ pre-4.2 ]. Typecast parameters, not functions and dump
       (approximate) support for g++ + old readlines in gp_rl.c
   22- \p 8000
       E=ellinit([0,0,0,0,1296]); P=[-8,28]; ellpointtoz(E,P) --> oo loop
   23- idealaddtoone(nfinit(y),[0]) --> SEGV [ BIB ]
   24- aprcl would wrongly report composites [ introduced aprcl.c:1.48,
       before release-2-2-8 ]
   25- ellchangecurve(e over Qp) --> e.w not updated
   26- ellheight(e over Fp, pt) -->  SEGV
   27- issquare(Mat(2), &z); z --> SEGV  [ don't allow matrices as input ]
       issquare(1/x^2) --> SEGV [ typo in polcarrecomplet ]
   28- rnfkummer(over Q) --> type error.
   29- allow qfbprimeform(d > 0, p < 0)
   30- Since exp(-1e100) --> 0. [ tolerable: alternative being underflow
       error ], we shouldn't have exp(-1e100) --> truncation error. Fixed.
   31- rnfkummer(bnrinit(bnfinit(y),nextprime(10^20),1),Mat(3)) --> module
       too large in Fp_shanks [ conductor() was computing unnecessarily
       tough discrete logs ]
   32- [Configure:] add /lib64 and /usr/lib64 to library search path
   33- SEGV in nfeltpowmodpr() for primes of degree 1 [see 2.2.7-F21]
       + inputs containing t_INTMODs yield unpredictable [wrong] results
   34- znlog(x,g): first check whether x == g [ quite frequent ]
   35- rnfisnorminit(nfinit(y^2+y+1), x^3-y,2) --> "incompatible variables"
   36- nffactormod() returned a factorization which was not a proper t_MAT
   37- rnfequation(y^2+1, x + Mod(z*y - 1, y^2+1)) --> SEGV [ BIB ]
   38- many problems in matfrobenius for _inexact_ matrices
LGr39- very rare SEGV in idealprimedec() [ typo in init_norm(), using FpX_red
       on a t_INT, which is no longer valid ]
   40- [library:] precision() output "wrong" value for small non-zero t_REAL
       (depended on exponent, not the bit accuracy of the input). Change so
       that true bit accuracy is used unless input is 0 (then use exponent).
   41- rare memory corruption in thue() [ SmallSols ]
   42- gamma(z) for tiny z suffered from catastrophic cancellation
   43- ??? sometimes output extra entries [ e.g. ???eigen output matfrobenius ]
   44- bezout(0., 0.) --> division by 0
   45- issquare(5, &n) --> SEGV
   46- factor(x in Q[i] \ Z[i]) --> rubbish [ typo in factor_gauss() ]
   47- ellrootno & elllseries didn't check their arguments
   48- rnfisnorminit(non-monic polynomial) --> SEGV
   49- prevent Ser & Pol from creating invalid objects (e.g Pol(x+y, y) -> y+y)
   50- TODO item:  polrootspadic(x^2+8*x+4, 2, 2) --> 2 + O(2^2), whereas
   there's no padic root. The documentation is not clear enough: should
   polrootspadic(x,p,r) find roots in Z/p^r [current behaviour], or use the
   precision of the supplied polynomial to compute roots in Qp, then return
   them at precision p^r [ better, polroots() and factorpadic() behave this
   way ] ?
   51- padicappr(f, t_POLMOD) didn't work
   52- rnfidealnormabs(rnfinit(nfinit(y),x^2+1),1) --> SEGV
   53- no argument check in primepi()
   54- ellminimalmodel(ellinit([1,2,3,4,5])) --> gerepile error
   55- gcd([]) was 1 [ should be 0 ] + gcd([...]) used an inefficient algorithm
   56- [readline] completion in extended help context ?? didn't include GP
       defaults
   57- [from 2.2.9] nfsubfields(x) had become unable to exploit
       the trivial case when x is irreducible modulo some prime
   58- [from 2.2.9] typo in krosi -> wrong result [ affected aprcl only ]
   59- dirdiv([],[]) -> SEGV
   60- using allocatemem() in files input with read() could corrupt stack
       allocatemem() does not end by a longjmp anymore; it is still impossible
       to use it in loops
   61- typo in matrixqz: matrixqz(Mat([1,1]~)/2,0) --> "not a rational matrix"
   62- [cf 2.2.7-F23-] use safer parameters in bernfrac(): bernfrac(166)
       was wrong.
   63- [Bug #201] gp --test: line split mode initialized too late
       print(vector(1000)) would bypass it.
   64- [Bug #200] gmul2n(t_POL, n) would not normalize the resulting polynomial
       [ needed in characteristic 2 for instance ].
   65- FpX_center and centermod didn't use the same normalizations. Fix
       FpX_center
   66- factormod(T,p,1): output was not sorted
BA 67- [from 2.2.9] -fPIC missing for gp2c-run on platforms that require it.
   68- if(1,print,print(no)) --> no was printed [a function expecting any
       number of string objects, called without parentheses (no args), would
       read the following arguments as its own ]
   69- more stringent tests in ideal* functions: don't accept t_COL with
       incorrect length as ideals ([]~ produced SEGV in many cases)
   70- factorback([1,1; 0,1],nfinit(x^3+2)) --> SEGV
   71- [Bug #156] kbessel was unstably evaluated
       ? besselk(1,120)
       %1 = 448600744132608.0000000000000
   72- hyperu and kbessel(,1) inaccurate. E.g: hyperu(1,1,1) at \p28 -> last
       3 digits wrong

  Added
    1- routines equalsi/equalis, equaliu/equalui, cmpui/cmpiu
    2- exported FFTinit() / FFT() wrappers to rootpol.c:fft() [not under GP yet]
    3- routines Rg_to_Fl, Rg_to_Fp, RgX_to_FpX, RgX_to_FpXQX, RgX_to_FqX,
       RgV_to_FpV, RgXQ_mul, RgXQ_sqr, RgX_div_by_X_x, FpX_div_by_X_x,
       RgXV_unscale
    4- file Qfb.c [ stuff related to binary quad. forms moved out of arith1.c ]
    5- routines truedivii, truedvmdis, truedivis
BA  6- [GMP] faster divri routine.
BA  7- support for real forms for qfbsolve.
    8- routines RgX_gcd_simple, RgX_extgcd_simple [ when no coeff explosion
       in base field ]
BA  9- new algorithm for exp(t_REAL) [ Newton ]
   10- new macro ndec2prec()
   11- use Trager's trick in factorff()
   12- member function .bid (from a bnr). Extend mod, clgp, no, cyc, gen to
       bid and bnr structure.
   13- new keywords for ?? : bid, CFT, ideal, idele, modulus, rnf.
   14- new construction %#: number of history entries so far
PC 15- an optional 2nd argument to znorder() to limit the search space

  Changed
    1- renamed gegal --> gequal, gegalgs --> gequalgs, gegalsg --> gequalsg,
       egalii --> equalii
    2- improve trial division in all basic arithmetic functions [ e.g try
       for(i=1,10^5, factor(1009)), or moebius, or ... ]. Old logic was
       broken for small inputs (tried far too many primes)
    3- improve quadclassunit(D >> 1), about 10 times faster in the 40
       digits range [forbid long reduction cycles (too costly to update arch.
       info when a relation is found + streamline factorquad() ]. See
       Z_lvalrem_stop() + remove extra_relations() and use large prime
       variation all the way [almost all relations are found this way]
    4- streamline/clean-up polroots [ complete rewrite, much faster for
       small degrees ].
    5- improved zetakinit() [save some multiplications, about half of them
       for quadratic fields. Less so as the degree increases. ]
    6- renamed RgX_RgX_compo -> RgX_RgXQ_compo
    7- renamed binome -> binomial, chinois -> chinese [ added chinese1(x)
       for chinese(x, NULL) ]
    8- add GC in integer valuation functions + use recursive algorithm when
       valuation looks large
    9- no longer raise an exception when online help used on unknown id or
       obsolete function [report 'unknown identifier' or 'obsolete function']
   10- removed buggy support for narrow class group in quadclassunit
       + rewrite binary quadratic forms [ qfr3 / qfr5 ]. TODO: move from
       arith1.c to qfb.c
   11- reinstate cornacchia + cornacchia2 with a different interface [ use
       cornacchia in qfbsolve ]
   12- allow non-real arguments in incgamc, incgam
MW 13- ellap: if E has CM by a principal order, use Cornacchia instead
       of Shanks/Mestre
   14- more efficient algorithm for issquare(t_FRAC | t_RFRAC)
   15- don't return t_INTMODs component in *modpr routines, but lifted
       representatives.
   16- FpX_roots, FpX_factor: normalize input first + direct support for
       quadratic and linear polynomials [ no need to compute X^p !]
   17- FpXQ_powers and similar routines: use multiplications when input has
       small degree, squarings otherwise.
   18- matsnf over polynomial rings: make sure elementary divisors are monic
   19- ellpointtoz() now returns z such that 0 <= Im(z) < Im(w2),
       0 <= Re(z) < Re(w1).
   20- bnfinit(non-monic t_POL) --> now discard variable change
   21- rename apprgen9 -> padicappr, factmod9 -> factorff
   22- rewrite padicappr()
   23- [COMPAT] bnrdisclist has lost its 4th argument 'flag', and omitting the
       archimedean component now means that all 2^r1 possible values are
       substituted (formerly: indicate no ramification at infinity).
       The prototype of bnrdisclist0 has likewise changed.
   24- renamed isprincipalrayall -> bnrisprincipal, rayclassno -> bnrclassno
       rayclassnolist -> bnrclassnolist
   25- Change the output of ideallist with technical (flag 2,3) [ with units ]:
       instead of two vectors, output a vector of 2-component vectors.
       Change the input of all list routines (bnrclassnolist, bnrdisclist)
       accordingly.
   26- %0 (undocumented) is no longer accepted as an alias for %
   27- renamed realzero -> real_0, realun -> real_1, realmun -> real_m1.
GN 28- MPQS rewrite [cleaner, faster]

  Removed
    1- obsolete implementation incgam1 [ use incgam. As far as private
       functions go, incgam2 is better ]
    2- removed ideallistarch0, ideallistarchgen, ideallistunitarch,
       ideallistunitarchgen. Just use ideallistarch.
    3- obsolete default 'buffersize'. Flag -b is a no-op.
-- 
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]