Karim Belabas on Fri, 26 Nov 2004 18:33:52 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
pari-2.2.8 released |
Dear PARI enthousiast, I would like to announce the release of pari-2.2.8.ALPHA. The sources can be obtained through the address http://pari.math.u-bordeaux.fr/download.html %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Features: ========= -- the documentation has been cleaned up, in particular the Tutorial and chapter 4 & 5 of the User's manual. The latter was split in two parts, devoted to GP and libpari repectively. Chapter 5 has been completely reorganized and scores of internal functions documented (to be continued). -- tighter integration with gmp [ if "Configure --with-gmp" ]. In particular the floating point kernel and "transcendental" functions have been much improved. Have a look at http://www.math.u-psud.fr/~belabas/pari/benchs/timings-mpfr.html for a comparison between pari-2.1.5 and 2.2.8 (with both native and GMP kernel) in this respect. -- new assembler kernels for x86_64 (Opteron), hppa 32 and 64 bit support in Configure for GNU/Hurd, sparc64, x86_64 and ppc64 -- support for forvec() in GP2C Compatibility warning: ====================== -- ellheight now uses the standard normalization [ twice the value it used to return ] -- [internal] lgef / setlgef / evallgef removed from the library [ was used to code the degree of t_POL types ] -- ':' is no longer allowed as a substitute for the separator ';' [ for GP2C extensions ] Have fun, Karim. P.S: The Changelog: Done for version 2.2.8 (released 25/11/2004): Fixed 1- gp --version: stack overflow 2- overflow (in C long multiplication) in zeta(4.45+292532.0*I) 3- setrand(1); bnr = bnrinit(bnfinit(quadpoly(1020,y)), 31,1); rnfkummer(bnr, matdiagonal([5,1,1])); --> SEGV ( typo in FpXQX_from_Kronecker ) 4- make -j4 bench could start the bench before the binary was built 5- matkerint had stopped working [from 2.2.7] GN 6- [Solaris + cc:] fix linker warnings (missing object types in src/kernel/*.S) 7- listsort(List([]), 1) --> SEGV 8- setrand(1582268146); bnr=bnrinit(bnfinit(y^12+6*y^10+31*y^8+84*y^6+159*y^4+166*y^2+1),4,1); rnfkummer(bnr,[1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0;0,0,0,1,0,0;0,0,0,0,2,1;0,0,0,0,0,1]); --> bug in gadd [ typo in FqX_split ] Smaller test-case: setrand(1701015992) factorff(x^2+y+2, 3, y^3+y^2+2) MSo 9- bug in print_version() --> SEGV on startup if cc version number too long 10- subst(O(x),x,x+O(x^2)) --> SEGV [ substituting in 0 t_SER ] MSo11- various bugs in anal.c: uninitialized reads in get_op_fun(), double_op() memory possibly freed twice because ep->args was not reset to NULL after being freed 12- (10^100 + 0.) / (10^100 + 1.) --> 0. [ display bug from 2.2.6 ] 13- rnfnormgroup(): restrict to primes of degree 1 [ much faster ] 14- gamma(351/2) --> 1.235874058265488750143951998 E740 [ = gamma(351) ] 15- gammah was much slower than gamma [ contrary to docs ] 16- problems with 0 t_SERs: O(y^5)/(1+x) + O(x^3) --> O(x^3) O(y^5)/(1+x+O(x^3)) --> O(y^5) + O(y^5)*x + O(y^5)*x^2 + O(x^3) O(y) / (1+x) --> O(y) O(y) * 1/(1+x) --> O(y) subst(x+O(b),x,a) --> a 17- (0. * x) / x --> 0.E-28 * x 18- content(0.*x) --> 0 19- nfinit([x^2+1, y]) --> SEGV (bad input) 20- lngamma(10^50*I) returned many more digits than were significant 21- bnfinit(x^4-768*x^3+220032*x^2-27869184*x+1316749312) --> recent oo loop 22- elllseries(large t_REAL) --> 0 [ instead of ~ 1 ] 23- erfc(0) --> error [ instead of 1 ] 24- bnfinit(,1) could return without giving fundamental units (if the computation is unfeasible). Raise an error instead. IS 25- config/get_head would not work only if one invoked $PWD/Configure 26- obscure simplification bug: x;s;t;u; a = -9*u*x^3+3*u*s*x^2-3*u*s^2*x+u*s^3+u^4 b = 9*u*x^3+3*u*s*x^2+3*u*s^2*x+u*s^3+u^4 bezout(a,b) * (2*u^4*s^3+2*u^7) --> involves terms like u^5/u^2 27- matrixqz(matrix(2,1,i,j,i-1),-2) --> [;] instead of [0;1] 28- possible SEGV in bnrinit [ when ray class group is trivial ] 29- negative definite forms allowed by Qfb() while most qfb* routines can only cope with positive definite forms. Explicitly disallow negative definite forms. 30- \p 38 ellinit([1,0,0,-19959260,-34323045317]) -> precision too low in initell 31- {p = x^36 - 252*x^34 + 27504*x^32 - 1723392*x^30 + 69300198*x^28 - 1894026456*x^2 6 + 36355251492*x^24 - 499350803616*x^22 + 4953373719489*x^20 - 355510821425 40*x^18 + 183790369965636*x^16 - 677399199594048*x^14 + 1751507793357696*x^1 2 - 3105079104411648*x^10 + 3651333353058816*x^8 - 2698458969378816*x^6 + 11 30370773667840*x^4 - 207898980728832*x^2 + 2879456034816; nfroots(nfinit(subst(p,x,y)), p); } --> loop forever in lllintpartial() Fix: abort lllintpartial if progress negligible (was: if _no_ progress) 32- some permanent structs not freed in freeall() 33- [--with-gmp] round(-4294967296.1) --> '-0' [ typo in mpent ] 34- polredabs(x^4-x^3-31*x^2-12*x+144) was not reduced [ typo in subfield detection algorithm ] 35- nffactor(nfinit(a^2+1),x^2+[]) --> SEGV GH 36- lngamma was not even continuous : its argument was reduced mod 2Pi 37- contfrac(sqrt(2)/2,,2) --> trying to overwrite a universal object 38- nfroots(nfinit(a^2+a+1),x^2-a/4) --> [] (leading coeff not properly taken into account in nf_DDF_roots) 39- Y=Mod(y,y+1);Mod(Y*x,x-1)^2 --> bug in FpX_divrem, p == NULL 40- return type for nffactormod was not a factorization (had become t_VEC) 41- Pol(Ser(1+x)) != 1+x [ bitmask not cleared properly in gconvsp() ] 42- default(datadir,"...") --> SEGV [ attempt to free a static string ] 43- Configure was missing log2/exp2 on systems that had it 44- typo in base2.c:init_norm() [ wrong result in idealprimedec for huge fields ] 45- matsnf([x,1; 0,x],6) --> incorrect type 46- qfgaussred(a) did not work if coefficients of a did not support the "sign" operation [ signature was computed internally ] BA 47- bitneg(1,0) --> SEGV (caused by 2.2.5 A10). 48- factorback([;]) didn't work [ should be 1 ] 49- f = factor(n); divisors(f) destroyed the factorization stored in f 50- add missing GC in hess() 51- [Configure:] runpathprefix was computed only in terms of $osname (assuming standard vendor supplied linker). At least check whether it's GNU ld first. 52- misleading error message rtodber "overflow or underflow in R->dbl" (in fact, only overflow) 53- quadgen(-8) * 0. --> SEGV 54- I + O(2^10) --> error 55- ((x + quadgen(-8))*Mod(1, i))/(x^2+1) --> SEGV [ from randomgen ] 56- Mod(a^0,i^0) --> Mod(1,1) [ should be Mod(0,1) ] 57- factor(HUGE, 100000) --> "pointers lost in gerepile" in random GC in ifac_realloc() [ missing copy() for (*partial)[2] ] 58- incorrect gerepile() behaviour on t_LIST [ would try to update non-existing components if list not full ] BA 59- quoted strings were not displayed properly quoted. 60- bestappr(0.1, 8) --> 0 [ should be 1/8 ] 61- rare bugs in copying routines [ clone bit sometimes not unset ] 62- SEGV in qfminim when integer entries and precision error occured BA 63- galoisidentify() could fail on WSS group with S4 residue. 64- t_POLMOD + t_MAT was incorrect. E.g Mat(1) + Mod(1,x) --> Mod(Mat(1),x) instead of Mat(Mod(1,x)) as for other scalars. 65- Mod(1,8) + O(2^2) --> Mod(1,8) [ should be error ] 66- lngamma(1.) returned a t_REAL of length 'realprecision' (instead of 3) BA 67- matsnf(Mat([])) was returning a matrix instead of a vector. 68- ellap(ellinit([0,1,0,1,0]), 100) --> FPE [ BIB: 100 is not prime, but make the routine more robust ] 69- give meaningful error messages (with context) for 1<<(1<<32), 1<<Pi (1<<32)! allocatement(1<<32) [ was: "impossible assignment I-->S" ] 70- memory possibly freed twice in pop_val_if_newer() [ race condition on interrupt (<C-C>) during new_val_cell() ] 71- ellap(ellinit([0,1,0,1,0]),100) --> SEGV [ 100 is not prime ! ] MS 72- recover from readline history corruption [ don't trust history_length in history_is_new() ] 73- obscure bug in thue() [ unit of norm -1 not found due to interface inconsistencies ] t = thueinit(x^6 - 2); thue(t, 2638) --> [] JD 74- [Configure:] detection of times() 75- Forbid t_POL + t_VEC: useless and inconsistent [ we had: 1 + [] --> error, x + [] --> OK but x * [] --> [] instead of '[]*x' , etc. ] 76- obscure bugs wrt polynomials with t_MAT coefficients created via Pol() [ e.g content(x*[;]) --> [;], primitive_part(x*[;]) --> [;] ] 77- incorrect behaviour in scalarpol()/scalarser() for exact 0 argument 78- typo in ellap: e defined over Fp didn't work any more 79- t_SER ^ t_QUAD --> SEGV 80- nffactor(non-monic t_POL) --> SEGV due to FpX_red interface change [ don't allow t_INT argument, t_POL is mandatory ] 81- ZX_incremental_CRT: wrong handling of degree increase (--> oo loop) 82- SEGV in Karatsuba multiplication for polynomials, when high product was 0 (over a ring which is not an integral domain!) 83- 1 / Mod((a^2-a)*x^2-1,Mod(2,6)*x^3+Mod(1,2)*x^2+1) --> SEGV 84- ellap(e defined over F2, 2) gave wrong results [ assumed e defined over Q and reduced relevant data modulo 8 ] 85- matcompanion(degree 0 polynomial) --> stack corruption 86- incorrect handling of inexact polynomials in matsnf(,2) [ inexact leading 0 coefficients ] 87- writebin(file, 0) saved a "corrupted" object (0 couldn't be read back) 88- wrong prototype used in rnfdet() [ accepted 3 arguments instead of 2 ] 89- typo in to_Kronecker [ when at least 3 variables involved ] 90- typo in x = sqrt(t_PADIC) [ returned either x or -x ] 91- rare stack corruption in RgX_mul(t_POL, t_POL) [ when product of leading coefficient cancel, valuation is non-zero _and_ we use an "unsafe" gerepile right afterwards ] 92- component(Ser(x),2^31-1) --> SEGV 93- typos in krosi(), kronecker() [ e.g krosi(-4,1), kronecker(0,2^32+1) ] 94- agm(-1,2) --> oo loop 95- tanh(10^10) --> exponent overflow [ should be 1 ! ] 96- gamma(exp(-373)) --> exponent overflow 97- readline: assume a file 'foo' exists, \rf<TAB> --> \foo [ r deleted! ] [\r f<TAB> was OK]. Solution: just expand to '\r f'; hitting <TAB> again completes properly --> \r foo. BA 98- Reduce stack consumption in ffinit and polsubcyclo. 99- (p/q)' wasn't simplified if q wasn't squarefree 100- polylog(n, x < 0) had a (small) non-zero imaginary part 101- 3 + O((-1)) --> oo loop 102- creating t_PADIC/t_SERs via x + O(...) eventually blew up the heap 103- fix memory leaks related to GP pointers and clones Changed 1- lgef / setlgef / evallgef removed. One may safely use lg for t_POLs. As a result maximal degree jumps to ~ 2^24 on 32bit machines 2- renamed *res(te) routines to *rem(ainder). Eg poldivres --> poldivrem, nfdivres --> nfdivrem BA 3- Internal u_Fp* routines now are renamed Fl* and made public. BA 4- [GMP kernel] Library soname changed to libpari-gmp[-2.2].so.N. BA 5- Library .so link changed to libpari.so for all versions. Static library changed to libpari.a for all versions. 6- COMPAT: ellheight now uses the standard normalization: twice the value it used to return. The values returned by ellbil() and ellheightmatrix are unaffected. In particular, ellheightmatrix() is the polar form of elleight(), and ellbil now satisfies the proper identity for B(P, Q) = (h(P+Q)-h(P)-h(Q)) / 2 7- renamed and declared gmul_mat_smallvec --> RM_zc_mul gmul_mati_smallvec--> ZM_zc_mul 8- move functions in highlvl.c to libpari, excluding install(). 9- bnfinit: use approximate integral LLL reduction (much faster than fp) 10- bnfinit: cache multiplication table by prime ideal anti-uniformizers (faster valuations) BA 11- improve binomial (use divide_conquer_prod) 12- improve bnrinit & idealstart when finite part of conductor is 1 (+ improve stability) 13- subgrouplist(bnr,...) does not require bnr to contain generators anymore ( bnrinit(,,1) ). Also much faster. 14- allow zetakinit() to use a bnf argument [ would be recomputed before, making it impossible to certify the result since bnfcertify could not be applied ] BA 15- error messages now mention the GP function when the error occured. 16- intro message [ no point in displaying "realprecision", "seriesprecision" and "format" on startup. One can query them individually, or ask for all defaults ] BA 17- macro varncmp(vx,vy) should now be used to compare variable numbers. BA 18- split substpol from subst ( reverse [ 2.2.1 C24 ] ). Use substpol for non-trivial algebraic substitution. 19- remove t_FRACN / t_RFRACN from \t output, add t_VECSMALL BA 20- bittest() now handle negative operand as 2-adic. BA 21- type() does not allow to change object types anymore. 22- internal routines setloop()/incloop() allocated 2 chunks of memory, then assumed they were connected [ true for the current allocation model ]. Remove that unecessary assumption. 23- more informative error messages in concat() 24- in affsi / affui (s, z) : do not check that lg(z) >= 3 25- replace gexpo(t_QUAD) by a rough aproximation (as t_COMPLEX): faster 26- made Mat(t_VEC of w t_COLs of the same length h) return a h x w matrix Used to be a 1 x w matrix whose elements were t_COLs. Obsoletes such hacks as: v = vector(...); v[1] = Mat(v[1]); concat(v). Now Mat(v) is enough. 27- move BEGINEXTERN / ENDEXTERN pairs out of kernel headers into pari.h 28- split the User's manual in two: PARI/GP and libpari. 29- updated and completed the tutorial 30- faster basic transcendental functions on small inputs (sqrt, log, exp) 31- rewrote basic generic kernel (add,mul,div) [ faster, less obfuscated ] 32- macroified gop1z, gop2z, gops2gsz, gops2sgz, gops2ssz 33- diviiz(x,y,z), divisz, divsiz and divssz always assign the euclidean quotient [ used to depend on the type of z: if t_REAL computed exact quotient ]. Use rdivii, rdivis, rdivsi, rdivss for analogous functionality (no "z" variant); 34- ensure proper rounding in divrs 35- renamed padiczero --> zeropadic [ as in zero[pol|ser|vec|col|mat] ] 36- macroified gcosz, gsinz, gexpz, etc + cleanup transcendental functions 37- macroified mulssz, addssz 38- rename mpent --> mpfloor 39- rename divise --> dvdii, gdivise --> gdvd, mpdivis --> dvdiiz, mpdivisis --> dvdisz 40- rename mpppcm --> lcmii, remove mppgcd [ use gcdii ] 41- rename resss --> remss, ressi --> remsi, resis --> remis, resii --> remii, gres --> grem 42- rename krogs --> krois, krosg --> krosi 43- rename FpXQX_FpXQ_mul -> FqX_Fq_mul, FpXQX_normalize -> FqX_normalize 44- rename adduumod, subuumod, muluumod, divuumod --> Fl_[add,sub,mul,div] invumod --> Fl_inv, invsmod --> Fl_inv_signed, powuumod --> Fl_pow powiumod --> Fp_powu, mpsqrtmod --> Fp_sqrt, mpsqrtnmod --> Fp_sqrtn 45- rename mpsqrt --> sqrtr, mpsqrtn --> sqrtnr 46- don't copy arguments of user functions for types which have no modifiable components (anything but VEC, COL, MAT, LIST, VECSMALL): much faster. 47- ':' no longer allowed as a substitute for ';' if compatible = 0. Use GP2C semantics [ x:int, v:vec ]. For the time being the type information is discarded. 48- modulargcd() was very inefficient for non-monic t_POLs [ e.g (poltchebi(x) - 1) / (x-1) ] JD 49- [timer: ] use sysconf(_SC_CLK_TCK) instead of CLK_TCK if available, and make sure one of these is available before choosing times() in Configure JD 50- check for 'exuberant-ctags' before 'ctags' in make_vi_tags [ and fail gracefully if neither is found ] BA 51- support for gp2c-run on Darwin 52- remove blanks in "raw" outputs ( default(output,0) ) 53- made .fu and .tu return t_POLMOD, not t_POL BA 54- [GMP kernel] use mpn_sqrtrem for sqrtr_abs 55- nfsubfields (use much less memory) GH 56- more robust thue(): faster enumeration of small solution, don't assume that the full unit group is known, warn when conditional result is obtained. 57- remove log() flag: decide alone whether to use AGM or not. Rewrote logagm and mpexp1 58- make ??? index search ignore case [ ???bernoulli will find Bernoulli ] 59- renamed svaluation --> u_lvalrem, pvaluation --> Z_pvalrem 60- change semantics of sqrtn to catch easily non-residues from the user's side 61- rewrote the 'tune' utility, add one tune.h file for each kernel, support for user override still needs to be rethought (or documented). Added 1- make test-all [ all available test suites (SLOW !)] BA 2- add support for GNU/Hurd. 3- conversion routines zv_to_ZC, zv_to_ZV, zm_to_ZM, and matrix multiplication: RgM_zm_mul, ZM_zm_mul. 4- output support for zm / Flm matrices (t_MAT with t_VECSMALLs instead of t_COLs) 5- FpM_rank 6- allow factor( an elt in Z[i] ) 7- put back bruteall [ used by Math::Pari ] BA 8- Configure support for sparc64, x86_64 and ppc64 BA 9- x86_64 level0 inline assembly kernel BA 10- add POSIX-style long options --fast, --quiet, --primelimit and --stacksize. 11- new internal library routine itos_or_0 12- new member function .index 13- rdivii, rdivis, rdivsi, rdivss to replace diviiz & co. 14- new routine mpround, mpfloor, mpceil, mptrunc, roundr, floorr, ceilr, truncr BA 15- galoisisabelian, galoisexport, galoisidentify and galoissubgroups now also accept subgroups returned by galoissubgroups. 16- new routine Fl_sqrt 17- new routines FpX_factor, FqX_factor, FpX_degfact, FqX_red 18- private header file pari-priv.h 19- new function ispower 20- forvec iterator GH 21- new function zncoppersmith 22- public interface to forvec() [ forvec_start + forvec_data, for GP2C ] 23- routine sqrtremi() [ Karatsuba square root ] 24- internal routine int2n() [ = 2^n ] 25- new functions Z_pval, Z_lval, u_lval 26- new function primepi BA 27- new default factor_add_primes BA 28- HPPA 32bit and 64bit level0 inline assembly kernel Removed 1- obsolete macro leadingcoeff [kept for backward compatibility but removed from the documentation]. Use leading_term. 2- obsolete undocumented type t_SMALL BA 3- revert 2.2.1 A14 and A17 (broken with GMP kernel, unmaintainable). BA 4- cornacchia, in favour of qfbsolve. 5- useless inefficient types FRACN / RFRACN 6- routines gred [useless] / gredz [ useless did not work ]. Define gred --> gcopy for backward compatibility 7- many obsolete error codes [ for err(...) ] 8- smodsi() [ useless, not well defined ] 9- buggy macros mppiz, mpeulerz [ undocumented, useless, broke compilation to use them ] 10- inconsistently named macros mpinv[sir]r [ were "z" functions ]. 11- public macros refering to static transcendental routines (e.g mpatanz) 12- undocumented, inconsistently named, useless, mulsii, addsii, divisii 13- useless routine umuluu [ use mulll ] 14- undocumented [macro] constants pariC1, pariC2, pariC3, pariK, pariK2, pariK4 -- 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]