pari-2.4.2 (UNSTABLE, ALPHA) released
"Karim Belabas" <[email protected]> Sun, 23 Dec 2007 20:58:29 +0100
| Newsgroups | gmane.comp.mathematics.pari.announce |
|---|---|
| Message-ID | <[email protected]> |
Dear PARI lovers,
I would like to announce the release of pari-2.4.2-ALPHA. The sources
and a binary for Windows can be obtained through the address
http://pari.math.u-bordeaux.fr/download.html
It includes Bill Allombert's major rewrite of the GP parser / evaluator;
see the release notes below. Thanks for a very nice piece of work, Bill.
It is also partly a bugfix release for the UNSTABLE development branch
(118 bugs fixed). Please help us test this ALPHA release!
See http://pari.math.u-bordeaux.fr/Bugs/ for how to report problems or subm=
it
wishlist items.
Merry Christmas !
Have fun,
Karim.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
HIGHLIGHTS: For simplicity, the description below is sligthly inaccurate;
be sure to check the documentation, in particular sections II.6 and II.7
of the "User's Guide to PARI/GP".
* In the old gp, it was not possible to use the same identifier for varia=
bles
and functions; now there is nothing wrong with defining a user function
f(x,y)=3Dx^2+y^2, then setting f =3D 1 (thereby deleting the function).
=20
In fact, the distinction between variables and functions has been abolish=
ed:
anonymous functions (closures) may be defined and assigned to variables,
e.g. the old f(x,y) =3D x^2+y^2 is now an alias for f =3D (x,y) -> x^2+y=
^2
COMPATIBILITY ISSUE: function calls *must* include parentheses. I.e.
typing f() calls the function f without arguments as expected, typing f
returns an anonymous function with the same definition as f; for instance,
v[1] =3D f is valid.
KNOWN BUG, to be fixed in next snapshot release: For the time being,
built-in functions don't generate closures. A statement like 'f =3D sin' =
is
invalid ( f =3D x->sin(x) or f(x) =3D sin(x) are both correct ).
* This has a large number of useful side effects; it made possible two new
functions select() and apply():
\\ primes in { i^2+1 : i <=3D 50 }
? select(vector(50,i,i^2+1), x->isprime(x))
%1 =3D [2, 5, 17, 37, 101, 197, 257, 401, 577, 677, 1297, 1601]
\\ entries < 100 in the preceding list
? select(%, x -> (x<100))
%2 =3D [2, 5, 17, 37]
\\ enumerates (Z/NZ)*
? invertibles(N) =3D select(vector(N,i,i), x->gcd(x,N) =3D=3D 1)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
? apply(x->x^2, [1,2,3,4])
%1 =3D [1, 4, 9, 16]
? apply(x->x^2, [1,2;3,4])
%2 =3D
[1 4]
[9 16]
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Similarly, vecsort() was extended to allow arbitrary comparison function=
s:
\\ sorts a vector of polynomials by increasing discriminant
? vecsort( v, (x,y) -> sign(poldisc(x) - poldisc(y)) )
* COMPATIBILITY ISSUE: variables implicitly scoped to loop or function
bodies are now lexically scoped. This means that in
for(i =3D 1, 10, g())
f(i) =3D g()
the index i is truly local to the loop/function body. It is no longer seen
by the function g(), as used to be the case.
One can declare lexicaly-scoped variable anywhere using the construct
my(x, y, z, t), possibly with initializations: my(x =3D 1, y =3D x).
The old "local" keyword keeps the same semantic (dynamic scoping) and is
mostly obsolete, outside of very specific situations beyond the scope of
these release notes.
=20
* Lists now grow as needed, without imposing an awkward maximal length.
v =3D List() is now sufficient to initialize an empty list, instead of
v =3D listcreate(100) to initialize a list which wouldn't grow past 100
elements.
As well, vectors of lists are now valid objects; something like=20
v =3D [List()]; listput(v[1], ...) does work now.
* Special polynomials (polcyclo, polchebyshev, pollegendre...) are orders=
of
magnitude faster ( polcyclo(10^6): 5min (2.4.1) -> 16ms (2.4.2) ) and
directly allow evaluation at a given point, e.g. polcyclo(n, 2) for Phi_n=
(2).
* issquare(t_POL) now works reliably over prime finite fields ( we used
to have issquare(Mod(1,2)*(x^2+1)) -> 0, or error messages in more
complicated cases ). In the same vein, charpoly no longer assumes that=20
the characteristic is 0 or large enough (Berkowitz division-free algorith=
m).
* new default "factor_proven" to guarantee that all integer factorizations
outputs proven primes ( the default is to be happy with strong pseudoprim=
es ).
* new defaults "graphcolormap" and "graphcolors" to allow arbitrary color=
maps
in hi-res plots.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
P.S: The Changelog
Done for version 2.4.2 (released 22/12/2007):
Fixed
1- divrs(0., negative integer) had the wrong exponent
2- vecsort(,,4) was broken in 2.4.1
3- allocatemem(z) didn't check that z >=3D 0 [#556]
4- remove hack in internal function 'readbin' that used the clone bit as
a special marker hence returned an invalid object, which could be
propagated to higher level public functions.
BA 5- sqrtn(Mod(a,p),..) and factorff() were broken in 2.4.1
BA 6- bitnegimply(1,2^65) returned a wrong result [#560]
7- nfeltreduce(nf,t_POLMOD,id) didn't work [#558]
8- [library] missing function intfourierexp()
9- segv in polrootspadic / repeated roots in FpX_root (only in deg 2) [=
#562]
10- log(2+O(4^4)) --> oo loop
11- log(exp(1e-100)) -> 1.000000000149525401279188592 E-100
[ for some accuracies, log & exp inacurate near 1 and 0 resp. ]
12- numbpart inaccurate (and slow). E.g numbpart(52602) off by 1 [#557].
BA 13- &, |, && and || were right-associative instead of left-associative
14- remove type assumptions in mulcxI, mulcxmI: unsafe [#516]]
15- too much memory allocated to print real numbers
16- (y/x)/(x^0/y) not correctly simplified
17- \s reported a misleading number of available user variables
18- 1/(quadgen(-4)*x)+0. -> exponent overflow [#591]
19- sumpos(x=3D1,1/x^2,1) had the wrong sign [#587]
20- matrixqz(x,0) would not work if first two determinants were 0
+ might lose pointers in gerepile
21- sumpos(x=3D1,0) -> oo loop [#585]
22- qfminim([[;]],,,2) --> SEGV [#598]
23- intformal(1) --> incorrect object
24- intformal(y,x) --> y*y
25- matadjoint(0) --> gerepile error
26- prodinf(x=3D0,0), prodinf(x=3D0,-1,1) --> oo loop
27- agm(-1, 1+1e-55) --> oo loop, agm(-1,1) --> wrong result
LGr28- killing hi-res graphic window created zombie process (missing wait())
29- missing type check in eint1(x,n)
30- ploth(...) + Ctrl-C --> hi-res graphic window killed [use pari_daemo=
n()]
31- quadgen([]) --> incorrect object [#606]
32- hyperu(0,1,1) --> oo loop [#608]
33- fix headers so that ulong is always defined
34- read("a b.gz") \\ filename contains a space
gzip: ./a.gz: No such file or directory
35- logagmcx inaccurate [ used for log(t_COMPLEX), large precision ]
36- RgX_divrem: prevent "impossible" situations for weird base rings
1/ Mod((y-1)*x-1, Mod(2,6)*x^3-Mod(1,2)*x^2-1) --> SEGV
37- gclone didn't work on t_INTs with lg > lgefint
38- GC error in add_rfrac() [#612]
39- missing type check in subgrouplist [#616]
40- inconsistent type checking in nfeltdivmodpr [#617]
41- nfdisc(x^32+24888960*x^30+227077545803904*x^28+887225199431341086720=
*x^26+1145458263702669503266741248*x^24-459489127319699704284694158213120*x=
^22+73430099675988831740428200872826863616*x^20-659932177896137085100546993=
3592282336329728*x^18+369563540304176984501448638025309170375722401792*x^16=
-13214618078037183940422584396181416089308059714715648*x^14+291247424536170=
563676138246427605494527806096141868597248*x^12-340722756225027166121306436=
8167141844394234574629997803208704*x^10+86996596241551965498931924083167952=
53695601521375537680749690880*x^8+15339011044779380041120819707008997553925=
3907830958400507847198638080*x^6-347047424724135529936425066245688264415605=
50586777137133227202205188096*x^4+43389826962123095743039577910848855441856=
968086933919852164410699581227008*x^2+3364628778954537502164504251891961518=
77685043455706101021513167474262016, 1)
--> "not a prime" error (help Round4 to recover when using non-prime=
s,
instead of raising immediate errors) [#624]
42- vecextract: C14 in 2.4.0 didn't work for large masks [#623]
43- clean up version handling: move version setting code to config/versi=
on
and always set PARIVERSION from CHANGES if 'CVS' [ used to require
a 'Configure' ]
44- zeta(0e1) --> SEGV [#627], exp(0e1*I) --> SEGV [#630]
45- exp(2^200*I) --> catastrophic cancellation [cos/sin were OK] [#631]
DE 46- on NFS filesystems, make install would rebuild all [#503]
47- default(compatible,3); default(compatible,1) --> case no longer taken
into account [#629]
48- missing GC in 'sigma'
49- eta(x): valuation would overflow if seriesprecision is large
50- typo in src/kernel/none/mp.c:convi --> inefficiency
51- concat(v) used too much memory (quadratic in #v, make it linear) [#6=
34]
BA 52- gp -q -f < eval('y) --> SEGV
53- "significant pointers lost" for objects involving 0 t_SERs [#635]
54- for trivial x, isanypower(x,&p) would not set p
MSo55- [Configure] don't rely on $CC exit status, check whether a non-0 size
executable is produced [ problems with tcc ]
BA 56- wrong Prototype for subgrouplist [ extra 'p' ]
57- hole in 'secure' mode: don't allow changing psfile / logfile [#645]
58- nf.codiff was only correct up to multiplication by some rational num=
ber
[cf #510 & 2.4.1-F7]
59- cgiv failed to delete the last object on stack [ if recursive ]
LGr60- first default(parisize,*) would segfault [due to C-1, #569]
61- pariputs("") --> invalid read of size 1 [ valgrind ]
62- ell.omega, ell.eta, pr.gen could lead to gerepile error [#641]
63- y=3D[x];eval('y) --> error [#652]
64- incorrect use of gerepileupto in inittestlift [ galoisconj ]
65- extra multiplication in the innermost loop of Cholesky decomposition
(qfgaussred, etc).
66- made FpX_add, FpX_sub, Fq_add, Fq_sub stack-clean. FpX_neg, Fq_neg
returned an incorrect result if input was not reduced mod p
67- setrand(4);polgalois(x^8-264*x^6+25410*x^4-1054152*x^2+15856203)
--> wrong result [#660]
68- build fails with "env: parameter list too long" [#661]
69- factorff did not accept inputs with t_FFELT coeffs
70- could use PARI stack while reading gprc [ before pari_init ]
71- Mod(Mod(1,v),v) --> invalid object.
72- a =3D Mod(y, v); y =3D Mod(1,v); eval(a) --> invalid object
73- for some complicated t_RFRAC z: z' --> impossible assignment I-->S
74- typo in bnfisintnorm(): missed some solutions [ couldn't find a unit
of norm -1 even though one exists ]
75- ffprimroot(ffgen( t_POL of degree 1)) --> oo loop
76- wrong result in theta(q, z) if sin(nz) was small for some small n [#=
667]
77- 1/Mod(0,2) --> impossible inverse modulo: Mod(2, 2)
78- alias(a,b), then ?a --> 'a is aliased to a'
79- -Mod(0,2) --> Mod(2,2)
MA 80- [Linux-PPC] missing -fPIC in DLCFLAGS
81- possible oo loop in _isprincipal [ precision was supposed to increas=
e,
but could in fact remain the same ]
82- quadregulator(y) -> SEGV [#674]
83- acos(x^0) -> division by 0 [ instead of O(x^8), at \ps 16 ]
Analogously, acosh(x^0), asin(x^0), asinh(I+O(x)) --> division by 0
84- dilog(-1) [ more generally polylog of < 0 t_REALs ] should have
0 imaginary part
85- problems with [ build/install ] directory names containing spaces
86- avoid catastrophic cancellation in 3M [ Karatsuba ] formula for
t_COMPLEX * t_COMPLEX
87- ix86, x86_64: missing earlyclobber constraint for addllx, subllx, di=
vll
88- ploth(,4) --> huge memory use for large plots
89- stirling(0,0,2) --> 0 [ should be 1, #690 ]
90- deriv(x/(x+1),y) --> invalid t_RFRAC with exact 0 numerator [#687]
91- issquare(t_POL) assumed characteristic 0 [#549]
92- sqrt(Mod(4,5) + x) --> error [ e.g. stack overflow ]
93- hyperu(0*I,1,1) --> forbidden assignment t_COMPLEX --> t_REAL.
BA 94- fix compilation problem with g++-4.2 and GMP.
95- ??factor_proven, ??factor_add_primes did not work
96- typo in znprimroot: wrong result for large moduli
znprimroot(5*2^127+1) --> 2 [#696]
97- ffgen(x*Mod(1,2)) --> x [ should be 0 ]
98- ffprimroot(ffgen((x+1)*Mod(1,2))) --> oo loop
99- nffactor(nfinit(y),x^2+Mod(1,y)) --> SEGV [#699]
100- "precision error in minim0" on qfminim(G, norml2(M[,1]), 100)
from tutorial
101- nffactor(nfinit(y^2+1),(2*x+1)*x*(x+1)) --> SEGV [#702]
102- isprime((6^2176+1)/(6^128+1)) --> length (lg) overflow [#697]
[ analogous problems for any large integer ]
103- various problems related to allocatemem() [ + document quirks ]
Remove the br_ALOCATEMEM construct and end allocatemem0() by a longj=
mp
104- missing GC in det_simple_gauss() [ matdet for inexact inputs ]
105- rare stack corruption in add_rfrac [#700]
106- add missing GC in gsubst
107- polred([pol, b]) computed unnecessary but possibly expensive
invariants of pol [ e.g. disc, index ]
108- compilation failed on AIX [ YYSIZE_T, pow ]
109- ? Mod(1,2)*x + Mod(1,2)*y
%1 =3D Mod(1, 2)*x + (Mod(1, 2)*y) \\ extra parentheses in constant =
term
? % + 0*z
%2 =3D Mod(1, 2)*x + Mod(1, 2)*y
110- factornf(x^5+(-a+2)*x^4-a*x^3+(3*a-6)*x^2+(5*a-10)*x+(2*a-5), a^2-5)=
=20
--> SEGV [ not squarefree -> denominators creeping in ] [#708]
111- problems with isexactzero and t_INTMODs. Mod(0,2)*x*1. -> 0,
Pol(Mod(0,2))+2 -> 2, (2+0*I)+I*Mod(0,4)->Mod(2,4), Mod(0,2)/x -> 0
Use isrationalzero instead.
112- substvec(x^2, [x^2], [y]) --> y^2 [ should be an error ]
113- typo in FpM_gauss_pivot: FpM_rank, FpM_image, FpM_suppl, FpM_indexra=
nk
much slower than they should be. Analogous problem in FqM_gauss_pivo=
t.
BA114- missing GP2C descriptions for Pol and Polrev.
BA115- zero FFELTs were not considered as exact zeros [#710]
116- rare SEGV in gp when recovering from error (dereferencing=20
global_err_data equal to BREAK_LOOP)
117- vecsort(t_LIST) returned a t_VEC
118- gp "huge file" + stack overflow --> stack overflow in next=20
interactive command (+ minor memoryleak) [#712]
Changed
BA 1- The combined GP parser/evaluator has been replaced by a bytecode
compiler and a bytecode evaluator
BA 2- install(): parser code 'E' and 'I' now refer to closures, not string=
s:
'I': closure whose value is ignored, like in for() loop
'E': closure whose value is used, like in sum() loop
3- Fl_pow renamed to Fl_powu [ exponent may not be negative ]
4- split usersch3.tex moving function documentation to src/functions/*
5- simplify table of contents for users.dvi
6- rename Flx_rand -> random_Flx, FpX_rand -> random_FpX
BA 7- use factor_pn_1 to compute various orders in FF.c
8- file usersch3.tex is now generated from functions/*
9- rewrote logr_abs [ inaccurate + slow for x =3D 2^k * (1 - epsilon) ]
10- rewrote exp1r_abs [ inaccurate + slow ] and mpexp_basecase [ reduce
input mod log(2) ]
11- rewrote mpsc1 [ slow ] -> faster sin and cos
12- [library] rename pointch -> ellchangepoint, coordch -> ellchangecur=
ve
13- prototype of constpi, consteuler.
14- use a little less memory to compute pi, euler, log(2)
15- qfminim(x,b,m,flag) made 'm' parameter optionnal also when flag=3D0
16- made second argument to matrixqz optional, allow non-prime values
17- matpascal(n < -1), mathilbert(n < 0) now raise an error
18- add optional extra argument to ffprimroot, fforder, fflog
19- allow znlog(x,g) where g a t_PADIC or an t_INTMOD modulo any N
that znprimroot(N) would accept
20- log(x t_PADIC): check whether x =3D 1 (mod p) before replacing x <- =
x^(p-1)
21- znprimroot(p^k): use isanypower() instead of factor().
E.g. znprimroot(nextprime(10^20)^1000): 8mn --> 12ms
znprimroot(N) no longer checks reliably whether (Z/N)^* is cyclic.
Result undefined if it is not.
22- padic sqrt much faster [ small and large accuracies ]
23- let primes() indicate a value of primelimit if unable to answer [#62=
5]
24- remove variable names from ?0
25- exp(0e10) returned 1.000, made it 0exxx [ no significant digit ]
MSo26- define polchebyshev(n, 1 or 2), pollegendre(n) for n < 0
27- znorder faster for non-prime modulus [ try it for Mod(2,5^10*7^10) ]
(compute lcm of local p-adic orders)
28- changed icopyifstack / copyifstack macros so that their arguments
are GENs, not GENs typecast to long.
29- add -funroll-loops to gcc flags when compiling arithmetic kernel
30- improve ellap (Shanks) by computing #E(F_p) mod 2 [ idea stolen from
Pierrick Gaudry ]
31- nfreducemodpr was exceedingly slow for large t_POL inputs, e.g.
w=3Dx^48 + 158*x^46 + 4*x^45 + 12103*x^44 + 448*x^43 + 597874*x^42 =
+ 23928*x^41 + 21373779*x^40 + 802424*x^39 + 588314524*x^38 + 18516794*x^37=
+ 12951694530*x^36 + 294992428*x^35 + 233870773964*x^34 + 2752210590*x^33 =
+ 3524535272389*x^32 - 5797649292*x^31 + 44873186922754*x^30 - 798816466566=
*x^29 + 486736157075707*x^28 - 18082470992066*x^27 + 4523171646555185*x^26 =
- 271968456240780*x^25 + 36127625049532658*x^24 - 3144283847234232*x^23 + 2=
48308835345289047*x^22 - 29271322082172250*x^21 + 1467438460133718165*x^20 =
- 223406933340907742*x^19 + 7435650911902583447*x^18 - 1405525828628464338*=
x^17 + 32139937168429173010*x^16 - 7272631544138987758*x^15 + 1175638503865=
77478340*x^14 - 30686320483051428956*x^13 + 359649878031434743177*x^12 - 10=
3986861631984042496*x^11 + 904392935429691313557*x^10 - 2762834669335900004=
14*x^9 + 1822091999374665372405*x^8 - 554259164403897051340*x^7 + 282776756=
9115449802250*x^6 - 788757355446858093774*x^5 + 3170224521565069297504*x^4 =
- 708295322502763110380*x^3 + 2280480720610858280676*x^2 - 3006021030020349=
38488*x + 788466592242441477569;
nf=3Dnfinit([w, nfbasis(w,1)]);
modpr=3Dnfmodprinit(nf, idealprimedec(nf,5)[1]);
L =3D nfgaloisconj(w); vector(#L,i, nfeltreducemodpr(nf,L[i],modpr)=
);
(in this example, the last reduction is down from ~ 1minute to ~ 2s)
32- make sure nfmodprininit chooses a monic T to represent
Fq ~ Fp[X]/(T) [#646]
33- remove obsolete undocumented functions outerr, outbeauterr, outsor,
outtex. Rename voir -> dbgGEN. Functions brute, outbrute, matbrute,
outmat, sor, outbeaut are obsoleted and no longer documented.
34- rename errfile -> pari_errfile, infile -> pari_infile, logfile ->
pari_logfile
35- extra test infrastructure [ drop file in src/test/in and possibly
src/test/[32|64], then run Configure, no need to edit config/get_tests ]
36- inline gerepileupto/gerepileuptoleaf + improve gerepileupto
37- [libpari] cleanup of user / temp variable handling. manage_var
obsoleted (kept for backward compatibility, to be removed), see Section =
5.9
for new equivalents. Fixes #633, #650
38- fix t_LIST as components: v =3D [List()]; listput(v[1],) didn't work=
[#468]
39- listcreate() and listkill() are obsolete, don't use them. L =3D List=
()
should be enough in all cases. All lists now grow as needed, without
requiring an awkward maximal length (from listcreate).
40- rename sqred -> qfgaussred, signat -> qfsign,
sqred1 -> qfgaussred_positive
41- rename gaddmat -> RgM_Rg_add and swap arguments. Add RgM_Rg_add_shal=
low
42- document library functions zv_neg, zm_transpose, fix typo in
documentation for RgX_neg
43- document library functions gmaxgs, gmaxsg, gmings, gminsg.
44- document library function gfloor2n
45- document library function zx_shift
46- cleaned up splines handling [ ploth(,,,256) ] : remove quark_gen & Q=
UARK
BA 47- implicitly local variables are lexically-scoped
BA 48- local and my can now appear anywhere in a program.
49- [library] rename apell -> ellap
50- Removed the OK_ULONG macro and renamed u_OK_ULONG -> SMALL_ULONG
51- Rename BIGINT -> NO_VARIABLE [used by gvar()], VERYBIGINT -> LONG_MA=
X,
MAXULONG -> LONG_UMAX. Remove BYTES_IN_LONG, TWOPOTBYTES_IN_LONG
52- implement directly gsubsg [ was a macro calling a trivial wrapper ]
53- optimize multiplication for quadratic t_POLMOD [ t_QUAD remains fast=
er ]
54- theta(q,z) very inefficient for large accuracies
55- remove support for nf of the form [nf, change of variable] in
nfnewprec() [#672]
56- global() now obsolete and scheduled for removal
LGr57- 'make ctags' gctags-specific flags [ add #defines, typedefs ]
58- prototype of nfsubfields [ 2nd argument GEN -> long ]
59- allow t_FFELT in issquare / issquarerem / ispower
60- sqrt(t_SER) now uses Newton iteration
61- rename gissquarerem -> gissquareall, uissquarerem -> uissquareall,
Z_issquarerem -> Z_issquareall (analogy with sqrtrem was faulty: we =
do
not store a remainder but the square root)
BA 62- User functions are now regular variables holding values of type t_CL=
OSURE
63- Output of \u is now sorted
64- More explicit error messages in gp_history, e.g.
*** History result %10 not available [%1-%6]
BA 65- vecsmall_uniq(v) no longer assumes that v is sorted
66- allow ellorder to handle curves over Fp, add an optional parameter to
indicate a multiple of the order as in znorder.
67- allow polcyclo(n, a) for an arbitrary a [ had to be a variable ] +
major speedups: polcyclo(10^6) 5min -> 16ms. Similarly for polchebys=
hev,
pollegendre and polhermite
68- ?0 listed all "user-defined identifiers". Restrict to "functions"
69- use simplify in setsearch() and Set() [#707]
Added
1- library functions expu, adduu, subuu
2- library functions divisorsu, factor_pn_1 (using cyclotomic factors a=
nd
Aurifeuille), merge_factor
3- library function divru, dbllog2r
4- library function ZX_gcd, ZX_isirreducible
5- library function gtos
6- library function pari_daemon
7- library function Fp_sqr, padicsqrtlift
7- library function RgXQ_inv
8- bench 'extract'
9- charpoly: Berkowitz division-free algorithm (new default) [#541]
10- library function phiu
11- library function mkvecsmalln
12- library function chk_gerepileupto, dbg_gerepile, dbg_gerepileupto
13- library function gen_sort_uniq, gen_indexsort_uniq+add flag 8 in vec=
sort
14- library function remi2n, cmp_RgX, gen_cmp_RgX
15- library function RgV_dotproduct, ZV_dotproduct, RgV_dotsquare, ZV_do=
tsquare, FpV_dotproduct, FpV_dotsquare
16- library function FpX_Fp_add_shallow
17- library function Q_pval
BA 18- new keyword "my" to declare lexically-scopped local variables.=20
19- new GP function listpop()
20- library function RgX_inflate, RgX_deflate, Flx_inflate, Flx_deflate,=
poldeflate
21- library function Fp_neg, Fp_add, Fp_sub
22- library function ugcd
23- library function vecinv, vecmul, vecpow, vecdiv, vecmodii
24- library function RgM_isidentity, RgV_isin
25- library function nfnewprec_shallow, bnfnewprec_shallow, bnrnewprec_s=
hallow
26- library function Zp_issquare
27- library function dvmdsBIL, divsBIL, remsBIL
28- library functions gassoc_proto, map_proto_G, map_proto_GG, map_proto=
_GL,
map_proto_lG, map_proto_lGG, map_proto_lGL [ were private with
other names ]
29- default factor_proven
30- experimental -balloon option to gphelp
LGr31- defaults graphcolormap, graphcolors [runtime-defined colormap for pl=
ots]
LGr32- bit 4096 [ complex ] to ploth
33- member function .p / .mod for t_PADIC
34- same mnemonic flags to plotrecth as in ploth
BA 35- member function .pol, .mod and .p for t_FFELT
BA 36- New type t_CLOSURE to store GP functions
37- Ability to use arbitrary comparison functions in vecsort()
38- library functions closure_callgen1, closure_callgen2, closure_callge=
n,
closure_callgenvec.
39- GP function apply(), select()
40- library functions FF_issquare, FpXQ_issquare, Flxq_issquare
BA 41- library function vecsmall_uniq_sorted
42- bench 'ff', 'exact0'
43- has_getenv.c
44- library function FpX_oneroot
45- library function gcmpX
46- library functions ZV_sort, ZV_sort_uniq, ZV_search
Removed
1- obsolete function kbessel2 (now static). Removed optional flag in be=
sselk
2- Removed obsolete optional flag in ellap(), Mod() and gcd()
3- Rename gen_search_aux -> gen_search and document it [ old gen_search
disappears: use tablesearch() ]
4- undocumented library functions gpolylogz, polylog, polylogd, polylog=
p,
polylogdold. Use polylog0 with appropriate flags.
5- undocumented library function ghell2. Use ellheight0 with appropriate
flag.
6- obsolete function log0; use glog
7- obsolete undocumented library function mpdivz, polzagreel, RgX_powers
(use RgXQ_powers)
8- obsolete undocumented library function sqred3
9- the emacs/ directory: PariEmacs is now distributed separately.
10- obsolete functions ellap0, apell2
11- obsolete header file pariport.h
12- obsolete error codes paramer1, valencer1, accurer, caracer1
13- removed obsolete system-specific #ifdefs (macintosh, alliant)
--=20
Karim Belabas Tel: (+33) (0)5 40 00 26 17
IMB, 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]