Karim Belabas on Fri, 06 Oct 2006 11:51:34 +0200

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

pari-2.4.0 (ALPHA!)

Dear PARI lovers,

I would like to announce the release of pari-2.4.0-ALPHA, which starts a new
development cycle. The sources and a binary for Windows can be obtained
through the address


A number of long-awaited, but stability threatening, improvements have
been committed to this new branch. Many more are to be implemented but
we already would appreciate feedback at this point.

See http://pari.math.u-bordeaux.fr/Bugs/ for how to report problems
or submit wishlist items.



  * To fine-tune gp and the PARI library for a given host, use
      Configure --tune
    (Then go and fetch some coffee: you have a 30 minutes wait in store,
    while Configure optimizes the thresholds between alternative algorithms.)
    On some machines this leads to a noticeable performance improvement,
    esp. when using the GMP multiprecision kernel.

    NB: a fine-tuned gp may fail some of the tests in 'make bench' while
    still returning correct results. (PARI does not guarantee correct
    rounding, so any floating point number close enough to the true answer
    is acceptable.)

  * An _experimental_ --enable-tls Configure option is available, moving
    libpari a long way towards thread safety. See the new Appendix C in the
    User's guide to the Pari library for how to use libpari in multi-threaded

  * The pseudo-random number generator has been changed. The old linear
    congruential generator has been replaced by Brent's XORGEN, which uses
    a Linear Feedback Shift Register. Pseudo-random sequences are much
    better behaved, e.g. matdet(matrix(5,5,i,j, random())) is no longer
    guaranteed to be divisible by 2^90 or so.

  * Class-field theoretic functions (e.g. bnfinit) no longer cheat on Bach's
    constant. They now use safe bounds by default, correct under GRH.
    The bounds have been suitably optimized and no slowdown is expected.

  * Many more regression tests and benchmarks in 'make test-all'

  * The data files from the elldata and galdata packages can now be compressed
    using gzip.


  * obsolete functions changevar() and reorder() have been removed. 
    -- substvec() is more powerful than changevar() was
    -- reorder() did not work well; it's only sensible use was without
    argument, to get a list of user-defined variable. Use variable() for this.
    A patch is being worked on, providing ways to truly assign an arbitrary
    priority to a given GP variable without the limitations of reorder() 
    (which only affected output).

  * potchebi() is now called polchebyshev()

  * issquare(n, &z) and ispower(n, k, &z) now always set z to a suitable
    k-th root.

  * getrand() no longer returns an integer (it returns the FSR state array).
    Standard uses like
      seed = getrand(); ... ; setrand(seed);
    remain valid.

  * [Library mode]: global arrays pol_1 and pol_x have become functions.

Have fun,



P.S: The Changelog.

Done for version 2.4.0 (released 06/10/2006):
    1- typo in remiimul: wrong result in a "failsafe" branch (hardly ever
       taken). May affect modular powering /Fp if p >> 10^1300 [#457]
       Also affects the gmp kernel, for p >> 10^5800.
    2- rare accuracy problem in bnfinit
       setrand(1974190693); bnfinit(P) --> non invertible matrix in gauss
    3- inconsistent return type in nffactormod [#460]
    4- the following TODO item
        bnfinit may give wrong answers because we cheat on the value of
        Bach's bound, using B := 0.3 log^2 D by default, where 0.3 should
        really be 12 (under GRH). If the prime ideals of norm <= B do not
        generate the classgroup, we may not detect it, and compute junk. Ex:
        * setrand(3); bnfinit(y^4 + 1190*y^2 + 1416100).cyc
          --> [8,2,2,2]. The correct structure is [8,4,2].
        * setrand(1414185642); bnfinit(y^4 + 635*y^2 + 403225).reg
          [twice the correct value]
        * setrand(867341586); bnfinit(y^4-y^3+6122*y^2+6121*y+37466641).gen[2]
          [is principal]. Group structure and regulator are correct!
       Retune check_bach()
IZ  5- remove bogus test for "external help" (= ??)
IZ  6- [OS/2]: stack check [prevent oo recursion] present but not enabled
IZ  7- [OS/2]: bogus [BUG] in 'program' bench (install pb not detected)
    8- gammah(1+O(3^5)) --> incorrect type in ggamd.
    9- invalid read in copy_leaf [ SEGV in some libc ]
BA 10- ellheight short help was accidentally truncated.
   11- substpol(1+O(x^(2*n)),x^2,x) --> 1+O(x) instead of 1+O(x^n) [#470]
   12- [OS X] only use -no-cpp-precomp with Apple cc
   13- divrem(x,x,y) --> [1/y*x, 0]
   14- (1+x)/(1-x)/(1+x)^2 not simplified [#472]
   15- typo in qflll: in rare cases (exact input+floating point computation+
       precision increase in last-but-1 step), the returned base change is not
       properly updated in last iteration --> basis not LLL-reduced
   16- simplification missed in div_scal_rfrac() [ #473 ]
   17- ispower(x^k, k) would answer 0 for some x and k in {3,5,7} [#476]
   18- content(t_MAT with exactly 1 col) gave a wrong result
   19- random(N) was not uniformly distributed in [0,N-1] (use a reject
       strategy instead of moding out) [#210]
   20- rare bug in red_montgomery (returning 0 with + sign, an incorrect object)
       [ polrootspadic(x^11+x,11,10) --> corrupts gen_0 ]
   21- qfbsolve(Qfb(1,2,10),5) --> [0,0; 0,0] instead of 0 [#479]
   22- ispower(0, n, &z) would not set z
   23- wrong result in conversion t_QUAD -> t_PADIC whenever disc  = 1 (4)
JJ 24- gaddgsz macro was wrong [#481]
   25- gener_Fl(p^k) can't handle k > 1, use gener_Zl instead [#480]
SC 26- [GMP] mp_set_memory_functions was called with an incompatible realloc 
       function. [#484] 
   27- raising a t_QFI or t_QFR to the power n would return a reduced form (OK)
       except when n = 1. Make it systematic.
   28- in rare cases (return 0, native kernel) int_normalize was not suitable
       for gerepileupto
   29- idealnorm(nf, t_POL) didn't work
AM 30- [TeXmacs] typo in texmacs_output: x --> <bluex> [#491]
   31- accuracy errors in bnfinit: setrand(3); bnfinit(x^2+999999999999971)
       [ use a failsafe version of gmod (modr_safe), and increase accuracy 
         if necessary ]
   32- possible corruption of gen_2 in mynegi() [ hnflll ]
   33- factor(4/x) --> [2, 2; x -1]  (content not removed)
BA 34- bnrstark prototype code was non-standard.
   35- rnfkummer(,,degree) often found too many fields [#482]
   36- loss of accuracy in p-adic ellinit: wrong digits and spurious errors:
       E.g i = 5; ellinit([1, -1, 1, -1, -14]*(1+O(17^i)))
   37- missing GC in forvec(,,2)
BA 38- Interrupting GP could lead to a freeze. [#488]
   39- possible stack corruption in charpoly(,1)
   40- Ser(x) raised an error [#499]

    1- moved cgiv, gtofp to inline kernel
    2- reduce amount of memory needed by APRCL
    3- remove CPP from Configure tests (not needed)
    4- allow arbitrary sequences (not only expressions) in sum, prod, etc.
       sum(i = 1, 2, 1;2) --> 4  [ was: error ]
    5- checked that no 2-strong pseudoprime passes BSPW primality test up to 
       10^15 (use Galway's list, extending Pinch's 10^13)
    6- random() now uses Brent's XORGEN (replaces congruential linear generator)
       getrand() returns the FSR internal state array, used by setrand(). The
       latter no longer returns the input seed. (Initial patch by RR)
    7- for install(): parser code 'E' is now obsolete, use 'I'
    8- if issquare(x, &n) == 1, always set n to a square root of x
    9- if ispower(x, k, &n) == 1, always set n to a k-root of x
   10- issquare(t_QFI or t_QFR) now is an error. Use explicitly
       issquare(component(x,1)) if you relied(?) on the old behaviour
   11- [library] rename gener_Fp -> pgener_Fp, gener_Fl -> pgener_Fp
       [ contrary to 'gener', these assume that their argument is prime ]
   12- [library] rename cyclo -> polcyclo, subcyclo -> polsubcyclo,
       tchebi -> polchebyshev1, legendre -> pollegendre
   13- restrict the types allowed in gaffect and gaffsg to scalar types and
       vectors of such.
   14- vecextract(x, bitmask) much faster [ read bits, don't use shifts ]
   15- improve hyperu
   16- remove gp-specific signal handler. Use the one in libpari
   17- [library] pol_1 and pol_x are no longer global arrays but functions
   18- [GMP] was inefficient for small sizes (e.g. 1-word operands)

BA  1- function Flm_rank
BA  2- Add experimental --enable-tls Configure option and thread-local stack 
       support. Warning: using this option break the ABI.
    3- centerlift(t_PADIC)
    4- pgener_Zp, pgener_Zl
    5- dvdiu, dvdis, dvdiu, dvdsi, affgr
    6- cgetipos, cgetineg, togglesign
RM  7- polhermite, polchebyshev2
    8- allow rnf.zk and rnf.nf
    9- [toplevel benchmarks] bnfisintnorm, quadclassunit, rnfkummer
   10- ZX_factor, QX_factor
   11- allow gzip'ped elldata & galdata files
   12- allow t_VECSMALL in vecmin / vecmax
BA 13- add pari_stackcheck_init() function to control deep recursion detection
   14- Configure --tune flag

    1- Odos/Makefile (no longer functional, obsolete)
    2- old CodeWarrior-specific hack (malloc)
    3- error code: intger2, affer3, overwriter
    4- useless static function gp_handle_SIGINT
    5- functions changevar() [ use substvec ] and reorder() [ use variable()
       to get the list of user variables ], global arrays pol_1[], pol_x[]
       ordvar[] and polvar[]

Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]