| Karim Belabas on Sun, 23 Dec 2007 20:59:35 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| pari-2.4.2 (UNSTABLE, ALPHA) released |
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 submit
wishlist items.
Merry Christmas !
Have fun,
Karim.
===========================================================================
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 variables
and functions; now there is nothing wrong with defining a user function
f(x,y)=x^2+y^2, then setting f = 1 (thereby deleting the function).
In fact, the distinction between variables and functions has been abolished:
anonymous functions (closures) may be defined and assigned to variables,
e.g. the old f(x,y) = x^2+y^2 is now an alias for f = (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] = 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 = sin' is
invalid ( f = x->sin(x) or f(x) = 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 <= 50 }
? select(vector(50,i,i^2+1), x->isprime(x))
%1 = [2, 5, 17, 37, 101, 197, 257, 401, 577, 677, 1297, 1601]
\\ entries < 100 in the preceding list
? select(%, x -> (x<100))
%2 = [2, 5, 17, 37]
\\ enumerates (Z/NZ)*
? invertibles(N) = select(vector(N,i,i), x->gcd(x,N) == 1)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
? apply(x->x^2, [1,2,3,4])
%1 = [1, 4, 9, 16]
? apply(x->x^2, [1,2;3,4])
%2 =
[1 4]
[9 16]
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Similarly, vecsort() was extended to allow arbitrary comparison functions:
\\ 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 = 1, 10, g())
f(i) = 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 = 1, y = 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.
* Lists now grow as needed, without imposing an awkward maximal length.
v = List() is now sufficient to initialize an empty list, instead of
v = listcreate(100) to initialize a list which wouldn't grow past 100
elements.
As well, vectors of lists are now valid objects; something like
v = [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
the characteristic is 0 or large enough (Berkowitz division-free algorithm).
* new default "factor_proven" to guarantee that all integer factorizations
outputs proven primes ( the default is to be happy with strong pseudoprimes ).
* new defaults "graphcolormap" and "graphcolors" to allow arbitrary colormaps
in hi-res plots.
===========================================================================
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 >= 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=1,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=1,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=0,0), prodinf(x=0,-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_daemon()]
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-6599321778961370851005469933592282336329728*x^18+369563540304176984501448638025309170375722401792*x^16-13214618078037183940422584396181416089308059714715648*x^14+291247424536170563676138246427605494527806096141868597248*x^12-3407227562250271661213064368167141844394234574629997803208704*x^10+8699659624155196549893192408316795253695601521375537680749690880*x^8+153390110447793800411208197070089975539253907830958400507847198638080*x^6-34704742472413552993642506624568826441560550586777137133227202205188096*x^4+43389826962123095743039577910848855441856968086933919852164410699581227008*x^2+336462877895453750216450425189196151877685043455706101021513167474262016, 1)
--> "not a prime" error (help Round4 to recover when using non-primes,
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/version
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) [#634]
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 number
[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=[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 = Mod(y, v); y = 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 increase,
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, divll
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 longjmp
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 = Mod(1, 2)*x + (Mod(1, 2)*y) \\ extra parentheses in constant term
? % + 0*z
%2 = 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)
--> 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_indexrank
much slower than they should be. Analogous problem in FqM_gauss_pivot.
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
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
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 strings:
'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 = 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 -> ellchangecurve
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=0
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 = 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 [#625]
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=x^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 + 248308835345289047*x^22 - 29271322082172250*x^21 + 1467438460133718165*x^20 - 223406933340907742*x^19 + 7435650911902583447*x^18 - 1405525828628464338*x^17 + 32139937168429173010*x^16 - 7272631544138987758*x^15 + 117563850386577478340*x^14 - 30686320483051428956*x^13 + 359649878031434743177*x^12 - 103986861631984042496*x^11 + 904392935429691313557*x^10 - 276283466933590000414*x^9 + 1822091999374665372405*x^8 - 554259164403897051340*x^7 + 2827767569115449802250*x^6 - 788757355446858093774*x^5 + 3170224521565069297504*x^4 - 708295322502763110380*x^3 + 2280480720610858280676*x^2 - 300602103002034938488*x + 788466592242441477569;
nf=nfinit([w, nfbasis(w,1)]);
modpr=nfmodprinit(nf, idealprimedec(nf,5)[1]);
L = 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 = [List()]; listput(v[1],) didn't work [#468]
39- listcreate() and listkill() are obsolete, don't use them. L = 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_shallow
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 & QUARK
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_MAX,
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 faster ]
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_CLOSURE
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 polchebyshev,
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 and
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 vecsort
14- library function remi2n, cmp_RgX, gen_cmp_RgX
15- library function RgV_dotproduct, ZV_dotproduct, RgV_dotsquare, ZV_dotsquare, 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.
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_shallow
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 plots]
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_callgen,
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 besselk
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, polylogp,
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)
--
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]