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 http://pari.math.u-bordeaux.fr/download.html 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. =========================================================================== HIGHLIGHTS: * 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 applications. * 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. BACKWARD COMPATIBILITY ISSUES: * 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); or setrand(1); remain valid. * [Library mode]: global arrays pol_1 and pol_x have become functions. Have fun, Karim. =========================================================================== P.S: The Changelog. Done for version 2.4.0 (released 06/10/2006): Fixed 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 P=x^8-787856*x^6+232721637848*x^4-30546112988506688*x^2+1503204734505922286224; 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] Changed 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) Added 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 Removed 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]