| 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]