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