# $Id$
Bug numbers refer to the BTS at http://pari.math.u-bordeaux.fr/Bugs/

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.3.0  (released 19/05/2006):
  Fixed
    1- ispower(HUGE t_INT, n) could give wrong results (rounding errors)
    2- ellheightoo (internal) and RgXQ_norm (public) not declared
BA  3- [m68k kernel] didn't compile + need -fPIC
    4- libpari.so: soname was incorrect

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.13 (released 26/04/2006):
  Fixed
BA  1-[HPUX] 'program' bench failed for gp-sta [install did not work]
    2- made BITS_IN_LONG and related constants 'signed long' [ avoid
       problems like : exp(10^10) --> 10^10 + 1 (silent overflow) ]
    3- --kernel=none : libpari ended up not containing the 'divll' symbol
    4- polgalois(x^3-2) --> [,,,"A3"] when new_galois_format was unset.
    5- problem with negative valuations in ggcd(t_PADIC) [#411]
    6- Fp_pow for huge moduli could return a negative number [#417]
    7- y;x/y/z/x --> error [#410]
    8- polredabs(x^4-35048*x^2+1016392*x-7368842) --> same, instead of 
       x^4 - 17524*x^2 + 69403802. Rounding error, due to setting the
       relative precision wrt the wrong reference object.
    9- nfisideal() could raise an error instead of returning 0
   10- nfreducemodpr only accepted nf's (not bnf's or richer)
   11- 1/a/x --> 1/a/x; 1/(a*x) --> 1/(a*x). Now 1/(a*x) in both cases
       (unify t_RFRAC normalization routines)
   12- content(1.*a*x) --> 1 [ now returns a ]
   13- content(1./a*x) --> 1.00000/a, but content(1./a*x + 1./a) --> 1/a
       [ now returns 1/a ]
   14- t_SER ^ t_FRAC introduced floating point numbers even when
       rational expression available, e.g (8 + x)^(1/3)
   15- round(t_POL/t_SER, &e) with leading coeff rounded to zero
   16- trace(Mod(y,x)) --> SEGV
   17- gcd(1, 1/x) --> 1 [ gcd(Pol(1),1/x) correctly returns 1/x ]
       content(x/y + 1) --> 1 [ content(x/y) correctly returns 1/y ]
       content(x + 1/y) --> 1 [ also wrong in pari-2.1.7 ]
       content(1/x/y) --> 1  [ should be 1/y ]
   18- missing vectors in qfminim(x,b,,2) [ m omitted ]
   19- 'make test-kernel' [ wouldn't compile ]
   20- matsnf(matrix with t_POL entries, 1) ---> incorrect matrix V
   21- O((-2)^3) --> invalid object
   22- (0.*x)*(0.*x) --> 0.E-57 [ instead of 0.E-57*x^2 ]
   23- qfminim(x,,m,2) [b omitted] -> [n,B,v]: output correct vectors (v),
       but reported too many (n too large). 
   24- qfminim(x,,,2) wrong when x has huge entries. Work out a sensible
       default precision if x has exact entries.
BA 25- HPPA 32bit level0 inline assembly addmul constraint was too weak.
   26- factorback(x,y) --> error if x,y were valid t_VEC with exactly 6
       components [ typo in checknf_i ]
   27- [configure] shared libraries on 64bit sparc require -fPIC / -KPIC
   28- (x^3/y^3)^(1/3) -> x + O(x^17)  [ leading coeff sometimes lost #433 ]
   29- ??INT worked, but not ??t_INT
   30- inconsistencies wrt variables in t_POLMOD, e.g
       Mod(x*a,x^2)' ---> Mod(x, x^2)
       deriv(Mod(x*a,x^2)) ---> 0
   31- contfrac(sqrt(19),2^31-1) --> overflow [ signed overflow can't
       be reliably tested, use unsigned computations ]
BA 32- on x86_64 + gcc-4.0, CFLAGS was missing a -fno-gcse-after-reload
   33- [output=3] give more time to external prettyprinter [#209]
   34- rare SEGV in factor(t_INT) with low stack space [ #345 ]
   35- ispower(1) --> error, ispower(-8) --> error [ allow negative numbers ]
   36- Configure -a + kernel = $arch-gmp didn't work [missing -lgmp #438]
   37- divisors([]) --> SEGV [#441]
   38- missing GC in bernfrac
   39- bnrrootnumber(bnrinit(bnfinit(x),1),[]) --> SEGV [#443]
   40- f()= local(m = matrix(2,2)); m[1,1] = 1  f() --> m[1,2] also set to 1
   41- make test-kernel would always fail with gmp kernel.
   42- elllseries(e, 0.) --> error [ only elllseries(e,0) worked ] [#445]
   43- 'ftime' was never detected by Configure
   44- setrand(74);quadclassunit(-83138791008,,[0.2,6]) --> oo loop
       [ large prime relation hashtable corrupted when changing subfactorbase ]
   45- a(k)=if(k==0,0,a(k)=a(k-1))
       a(1) --> SEGV [#447] (add refcounts to 'user function' structs)
   46- getheap() did not report properly the "size" of user functions
       (value too small)
   47- add compatibility macro decomp -> Z_factor [ used by mwrank ]
BA 48- minpoly(,,v) might return polynomials in x instead of v.
   49- make test-kernel required inlining compiler
   50- make test-kernel didn't work with C++ compilers
   51- ia64 kernel assumed 64bit longs, whereas compilers can be
       configured for 32bit

  Changed
    1- RgX_simple_gcd: make sure result has non-zero leading term [#412]
    2- simplify(t_RFRAC): remove assumption that deg(denom) > 0 [#413]
    3- split bfffo.h from level0.h
    4- semantic of t_SER with inexact coefficients is now the same as
       for t_POL: the sign is 0 iff all coefficients are zero. Either
       there are no coefficients, or the leading coefficient is an
       inexact zero.
    5- removed all non-inline assembler kernels : they were complicated to
       Configure, mostly untested, and inefficient ( function call overhead + 
       must use global variable hiremainder/overlow when operating on limbs
       instead of LOCAL_HIREMAINDER trick ). If this slows down your
       application (it should not), install gcc or use the gmp kernel.
    6- allow arbitrary n in divisors(n) and fordiv(n,), provided factor(n)
       succeeds [ was restricted to t_INT or their factorization matrix ]
    7- made LLL the default algorithm in algdep / lindep again [ replaces PSLQ ]
       Our PSLQ implementation is slow and unstable, and LLL performs much
       better, see the example in ??algdep.
    8- addrr: extend accuracy much less frequently
    9- make sure all kernel symbols are present in all versions of libpari
       (addll & friends could be inline)
   10- change the meaning of gcd(x) and lcm(x) when x has vector/matrix
       components (a global recursive gcd/lcm is taken, instead of a
       cartesian product of individual gcd/lcm)
   11- disallow vecmin([]), vecmax([]) [ returning stoi(+/- BIGINT) is not
       helpful ]
   12- [libpari] renamed lellseries -> elllseries [ as in GP ]
   13- semantics of stackdummy() [ make it consistent with gerepile ]
   14- never assume that part of an object is "permanent" when it is out
       of the stack (was used by INTMOD/POLMOD/PADIC). Always copy it.
       As a result, 'gmodulo' and 'forcecopy' become obsolete.
   15- use quadclassunit in qfbhclassno for large D, thereby ASSUMING GRH.
   16- ellan was bypassing the check for CM
   17- uniformize the generation of parilvl0.h [ genkernel ]

  Added
    1- [library] new function isinexact.
BA  2- [elldata] function forell() to loop over elliptic curves.
BA  3- [elldata] function ellconvertname() to parse curve name.
    4- [library] new function RgX_shift, RgX_mulXn, RgX_shift_shallow, 
       RgX_Rg_div
BA  5- m68k level0 inline assembly kernel
    6- [library] new function isint, issmall, mkrfrac
    7- Configure --time=timing_fun
    8- [Configure] genkernel script

  Removed
    1- kernel functions shiftl / shiftlr (inefficient, unused, untested)
       [ backward compatibility version in src/kernel/level1.h ]
    2- obsolete functions forcecopy (use gcopy) and gmodulcp (use gmodulo).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.12 (released 24/01/2006):
  Fixed
    1- incorrect detection of EditLine library
    2- issquare(Mod(2,9)) --> 1  [ should be 0 ]. Implicitly assumed
       v_p(N) odd for all primes divising the modulus N.
BA  3- poltschirnhaus(ffinit(2,4)) could return 0.
BA  4- Configure -a did not propose fltk and Qt as graphic engine.
    5- g()=local(x;f) -- oo-loop [#352]
    6- charpoly( Mod(a, b) ) --> wrong result when 'a' is not a
       t_POL or t_INT.
    7- \p2051 log(exp(-1)) --> printing bug [#357]
    8- bad argument checks in qfrep() / qfminim() [#359]
    9- fix mkintn to work as documented (even when leading word is 0) 
BA 10- [Linux] gp only accepts one SIGINT in batch mode [#251, #370]
       (initial patch JD).
   11- contfrac(5/3.) was wrong: [1,2] instead of [1,1,2]. For a t_REAL x,
       when the last partial quotients of a lower and upper bound differ 
       by 1, choose the one associated to the digits of x (followed by 
       infinitely many 0s) unless it was too small and the next partial
       quotient was 1. [#371]
   12- bnfisintnorm: results could have a wrong sign [#372]
   13- isprime(N,2): oo loop if N is a perfect square
   14- \p n was limited to a value ~ 10 times smaller than the actual limit
BA 15- qfbsolve fix 2.2.11-F86 was not sufficient.
   16- (1 + O(2))^2 was less precise than sqr(1+O(2))
   17- in the extended help pager, typing ' ' then \n would skip
       one page [#375]
BA 18- config/has_stat.c didn't work with g++
   19- charpoly/minpol(Mod(a,T)) was only monic if T was.
BA 20- 'make install' did not work if 'prefix' contained spaces
   21- has_dlopen always compiled in on Mac OS X, even if present in libc
   22- unsafe handling of t_QFI/t_QFR (setsigne) [#384]
   23- idealaddtoone didn't handle zero ideals [#386]
   24- workaround a bug in g++ version 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)
       infinite loop on factor(41093858855767145965571)
   25- constlog2() was not restartable [ no way to set glog2 = NULL ]
   26- sloppy arg check in ellchangecurve [#388]
   27- [internal] gprec_w reduced the accuracy of real 0s [#396]
   28- wrong arg check in matsolve [#400]
   29- minpoly([;]) --> SEGV
   30- y*x^3/( 1+x+x^2 +O(y)) -> gerepile error [#403]
   31- poldivrem didn't handle properly multivariate polynomials [#402]
   32- insufficient accuracy in ellheight --> singular curve, SEGV [#404]
   33- [MacOS X + fltk] installed gp binary couldn't use hi-res graphics
       (resource fork not copied)
IZ 34- [2.2.9-A20] -fno-strict-aliasing not supported in older gcc
   35- heapsize reported by getheap() were wrong (overestimate).
   36- gerepile error in nfgaloisapply [#408]
   37- wrong results in bessel functions at non-integer indices
       (typo in isint(t_REAL) ) [#409] 
   38- vector(3,n,n*=10) -> [10, 100, 1000] ( now [10, 20, 30] )
   39- bnf.codiff didn't work
   40- content([[2]]) --> error

  Changed
    1- speed up prime() by using checkpoints.
    2- allow lists with vector entries in listsort (use lexsort)
    3- allow vector of points in ellisoncurve()
    4- tunings in quadclassunit (#298 / #355)
    5- [Configure:] take CPPFLAGS into account
    6- 'int' C type is now reserved for -1/0/1 values. Use 'long' otherwise.
    7- Fl_inv and Fl_div now raise an error when divisor not invertible
       [ used to return 0 ]
    8- removed the threshold that prevented exponent overflow in
       exp(-10^10) and returnd 0. instead [ either return correct digits
       or raise an exception ].
VL  9- honor C_INCLUDE_PATH in Configure (for get_readline)
   10- [readline] remove old hack bypassing a bug in readline-2.0 [ did not
       release SIGINT ]: useless nowadays, and used deprecated functions.
   11- export combine_factors [ needed by giac ]
   12- do not alias labs to abs in paricom.h
   13- randomize polredabs() to improve bound on difficult fields, e.g.
       f(k) = {
         p = polcompositum(x^6-3*k^3,x^6-3*k^3)[4];
         polredabs(poltschirnhaus(poltschirnhaus(p)),16)
       }
       for k = 2, 5, 6, 8, ...
   14- try more names in 'pari_unique_filename' (26^2 instead of 26))
   15- remove GCC_INLINE from CFLAGS. Define DISABLE_INLINE or
       DISABLE_VOLATILE to prevent the compiler from inlining or using    
       the 'volatile' keyword
   16- let paripriv.h include parinf.h
   17- rename 'prec' -> 'precreal' [ from paripriv.h ]
BA 18- define INLINE to 'inline static' for C++ compilers also
   19- rename polx -> pol_x, polun -> pol_1
   20- make hell, hell2 static to elliptic.c
   21- rename decomp -> Z_factor, decomp_limit -> Z_factor_limit
   22- rename wf -> weberf, wf1 -> weberf1, wf2 -> weberf2
   23- make incpos / incneg static
   24- export setseriesprecision, setrealprecision
BA 25- make pari restartable
   26- [initialization of GP hashtables] remove the 'module' structure,
       simplify pari_addfunctions, plug helpmessages in initializing
       entree arrays.
   27- rename err -> pari_err, pariputsf -> pariprintf
   28- rename rnfhermitebasis -> rnfhnfbasis
   29- forbid t_STR, t_VECSMALL and t_LIST in gvar.
   30- cleanup mpqs use of temporary files
   31- pari_unique_filename now MT-safe, returns a malloc'ed buffer.
   32- default() now always returns the value of the (possibly changed) default.
       No need for a flag anymore. The construction default(def,,1) is still
       valid but deprecated (the flag is ignored).
   33- increase default accuracy in ellinit() when curve has large coefficients
       [ avoid large relative error on periods, #404 ]
   34- qfminim(,,,0) often gives wrong results for matrices with large
       entries. Test whether rounding errors occur and abort if so [#407]
   35- qfminim(x,b,m,flag): b and m are now optional. Allow omitting b
       (formerly b=0) if flag = 2 also.
   36- eval("1a") is now '1' again (was "a" since 2.2.10)

  Removed
BA  1- gnuplot graphic engine (complicated, did not work from gnuplot-4 on)
    2- has_sigrelse.c & has_sigsetmask.c [ deprecated, unused after C-10 ]
    3- src/desc/Makefile
    4- log2old ( = 2atanh(1/3) )
    5- src/desc/gen_help
BA  6- obsolete macros INIT_JMP/INIT_SIG

  Added
    1- library function ellisoncurve()
BA  2- library functions related to sorting: gen_sort_aux, gen_search_aux,
       vecsmall_indexsort
    3- functions strtoi, strtor
BA  4- function minpoly()
    5- function zeromatcopy()
BA  6- support for GNU/kFreeBSD and other GNU userlands.
    7- document ZY_ZXY_rnfequation and ZY_ZXY_resultant
    8- function pari_warn() use instead of pari_err() for warnings
    9- function pari_add_function, pari_add_module
   10- doc/develop.tex
   11- library function uisprime, uissquarerem, Z_issquare, Z_issquarerem
   12- library function pari_unique_dir
   13- library function gp_default
   14- library function rowcopy (GP2C)
   15- library function traverseheap

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.11 (released 19/10/2005):
  Fixed
    1- a()=b(1,) --> error message
    2- agm(-1.0000000004656,1) --> oo loop [Bug #214]
    3- sdivss_rem(x,y,&rem) did not set rem, contrary to the documentation
BA  4- ellzeta(ellinit([0,0,0,0,1]),1) --> gerepile error
    5- random() was less random on 64 bit machines
    6- typing 0.e-28 returned 0.E-38 (!)
    7- ellminimalmodel(e).a2 was not always in {-1,0,1}
    8- check arguments in elllocalred
BA  9- [GP2C] type-checking codes generated for some types was wrong.
   10- stray output: (a()= for(i=1,1, return);) a() --> 0
   11- qfminim & qfrep didn't check their arguments
   12- [library:] pariputsf() and GP print() used different output formats
   13- nfdisc(x^4 - 2947*x^2 + 1553545) --> SEGV  [ incorrect test for gcd
       in Round 4: gcmp1(d) --> degpol(d) == 0 ]
   14- forvec(v=vector(4,k,[1,4]),,2) -> oo loop [bad initialization]
   15- eta(x << 1) used far too much accuracy in intermediate computations
GN 16- MPQS warning "factoring this number will take several/many hours" now
       assume more current hardware.
   17- off-by-1 error in initprimes0 allocation [Bug #237]
       -> SEGV in default(primelimit,155100 + 41*7) 
   18-[Cygwin] incorrect links created by 'make install'
   19- a( <Return> --> oo loop in parser [Bug #240]
   20- at \p366, the last digits of Pi were wrong [ not enough iterations, from
       2.2.9, A-2]. [Bug #238]
GTo21- wrong prototype for qfrep
   22- factornf(P, T) did not accept non-monic T [Bug #241]
   23- lngamma(1E+10) --> "Impossible assignment I --> S"
   24- "couldn't deal with this field" errors in bnfinit/quadclassunit for
       tiny discriminants, huge Bach constants (e.g. 12), and unlucky random
       seeds. Remove arbitrary limits and let the loop run to completion.
   25- neither freadseq() nor readGEN() were able to parse '{' / '}' [Bug #216]
   26- accuracy problem in polroots (--> division by zero) [Bug #252]
   27- acos(x < 0) --> result off by Pi [ introduced in 2.2.9-A3 ]
   28- ellrootno(e,p) incorrect in the case of good reduction [#262]
   29- (rare) "impossible assignment I-->I" in contfrac
   30- typo in qfbclassno's hash function (when D < 0, function can't handle 0).
       qfbclassno(-948) --> division by 0 [GMP kernel]
   31- [Makefiles:] the behaviour of '//' as path leader is undefined. Make
       sure path prefixes are not '/' [ e.g $prefix/lib --> //lib ]
   32- pollead(u*v + (v+1)/v, v) --> 'x' [ should raise an error ]
GN 33- problems in MPQS : some factors missed e.g factor(2^263-9) -->
       expensive extra runs ( + possible stack corruptions when many factors
       found simultaneously ).
   34- tanh(x) was actually computing tanh(|x|) for real x ([#269] from 2.2.8)
   35- [MacOS X] dlopen is now part of the system library. Don't redefine
       dlopen in darwin.c if HAS_DLOPEN is defined.
   36- fix Trager's trick in factorff (from 2.2.10)
   37- rnfisnorminit(quadpoly(145,y),quadray(145,1)) --> stack overflow [#273]
   38- matker([1,2,3;4,5,6]*1.) --> [;]  (missing 1 vector)
   39- rnfconductor(bnfinit(y),x,1) --> error [#277]
   40- gcc-4.0 miscompiles PARI on ix86 [#274]
       ( http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23453 )
   41- truncate(1/4/x+1+O(x)) -> (x + 1/4)/x instead of (4*x + 1)/(4*x) [#276]
   42- bitneg(2^32-1,32) -> corrupt integer [#279]
   43- typo in rnf_is_abelian [#277]
GN 44- several minor fixes in mpqs.c
BA 45- ellrootno(e,2) was wrong for curves of Kodaira type 3 and -7. 
                                                           ([#212] from 2.2.9)
BA 46- galoisfixedfield() was not robust enough ([#256, #228 from 2.2.9)
   47- tanh(-10^20) --> error instead of -1  [tanh(10^20) was treated properly]
BA 48- wrong rounding in wr_float: with default(format,"f0.10")
        1.23456789049999999997 -> 1.234567891
GH 49- typo in thue.c:MiddleSols() --> missing solutions [#264]
   50- default(prettyprinter,,1) --> t_POL instead of t_STR [#296]
BA 51- truncate(1/x+O(x)) --> SEGV
   52- overflow in Flm_gauss (when solving triangular system) --> wrong result
       [#284]
   53- isprime(25, 2)
         *** impossible inverse modulo: Mod(5, 25).
       although it's useful to get a factor, it's not nice to raise an error,
       since 'trap' then becomes mandatory. Removed this feature: the factor
       is silently discarded (exceedingly rare anyway).
   54- (-1)^(any integer >= 2^31) --> -1 [ from 2.2.9 ]
GH 55- zncoppersmith(x,1002,1001) --> SEGV [#221]
   56- subst(1+O(x),x,x^2+O(x^3)) --> SEGV [#287] (patch by MSo)
       subst(1+O(x^2),x, x^2+O(x^3)) --> 1 + O(x^3)  [ should be O(x^4) ]
   57- component() didn't work on lists [ SEGV ]
   58- quadclassunit(D,, [c0 > 6]) --> weird error message
   59- weird errors in bnrstark [#285]
   60- (x^0)^2^31 --> length overflow
   61- polroots(pollegendre(51),1) --> SEGV [#293]
   62- print({}) --> oo loop
BA 63- when choosing between (p-1) and APRCL, isprime() required a complete
       factorization of p-1, whereas accumuluting factors up to sqrt(p-1) was
       enough. (e.g 2^127 - 1)
BA 64- function name not always properly reported on interrupt (e.g if, while)
   65- content([-1]) --> -1 
   66- memory leaks in quadclassunit (#318)
BA 67- [Configure] check that 'readline' is not an EditLine wrapper
       [ ==> compilation failure otherwise ]
   68- Str() --> junk string (uninitialized data) (#326)
   69- arg(I*O(7^5)+1) --> junk, exp(3*I + O(3^5)) --> junk. (#328)
   70- powiu(2, ulong n) called int2n(long n), incorrect for huge n (#331)
   71- Qfb(8,-4,1)*Qfb(5,-4,1) --> Floating Point Exception (BIB, #332)
   72- t_QRF distance component was evaluated using an unstable algorithm,
       possibly leading to catastrophic cancellation (#333)
   73- dbltor did not recognize Infinity, NaN, or unnormalized numbers.
   74- makerfrac(1,quadgen(24)*x^0)%b --> SEGV, where
       GEN makerfrac(GEN p,GEN q) {
          GEN z=cgetg(3,t_RFRAC);
          z[1]=lcopy(p);
          z[2]=lcopy(q); return z;
        }
BA 75- exp(x) gave imprecise results at huge accuracies for expo(x) >> 1.
   76- valuation(x,p) using a divide & conquer algorithm would kill the
       session if p = 1
   77- (2 + O(2^8))^(-1/3) --> SEGV [#341]
   78- exp(0.E100) --> invalid GEN
   79- stack corruption in gsubst [#343]
   80- Pol([Mat(0.1)],x)^3. --> crash [#346]
   81- besseljh(0,2^65) --> crash [#340]
BA 82- [plotQt:] ^C while hi-res window is present would crash the session
   83- Strtex(Vecsmall) --> SEGV [#348]
   84- oo loop in zeta() [catastrophic cancellation in get_xinf() ]
   85- oo loop in nfdisc() [#350]
   86- Mod(1,2)*x / (1/2) --> incorrect t_POL
   87- qfbsolve forgot some solutions: qfbsolve(Qfb(2,1,3),3) --> 0
   88- multiplying ideals could lead to factoring big integers (failsafe
       algorithm in idealtwoelt, when random trials don't work): fix
       idealtwoelt.

  Changed
BA  1- FpM_FpV_mul is renamed to FpM_FpC_mul, Flm_Flv_mul to Flm_Flc_mul and
       FlxV_to_ZXC to FlxC_to_ZXC, Flv_to_ZC to Flc_to_ZC, FqV_to_FlxC to
       FqC_to_FlxC, zv_to_ZC to zc_to_ZC
BA  2- FpXV_FpV_innerprod renamed to FpXV_FpC_mul and FlxV_Flv_innerprod to
       FlxV_Flc_mul
    3- retain 'CHANGES' revision after 'make distrib'
GN  4- extensive re-tuning in MPQS (all sizes) and avoid "sizing marginal,
       index1 too large" warning
    5- rename globalreduction -> ellglobalred, localreduction -> elllocalred
    6- taniyama(e) is deprecated. Use elltaniyama(e, prec) instead of
       old = precdl; precdl = prec; x = taniyama(e); precdl = old;
    7- [bnfinit] retune compute_R to try and detect cheating with Bach's
       constant.
    8- rename lisexpr -> readexp, lisseq -> readseq, flisexpr -> freadexpr,
       flisseq -> freadseq
    9- rename Fp_gener -> gener_Fp, Fl_gener -> gener_Fl
   10- change TeX output so that it's easier to handle:
       - replace \over by \frac [ most people use AMS styles which forbids
         \over, not plain TeX, which doesn't have \frac ]
       - remove many extra braces { }  [ would prevent line breaks ]
       - insert carriage returns
   11- [GP handling of print1()] get rid of 'added_newline' hack, replace by
       monitoring in pariputc/pariputs.[#243]
   12- do not install libpari.a.xxx [ include files are not versionned either
       and libpari.a is useless without the correct ones, contrary to .so ]
   13- rename gtrans_i -> shallowtrans, concatsp -> shallowconcat.
   14- add GC in parsing loop for huge input vectors [ needs roughly 2 or 3
       times less memory ]
   15- implement pari_is_dir() using stat() instead of opendir()
   16- moved defaults from gp/gp.c to language/default.c [ -> into libpari ]
   17- moved input_loop to language/es.c [-> into libpari ]
   18- when called as 'gp --test', disregard actual terminal dimensions
   19- allow ellinit over any ring (support only basic operations)
   20- allow ellchangecurve on e = [a1,a2,a3,a4,a6].
   21- typecast cleanup: move most of paricast.h to pariold.h
   22- rename readGEN -> gp_read_stream, freadseq -> gp_read_str.
       freadexpr/readexpr are deprecated, use gp_read_str/readseq
   23- make sure GP_DATA is always defined --> default() becomes available
       in libpari
   24- make gnil public
   25- change content() so that it always returns the gcd of all entries (as
       documented). Used to return the gcd of all _contents_ of the entries
       of a t_VEC/t_COL/t_MAT.
   26- backport into quadclassunit some of the bnfinit improvements
       [specifically, change subfactorbase, #298]
BA 27- rewrite rectdraw in an object-oriented way [ reduce code duplication
       in hi-res plot routines ]
BA 28- change the semantic of includedir to not include the pari suffix.
       Instead /pari is automatically added by make install.
   29- improve plindep (use lllintpartial and floating point LLL)
      + allow lindep with p-adic entries
BA 30- allow relative paths in Configure --with-xxx directives
BA 31- allow sinh, cosh, tanh with t_PADIC arguments
XR 32- bnrstark(): try harder to find solutions [increase precision faster #255]
BA 33- rename coefs_to_xxx() to mkxxxn() for xxx in {vec,col,pol,int}.
   34- semantics of gcd with inexact zeros: now gcd(0., a) is 1 [used to be a
       and led to problems: e.g 0./(1.*a)/(1.*a) not simplified ]
   35- warn if 'perl' is found but doesn't seem to work
   36- forbid the f'(x) construction when x is not a constant type [#327]

  Added
BA  1- polgalois(): 4th component: transitive group name following GAP4
BA  2- new functions ZX_add, ZX_sub, ZX_neg, ZX_Z_add, ZX_Z_mul
BA  3- new functions FpC_to_mod, FqV_to_FlxV, FpC_red
    4- member functions r1, r2
    5- functions factoru(), factoru_pow(), powiu(), powuu().
    6- symbolic link $MANDIR/gp-$version.1 -> $MANDIR/gp.1
    7- new functions shallowcopy, shallowconcat, shallowtrans, vecslice,
       vecpermute, vecslicepermute, rowslice, rowpermute, rowslicepermute
BA  8- support for gp2c-run on cygwin
BA  9- new optional package 'elldata' and new GP functions ellsearch and
       ellidentify to access it.
BA 10- support for ellinit("<curve name>") through elldata.
   11- new functions vec_ei / col_ei
BA 12- new function  FpC_Fp_mul, FpV_FpC_mul
BA 13- new functions const_col, const_vec, vec_is1to1, vec_isconst
   14- new function gp_read_file
BA 15- new function substvec
BA 16- new divide_conquer_assoc (make divide_conquer_prod thread-safe)
   17- p-adic zeta, cos, sin, tan, cotan
BA 18- p-adic gamma
BA 19- new routine readvec()

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.10 (released 17/04/2005):
  Fixed
BA  1- gp2c description of == operator was broken.
    2- asin(I) --> SEGV, acos(1 + 0. * I) --> SEGV, atan(I/2) --> SEGV
       sqrt(0*I),acosh(1+0*I) --> oo loop
    3- make test-kernel didn't work [missing gen_m1 & int2n]
    4- thetanullk(1/2,1) --> SEGV [from 2.2.9]
    5- unit component in factor(t_INT + 0*I) was wrong
    6- no typecheck for qfbhclassno input
    7- diviuexact destroyed input and made further assumptions [=> wrong results
       in ellglobalred]. Replaced it by a clean wrapper.
GH  8- thue(thueinit(x^3 - 2), 2) --> SEGV
    9- reorder([1]) --> SEGV (bad input, but sanity check was wrong)
   10- rnfconductor(,1) [ = rnf_is_abelian() ] didn't accept polynomials with
       POLMOD coeffs + used a wrong algorithm [ not modular + wrong result ]
   11- broken code in hnfmodid() wrt GC (would add one 0 column, Bug #129)
   12- sqrti(gen_0) --> SEGV [native kernel]
BA 13- polrootsmod(,,1) could return a line vector instead of a column.
   14- issquare(Pol(1)) --> SEGV
BA 15- polsubcyclo() used too much memory for large conductors.
   16- typo in quadtoc() --> quadgen(odd t_INT)*1. was wrong
   17- subgrouplist([], [2]) --> [[;]]  (instead of [])
   18- typo in FqX_split [  (!degpol(x))  --> degpol(x) <= 0 ] -> very rare SEGV
   19- after alias(a, b); kill(b), invoking 'a' would access corrupted data
   20- round(-0.5) --> -1 [ should be 0, as was output by round(-0.5, &e) ]
RS 21- gcc-3.4 breaks on compatibility code to support old readline versions
       [ pre-4.2 ]. Typecast parameters, not functions and dump
       (approximate) support for g++ + old readlines in gp_rl.c
   22- \p 8000
       E=ellinit([0,0,0,0,1296]); P=[-8,28]; ellpointtoz(E,P) --> oo loop
   23- idealaddtoone(nfinit(y),[0]) --> SEGV [ BIB ]
   24- aprcl would wrongly report composites [ introduced aprcl.c:1.48,
       before release-2-2-8 ]
   25- ellchangecurve(e over Qp) --> e.w not updated
   26- ellheight(e over Fp, pt) -->  SEGV
   27- issquare(Mat(2), &z); z --> SEGV  [ don't allow matrices as input ]
       issquare(1/x^2) --> SEGV [ typo in polcarrecomplet ]
   28- rnfkummer(over Q) --> type error.
   29- allow qfbprimeform(d > 0, p < 0)
   30- Since exp(-1e100) --> 0. [ tolerable: alternative being underflow
       error ], we shouldn't have exp(-1e100) --> truncation error. Fixed.
   31- rnfkummer(bnrinit(bnfinit(y),nextprime(10^20),1),Mat(3)) --> module
       too large in Fp_shanks [ conductor() was computing unnecessarily
       tough discrete logs ]
   32- [Configure:] add /lib64 and /usr/lib64 to library search path
   33- SEGV in nfeltpowmodpr() for primes of degree 1 [see 2.2.7-F21]
       + inputs containing t_INTMODs yield unpredictable [wrong] results
   34- znlog(x,g): first check whether x == g [ quite frequent ]
   35- rnfisnorminit(nfinit(y^2+y+1), x^3-y,2) --> "incompatible variables"
   36- nffactormod() returned a factorization which was not a proper t_MAT
   37- rnfequation(y^2+1, x + Mod(z*y - 1, y^2+1)) --> SEGV [ BIB ]
   38- many problems in matfrobenius for _inexact_ matrices
LGr39- very rare SEGV in idealprimedec() [ typo in init_norm(), using FpX_red
       on a t_INT, which is no longer valid ]
   40- [library:] precision() output "wrong" value for small non-zero t_REAL
       (depended on exponent, not the bit accuracy of the input). Change so
       that true bit accuracy is used unless input is 0 (then use exponent).
   41- rare memory corruption in thue() [ SmallSols ]
   42- gamma(z) for tiny z suffered from catastrophic cancellation
   43- ??? sometimes output extra entries [ e.g. ???eigen output matfrobenius ]
   44- bezout(0., 0.) --> division by 0
   45- issquare(5, &n) --> SEGV
   46- factor(x in Q[i] \ Z[i]) --> rubbish [ typo in factor_gauss() ]
   47- ellrootno & elllseries didn't check their arguments
   48- rnfisnorminit(non-monic polynomial) --> SEGV
   49- prevent Ser & Pol from creating invalid objects (e.g Pol(x+y, y) -> y+y)
   50- TODO item:  polrootspadic(x^2+8*x+4, 2, 2) --> 2 + O(2^2), whereas
   there's no padic root. The documentation is not clear enough: should
   polrootspadic(x,p,r) find roots in Z/p^r [current behaviour], or use the
   precision of the supplied polynomial to compute roots in Qp, then return
   them at precision p^r [ better, polroots() and factorpadic() behave this
   way ] ?
   51- padicappr(f, t_POLMOD) didn't work
   52- rnfidealnormabs(rnfinit(nfinit(y),x^2+1),1) --> SEGV
   53- no argument check in primepi()
   54- ellminimalmodel(ellinit([1,2,3,4,5])) --> gerepile error
   55- gcd([]) was 1 [ should be 0 ] + gcd([...]) used an inefficient algorithm
   56- [readline] completion in extended help context ?? didn't include GP
       defaults
   57- [from 2.2.9] nfsubfields(x) had become unable to exploit
       the trivial case when x is irreducible modulo some prime
   58- [from 2.2.9] typo in krosi -> wrong result [ affected aprcl only ]
   59- dirdiv([],[]) -> SEGV
   60- using allocatemem() in files input with read() could corrupt stack
       allocatemem() does not end by a longjmp anymore; it is still impossible
       to use it in loops
   61- typo in matrixqz: matrixqz(Mat([1,1]~)/2,0) --> "not a rational matrix"
   62- [cf 2.2.7-F23-] use safer parameters in bernfrac(): bernfrac(166)
       was wrong.
   63- [Bug #201] gp --test: line split mode initialized too late
       print(vector(1000)) would bypass it.
   64- [Bug #200] gmul2n(t_POL, n) would not normalize the resulting polynomial
       [ needed in characteristic 2 for instance ].
   65- FpX_center and centermod didn't use the same normalizations. Fix
       FpX_center
   66- factormod(T,p,1): output was not sorted
BA 67- [from 2.2.9] -fPIC missing for gp2c-run on platforms that require it.
   68- if(1,print,print(no)) --> no was printed [a function expecting any
       number of string objects, called without parentheses (no args), would
       read the following arguments as its own ]
   69- more stringent tests in ideal* functions: don't accept t_COL with
       incorrect length as ideals ([]~ produced SEGV in many cases)
   70- factorback([1,1; 0,1],nfinit(x^3+2)) --> SEGV
   71- [Bug #156] kbessel was unstably evaluated
       ? besselk(1,120)
       %1 = 448600744132608.0000000000000
   72- hyperu and kbessel(,1) inaccurate. E.g: hyperu(1,1,1) at \p28 -> last
       3 digits wrong

  Added
    1- routines equalsi/equalis, equaliu/equalui, cmpui/cmpiu
    2- exported FFTinit() / FFT() wrappers to rootpol.c:fft() [not under GP yet]
    3- routines Rg_to_Fl, Rg_to_Fp, RgX_to_FpX, RgX_to_FpXQX, RgX_to_FqX,
       RgV_to_FpV, RgXQ_mul, RgXQ_sqr, RgX_div_by_X_x, FpX_div_by_X_x,
       RgXV_unscale
    4- file Qfb.c [ stuff related to binary quad. forms moved out of arith1.c ]
    5- routines truedivii, truedvmdis, truedivis
BA  6- [GMP] faster divri routine.
BA  7- support for real forms for qfbsolve.
    8- routines RgX_gcd_simple, RgX_extgcd_simple [ when no coeff explosion
       in base field ]
BA  9- new algorithm for exp(t_REAL) [ Newton ]
   10- new macro ndec2prec()
   11- use Trager's trick in factorff()
   12- member function .bid (from a bnr). Extend mod, clgp, no, cyc, gen to
       bid and bnr structure.
   13- new keywords for ?? : bid, CFT, ideal, idele, modulus, rnf.
   14- new construction %#: number of history entries so far
PC 15- an optional 2nd argument to znorder() to limit the search space

  Changed
    1- renamed gegal --> gequal, gegalgs --> gequalgs, gegalsg --> gequalsg,
       egalii --> equalii
    2- improve trial division in all basic arithmetic functions [ e.g try
       for(i=1,10^5, factor(1009)), or moebius, or ... ]. Old logic was
       broken for small inputs (tried far too many primes)
    3- improve quadclassunit(D >> 1), about 10 times faster in the 40
       digits range [forbid long reduction cycles (too costly to update arch.
       info when a relation is found + streamline factorquad() ]. See
       Z_lvalrem_stop() + remove extra_relations() and use large prime
       variation all the way [almost all relations are found this way]
    4- streamline/clean-up polroots [ complete rewrite, much faster for
       small degrees ].
    5- improved zetakinit() [save some multiplications, about half of them
       for quadratic fields. Less so as the degree increases. ]
    6- renamed RgX_RgX_compo -> RgX_RgXQ_compo
    7- renamed binome -> binomial, chinois -> chinese [ added chinese1(x)
       for chinese(x, NULL) ]
    8- add GC in integer valuation functions + use recursive algorithm when
       valuation looks large
    9- no longer raise an exception when online help used on unknown id or
       obsolete function [report 'unknown identifier' or 'obsolete function']
   10- removed buggy support for narrow class group in quadclassunit
       + rewrite binary quadratic forms [ qfr3 / qfr5 ]. TODO: move from
       arith1.c to qfb.c
   11- reinstate cornacchia + cornacchia2 with a different interface [ use
       cornacchia in qfbsolve ]
   12- allow non-real arguments in incgamc, incgam
MW 13- ellap: if E has CM by a principal order, use Cornacchia instead
       of Shanks/Mestre
   14- more efficient algorithm for issquare(t_FRAC | t_RFRAC)
   15- don't return t_INTMODs component in *modpr routines, but lifted
       representatives.
   16- FpX_roots, FpX_factor: normalize input first + direct support for
       quadratic and linear polynomials [ no need to compute X^p !]
   17- FpXQ_powers and similar routines: use multiplications when input has
       small degree, squarings otherwise.
   18- matsnf over polynomial rings: make sure elementary divisors are monic
   19- ellpointtoz() now returns z such that 0 <= Im(z) < Im(w2),
       0 <= Re(z) < Re(w1).
   20- bnfinit(non-monic t_POL) --> now discard variable change
   21- rename apprgen9 -> padicappr, factmod9 -> factorff
   22- rewrite padicappr()
   23- [COMPAT] bnrdisclist has lost its 4th argument 'flag', and omitting the
       archimedean component now means that all 2^r1 possible values are
       substituted (formerly: indicate no ramification at infinity).
       The prototype of bnrdisclist0 has likewise changed.
   24- renamed isprincipalrayall -> bnrisprincipal, rayclassno -> bnrclassno
       rayclassnolist -> bnrclassnolist
   25- Change the output of ideallist with technical (flag 2,3) [ with units ]:
       instead of two vectors, output a vector of 2-component vectors.
       Change the input of all list routines (bnrclassnolist, bnrdisclist)
       accordingly.
   26- %0 (undocumented) is no longer accepted as an alias for %
   27- renamed realzero -> real_0, realun -> real_1, realmun -> real_m1.
GN 28- MPQS rewrite [cleaner, faster]

  Removed
    1- obsolete implementation incgam1 [ use incgam. As far as private
       functions go, incgam2 is better ]
    2- removed ideallistarch0, ideallistarchgen, ideallistunitarch,
       ideallistunitarchgen. Just use ideallistarch.
    3- obsolete default 'buffersize'. Flag -b is a no-op.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.9 (released 23/12/2004):
  Fixed
    1- ploth(,256). splines had stopped working
    2- gamma(-1.), psi(-1.) [ non-positive integers masquerading as t_REALs ]:
       wrong results (oo) or 'division by 0' error messages
    3- log(1. + 1e-20) --> print more decimals than are significant
    4- [Mac OS X + Fltk]: remove the BROKEN_FORK assertion --> graphic
       window becomes independant of gp as under other OSes.
    5- elllseries did not accept complex arguments
GN  6- [ix86 + Sun cc] build fails [ unsatisfied symbol reference to 'mulll' ]
    7- [libpari] gprec_w didn't behave well for real zero
    8- gp -p 51234567890 --> internal overflow and primelimit set to smaller
       integer
    9- [ GMP kernel ] incorrect resmod2n --> wrong 2-adic sqrt
   10- [hi-res plot: fltk] fix compilation with g++-3.4
BA 11- [hi-res plot: fltk] line plotting was broken
   12- oo loops in prodinf [ e.g prodinf(x=2, zeta(x)) ]
   13- [compatible=3] wrong prototype for isoncurve, lex, sign, thetanullk
   14- quadhilbert(D > 0) spent an unreasonable time to find a relative
       equation defined over Q [ use Galois theory instead of naive search ]
   15- typo in resmod2n [ missing (ulong) typecast ] -> issquare((2^64+1)^2)=0
BA 16- galoisinit() could fail to find a polynomial defining the fixed field.
   17- elllseries had an apparent singularity at s = 2 [ loss of accuracy ]
   18- gcoeff, gmael & their variants were not lvalues.
   19- typo in element_val(t_FRAC) [ "non invertible" errors in rnfpseudobasis ]
   20- added -fno-strict-aliasing to gcc flags [ PARI code doesn't follow
       strict aliasing rules. In any case, gcc 3.3 can't handle new mael ]
   21- 1.a --> 1.0000 [ should be error ].
       (x.a = x+1); 1.a --> 1.0000 [ should be 2 ]
   22- bnrdisclist(bnfinit(x,2),1) --> SEGV
GN 23- [Solaris cc] use safer optimization flag [ -xalias_level=any, fix a
       pb with 18 above ]

  Changed
    1- increased maximum binary exponent for t_REAL, and maximum GEN length
       on 64 bit machines. Bumped BINARY_VERSION for writebin --> objects
       saved in writebin format between 2.2.1 and 2.2.8 are incompatible.
    2- use easier to differentiate colors for hi-res plots [ replace "sienna"
       by "violetred" and "cornsilk" by "green" ]
    3- GP interface of function intnum [ old flags not recognized, much more
       elaborate interface ]
    4- library interface of functions intnum, prodeuler, suminf, sumalt,
       sumalt2, sumpos, sumpos2, prodinf, prodinf1  [ GEN (*eval)(GEN,void*)
       everywhere instead of entree * ]
BA  5- allow Configure -l <directory>  [ in addition to <directory>/pari.cfg ]
    6- renamed gzero --> gen_0, gun --> gen_1, gdeux --> gen_2.
    7- replaced kludgy matexp.c example by straightforward extgcd

  Added
    1- new algorithm for log( t_COMPLEX ), log(2) [ AGM ]
    2- new algorithm for Pi [ AGM ]
    3- new algorithm for atan, acos, asin [ AGM ]
HC  4- "double exponential method" for numerical integration and sumation.
       See ??intnum. New functions intcirc, intfouriercos, intfourierexp,
       intfouriersin, intfuncinit, intlaplaceinv, intmellininv,
       intmellininvshort, intnuminit, intnuminitgen, intnumromb, intnumstep,
       sumnum, sumnumalt, sumnuminit
    5- new universal constant gen_m1
    6- [bench suite] test-intnum and test-stark toplevel targets

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.7 (released 18/12/2003):
  Fixed
    1- bench input files: should all start by a 'gettime()' instruction
    2- bnfisnorm(bnfinit(x^2-11),1) --> [Mod(1, #), 1]   [ return a result
       involving MAXVARN on trivial input ]
    3- [Mat(5)] * [[0]~]~ --> 0. Should be [0]~   [introduced in 2.2.6-C.25]
    4- \p 1000
E=ellinit([1,0,1,-120039822036992245303534619191166796374,5042249924849106700108
01799168082726759443756222911415116]);
x1=1e100; y1=ellordinate(E,x1)[1];
ellpointtoz(E,[x1,y1]); -->  impossible addition t_VEC + t_VEC.
       [ precision error ]
    5- erfc(non scalar) --> type error
    6- raising to t_FRAC power didn't work with p-adics: (-1+O(5))^(1/2) --> 1
    7- [ isprime / APRCL: ] integer overflow, e.g isprime(2^32 + 1, 2)
    8- sum(i=2^32-10,2^32+10,1) --> 11  [ kind of overflow ] + didn't use the
       t_INT interface ==> broken with GMP kernel
    9- polgalois(x^6-3*x^4+3) --> [24, -1, 1], should be [24, -1, 2]. From 2.2.4
   10- nfisincl(x, x^2+1/2) --> SEGV   [ assumed integral inputs ]
   11- numbpart(10^15+2) --> SEGV  [ check for x < 10^15 incorrect ]
   12- polcompositum(x,x) --> SEGV [ problem with poldeflate(deg 0 pol) ]
   13- zeta((1+I)/2^225) --> 7e28  [ precision error when using func. eq. ]
   14- typos in qfsign/qfgaussred() [ aka sqred2 ]: wrong results: e.g
       qfsign([0, -1, 1, 1; -1, 0, 0, 1; 1, 0, 0, -1; 1, 1, -1, 0]) --> [2,2]
       ( should be [2,1] )
   15- numbpart(0) --> 0 [ should be 1 ]
GN 16- assembler section of Sparc Makefiles relied on GNU make specific $<
MSo17- off-by-1 error in Vec( t_STR )  [ memory corruption ]
   18- off-by-1 error in itostr(), e.g 10^11 [ memory corruption ]
BA 19- [hi-res plot: X-Windows] rescaling bug
MSo20- bittest(1,32) --> 1  [ off-by-1 error ]
   21- nfeltpowmodpr(nf,x, prime of degree 1) --> SEGV [ FpXQ_pow couldn't
       handle computation in prime fields ]
   22- charpoly( Mod(mat, poly) ) --> SEGV [ out of stack components not
       treated properly ]
   23- memory corruption when parsing floating point constants [ constante() ]
   24- too little GC in serreverse()
   25- bnfinit(huge field) --> "precision loss in truncation" [ missing
       term sqrt(disc(K)) in norm bound ]
   26- allow conj(t_POLMOD) provided the modulus degree is <= 2.
MSo27- ?0 with _many_ user functions defined --> SEGV [ typo in commands() ]
   28- quadclassunit(5) --> PLEASE REPORT  [ can't build subfactorbase,
       introduced in 2.2.6 ]
   29- valuation(x^3, x^2) --> 3  [ valuation at a monomial assumed it
       had degree 1, introduced in 2.2.2 ]
   30- Set(matid(2)) --> [ "[1, 0;\n0, 1]" ]. Ensure "raw" format is used,
       not "prettymat".
   31- typo in rnfpolred(bnf, *). E.g rnfpolred(nfinit(polcyclo(3,a)),x^3-19)
       --> oo loop  [ non-positive T_2 form ]
   32- typo in ellap: rare wrong result. E.g
       E=ellinit([0,0,1,-5115523309,-140826120488927]);
       ellap(E, 1315717181)
BA 33- qfbprimeform(-3, 1) --> data corruption [ gzero's signe set to 1 ]
   34- qfbpowraw(x, n < 0) reduced its output
   35- stack corruption when adding huge p-adics
   36- idealintersect did not allow fractional ideals
   37- Ser([1,2]) --> 1 + 2*x + O(x^2) [ OK ], but Ser([0,0]) --> O(x^16)
   38- writebin() still produced incompatible output depending on the
       multiprecision kernel.
   39- [alg | lin]dep( t_PADIC ) had stopped working in 2.2.6
   40- some precision problems in polgalois(deg(p) > 7) [ changed slightly
       some heuristic settings: the algorithm is simply not rigorous... ]
   41- typo in polredabs: polynomial of minimal T_2 norm might be missed
       [ actually found, then deleted due to a typo when "Sorting" small
       vectors, which would assess them the norm of a larger element ]
   42- polredabs(,4): some polynomials of minimal norm could be eliminated
       due to fixed buffer size for the small vectors. Made that dynamic.
   43- in certain situations (when using Allombert's algo.), subfields did
       not output subfields sorted by degree
   44- [Windows installer:] online help did not work on most installations
   45- lines continuation with \ did not work with DOS fileformat
BG 46- random(2^31) returned integers in [0, 2^32-1]  [ long/ulong problem ]
   47- isprime(156499227435744375600531968861048687296374896432841731) --> SEGV
       [ missing case in aprcl:sqrmod5() ]
BA 48- Configure: using gcc-3.3 + LANG=french, Configure failed to detect gcc
       [ messages translated ]
   49- alpha kernel would not compile with a C++ compiler (missing extern "C")
   50- rare stack corruption in gmul(t_COMPLEX, t_COMPLEX) [ when result is
       real ]
   51- valuation(Mod(x,x^2), y) --> oo loop  [ now 0 ]
   52- optimization problems in new zeta() and gamma() [2.2.0 C13]
       ( e.g zeta(0.5 + 10000*I) was _much_ slower than before )
   53- precision problem in nffactor [ in get_R() ], could yield to a SEGV, e.g
       nffactor(nfinit(y^4+7^2),x^28-14*x^24+20321*x^20+166992*x^16+1171296*x^12+1342208*x^8-5005056*x^4+3211264);
   54- contfrac(Pi/2,2) --> [1, 1]  (doc says a_n != 1, so should be [2])
   55- factorint(
3280696195200006885547973357173182411881462602934802054749349683516314460050
2548596646024265171468102088952756084355402608216473040677346490348936595334
0299389230010814564530645152250241760175805765084544728012391149823776145022
4913178048870032606672750626773595019035786804361581343222144074318522768947
2061349830773562073895748494534362180537529975336881525935996152181576667869
0625865166662910961888106910345518707973056625912728422391238723575276042635
9727112469435556047168454738353621102783718736137552743946577993495054202848
9372915917197045423574773583244796785665263319216397122018435444897 ,11)
      --> impossible assignment I-->S  [ stack corruption ].
   56- typo in kummer.c:invimsubgroup [ hnfmod --> hnfmodid ]. Very rare
       weird error message in rnfkummer(): "wrong subgroup in conductor".
   57- typo in alglin2.c:hnfspec() [ same loop index used twice ]
   58- zeta(x) very slow for large integer |x| (use new bernfrac() code)
   59- removed -mimpure-text from DLLDFLAGS on non-sparc architecture
XR 60- Configure/bench: use head -n # instead of head -# (deprecated and
       unsupported by GNU coreutils)
   61- not enough GC in mpbern() [ Bernoulli numbers ] and psi()
   62- \p50000, then polroots(x) --> exponent overflow
   63- ellj( t_QUAD ) / eta( t_QUAD ) was forbidden.
   64- polredabs(x,1) did not work when x was already reduced
   65- polroots(x^3 + 0e-20) --> oo loop [ didn't handle nicely non-exact 0
       as a constant coeff ]
   66- 'make doc' always rebuilt the documentation, even if it was up to date

  Changed
    1- bnfinit: [small_norm phase] speed up norm computations.
    2- [make etags:] use $ETAGS instead of 'etags' if defined
    3- [libpari:] renamed incgam4 --> incgam0, incgam3 --> incgamc
BA  4- [Description system] Store GP functions in a database in
       src/functions/ instead of hard-coding them in C files.
    5- [libpari:] modified zbrent interface to allow library programming
    6- ellpointtoz(E, P): remove the test that P be on E [ useless and
       often wrong when P has inexact entries]
    7- allow serconvol() with 0 series.
MSo 8- allow numtoperm(0,k)  [ --> [] ]
    9- simplify result of basic op. involving complex numbers,
       e.g. I*I --> -1 as t_INT  (was t_COMPLEX)
   10- embedings of number fields: use x + iy --> (x + y, x - y) instead of
       (sqrt(2)x, sqrt(2)y) to map complex embeddings to R^2.
   11- disallow Ser( t_MAT )  [ resulted in a series with t_COL coefficients ]
   12- nf format to improve idealinv() [ nf[5][6] and nf[5][7] ]
   13- disallow sqrtint( x < 0 )
   14- meaning of the GP_DATA_DIR global variable: now points to the
       directory _containing_ galdata, not to the galdata files
   15- qfminim(,,2) + polredabs: look for points by (roughly) increasing
       norms (was: full enumeration and roughly decreasing norms)
   16- exp(-10^10) --> 0.E2525223  [ was 'underflow' ]
   17- polredabs: improve the search for subfields (no polynomial
       factorization required now, only linear algebra)
   18- ellglobalred(): use gcd(e.c4, e.c6) to help factor e.disc
   19- removed obsolete components ("checks", "bits of accuracy left in
       computation") from quadclassunit / bnfinit / bnfisprincipal /
       bnrisprincipal / bnfunit outputs.
   20- 'make test-graphic' is gone. Use 'make test-ploth'
HC 21- new implementation of gamma()
   22- renamed Oxxx/dft.Config.in --> pari.cfg
   23- new implementation of bernfrac() [ use zeta(2k), initial GP code by HC]
   24- bernvec always calls bernfrac()  [ hence has become useless ]
   25- [sparcv8_super kernel:] replace asm divll with portable one
       (slightly slower but fixes many compilation problems, and easier to
       maintain on an architecture which has become hard to test)
   26- buchall() [ bnfinit, etc ]: complete rewrite to avoid restarting from
       scratch after a precision increase. All relations stored in algebraic
       form, so that data is easily recomputed to higher accuracy if necessary.
       Use lower default precision.
   27- remove special handling of t_STR by printtex / writetex [ 2-2-6-C19:
       a \ would be inserted in front of $, %,  etc. ]. This broke things like
       printtex("$", x, "$"), and is better done by the user herself.
   28- bnfinit(): remove useless components from the "technical parameter".

  Added
    1- [Configure:] flag --with-ncurses-lib=*
BA  2- support for FLTK graphical library [ hi-res plot ]
BA  3- galoisidentify for order 96 to 127.
    4- default 'datadir' [ to allow relocating 'galdata' for polgalois ]
    5- hi-res plotting under Windows
GTo 6- routine qfrep()
BA  7- routine qfbsolve(Q,p) for Q imaginary and p prime
    8- new testsuite: make test-galois (~ 1 minute)
    9- new options to Configure: --with-fltk, --emacsdir, --datadir,
       --sysdatadir
SG 10- updated micro-kernel for HPPA
BA 11- Add code 'i' for functions returning C int (not long)

  Removed
    1- bruteall [ useless, undocumented variant of 'brute' ]
    2- option to Configure: --miscdir

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.6 (released 19/06/2003):
  Fixed
    1- rnfidealtwoelt, rnfidealmult --> SEGV
    2- agm(x+1, x+2) --> oo loop [2.2.5 F-61 was undone...]
    3- setrand(1); elltors(ellinit(vector(5,k,random/random))) --> SEGV
       [ incorrect use of partial factorization in ellintegralmodel -->
       surviving denominator ]
    4- old typo in cauchy_bound --> factor((x - 155)*(x^2 + 160*x + 12864))
       returned a single irreducible factor [ missing factor 2: initial upper
       bound for roots was 125 instead of 250 ]
    5- zeta(x) very slow near large negative integers
    6- algdep(2^46,1) ---> 1 [from 2.2.5]
    7- bnrclassnolist(bnfinit(y),[2,2]) --> SEGV
IS  8- typo in paricom.h [extra , in enum] --> compilation failure
IS  9- typo in part.c [ // comments ] --> compilation failure
   10- y/(x/y) --> error [ wrong assumption that y is a genuine GEN in
       mulscalrfrac ]
   11- example/Makefile wasn't up to date [ link with -lpari ]
   12- zetak(zetakinit(y), 3-1e-28) --> -7.2e28 [ catastrophic precision
       loss triggered by anything non-integral but very close to an integer ]
IS 13- gp-dyn build on AIX
   14- subst(y*x,y^2,x) --> 0
   15- rnfisnorminit(x,x^3-2) --> SEGV [ bad input. Missing argument checks ]
   16- Compiling with g++ + gmp, missing gmp version number [missing stdio.h]
IS 17- [AIX:] various compilation problems + select better CFLAGS
       (-qtune=auto -qmaxmem=8192)
IS 18- [HPUX:] remove -E from DLCFLAGS
   19- bnrconductor(bnfinit(x)) --> SEGV [ missing check ]
   20- ellpow(E,...,-1) --> stack error [ from 2.2.5 ]
   21- a:b:c; c/a/b == c/b/a --> 0
   22- sparcv8 inline assembler kernel used global registers for hiremainder /
       overflow, which was dangerous, inefficient, and complicated. Now none
       of the inline kernels use any global variable. The non-inline
       assembler kernels do define and access globals hiremainder and overflow.
BA 23- cos(2^2^22) --> precision too low [ idem sin, tan ]
   24- setrand(1504969109; quadclassunit(-403195) --> incorrect. Check against
       L-value too liberal; now allow quotient in [ 0.8, 1.3 ], not [0.75,1.5]
   25- TODO item: quadclassunit not reliable when fed non fundamental
       discriminant (oo loop [e.g quadclassunit(-352)], wrong result).
       [ fix: increase factor base ]
   26- sign of elleisnum(E, 6, 1) was wrong
BA 27- [GMP kernel] factor(18295370635792208009) --> error
   28- idealprimedec(nfinit(x^16+16),256) --> SEGV [ bad input ]
   29- setrand(1642014180);quadclassunit(1642014180) --> PLEASE REPORT [ bug
       in large prime relation code ]
   30- TODO item: rnfpolred(nfinit(quadpoly(904,y)),quadray(904,1))
       ***   division by zero in gdiv, gdivgs or ginv
BA 31- uninitialized memory read in divrr(x,y), when lg(y) < lg(x), leading
       to random rounding of result.
   32- [Cygwin + bash >= 2.05a]: HOSTTYPE no longer auto-exported by bash -->
       Cygwin compilation broken. Define it to i386 by default.
   33- TODO items related to polgalois
       + polgalois(x^8-1864259299553450972214799899167226732549697977945716*x^6+331143259018657601105207922631212331088735421305543663274125986698777318014979969*x^4-2225286541902342283500014249183311190477390*x^2+5); --> degree too large
       + setrand(7); polgalois(x^8+162644002617632464507038884216211529274267271168000002) --> wrong result
       + polgalois(x^11 - 2) took a looong time.
   34- systematic warning in bnfisnorm()  [ "useless flag" ]
   35- charpoly could not handle t_POL in variable MAXVARN
   36- \p400 + sin(2*Pi) boasted far too many significant digits
   37- [Configure:] --with-readline=path did not work
   38- [Configure:] $TOP/readline was added to search path for ncurses,
       termcap, etc
   39- memory leak:
         x = vector(2); y = vectorv(2);
         while(1, m = matrix(2,2); m[2, ] = x; m[, 2] = y) --> out of memory
   40- factor(12345)[,1][3] --> error
   41- overflow in some GP interface routines: e.g default(realprecision,10^125)
   42- polhensellift((x^2+1)*Mod(1,5),...) --> SEGV [ bad input ]
   43-  lindep([x,y]) --> SEGV [ bad input ]
   44-  polredabs(x^4+9670527181567158504671*x^2+4840282594390812607599424249,16);
        --> impossible concatenation in concat [ from 2.2.5 ]
   45- [Cygwin compilation:] incorrect cygtop [ --> readline not found ]
   46- [Cygwin:] DLL build. libpari.dll and gp-dyn build OK. Install does
       not work in gp-sta (SEGV)
   47- rare SEGV in Round 4 when using non-primes in addprimes()
   48- overflow when computing Euler's constant to 20000+ decimal digits
MSo49- error message for unrecognized GP metacommand: off-by-1 error
GN 50- Configure breaks if CFLAGS contains '/'  (invoke sed with '!' separator)
IZ 51- [tex2mail:] line couldn't start with {...\over...} (required indent)
IZ 52- [tex2mail:] \over wasn't allowed within \left( \right)
   53- ZX_QX_resultant (modular resultant with integer result): possible
       oo loop when the result is 0, and non trivial denominator.
   54- elleta(E.omega) gave incorrect results [ conflicting normalizations ]
   55- typo in charpoly(t_MAT) [ stack overflow after garbage collection ]
   56- subst(y,x+y-x,y) --> 0  [ missing simplification ]
   57- typo in nfroots [ returned inverse of roots when polynomial had small
       degree (using Trager's method) ]
   58- 'path' default incorrectly set on Cygwin
   59- [internal:] isprincipalfact() incorrect if flag contained
       nf_GEN_IF_PRINCIPAL (was unused).
   60- bnfisintnorm(bnfinit(y^4+y+1), -1) --> SEGV [ could occur for any unit ]
   61- stack corruption in matsnf() [ when GC occurs ]
   62- vecsort(t_VECSMALL) --> SEGV
   63-  v = vector(2); j = 0; v[j++] = 1 --> j = 2 [ side effect of
        2.2.4-F21: LHS for matrix assignment was evaluated twice ]
        Rem: v = vector(2); v[j++] = v = 0 --> SEGV. Don't cry.
BA 64- [ix86 + gcc compilation]: fix "invalid preprocessing token" Warning
BA 65- galoisinit could very rarely trigger a 'impossible inverse modulo' error.

  Changed
    1- rnf structure (removed useless components)
    2- rnfidealreltoabs, rnfidealup: now return a Z-basis as a vector of
       elements in the relative extension, instead of a meaningless HNF matrix
       wrt an unknown basis. Was especially dangerous if the extension also
       existed in nfinit form, since the HNF matrices were _not_ ideals wrt
       this nf structure. [ also consistent with rnfeltreltoabs ]
    3- rnfidealabstorel now requires input in the above form, so use
       rnfidealabstorel(rnf, nf.zk * A), if A is a standard ideal in HNF
       form. Used to require matrices in HNF form, which was confusing since
       ideals such as A gave wrong results [ HNF wrt different implicit bases ].
    4- idealadd(x,y): multiply by lcm(denom(x), denom(y)), not their product
    5- rewrote nfhnf/nfhnfmod/nfbezout [ many small improvements ]
    6- rnf structure now filled incrementally [ absolute nf, data for norm
       computations ]. Use build_and_check_obj() mechanism already used for
       bnf: cycgen ( bnf.gen[i]^bnf.cyc[i] ) + matal (relations in algebraic
       form)
    7- rewrote rnfpseudobasis, rnfordmax [+ new routine rnfallbase ]
    8- always define checkmemory() in libpari [ was included only if MEMSTEP
       was defined ]. Could cause compilation failure when compiling with
       different flags.
    9- upgrade pariemacs, see pariemacs.txt
   10- faster divll for portable kernel [ inspired by GMP ]
   11- allow system() under Windows (95 and higher)
   12- use cmprr() in gegal(t_REAL, t_REAL)
   13- have Configure check explicitly that the C compiler is ANSI
   14- faster modular algorithm for characteristic polynomial of algebraic
       integers Mod(x, y)  [ ZX_caract(): old would replace x by its integral
       part and correct at the end; new is fully modular ]
   15- separated mpadd functions from [none|gmp]/mp.c --> kernel/add.c
   16- use 'lgeflist' for t_LIST: remove the 65536 limit on list size
   17- subst(1 + x^2 + O(x^5), x^2, y) --> 1 + y + O(y^2)
   18- nffactor: allow modular factorization over primes of degree > 1
IZ 19- try to output usable TeX (avoid braces, let TeX split lines)
   20- [libpari internals:] jmp_buf 'environnement' no longer global
MSo21- allow poltchebi(n < 0) [ := poltchebi(-n), still satisfies the 3-term
       recursion ]
IZ 22- prime sieve optimization [ primelimit ]
   23- try to reduce the likelihood of an artefact relation in PSLQ [ use
       "confidence level" 2^(-20) ]
IZ 24- [tex2mail:] add a "cut here" sign when expression does not fit in the
       linelength:
       \o3
       \p240
       [Pi, Pi]~
   25- faster multiplication [t_VEC | t_MAT] * t_COL for sparse t_COL
       [ induces faster charpoly for sparse t_MAT ]
   26- matsnf: allow rectangular matrices + improvements for singular matrices
   27- made startup errors ( GPRC ) non fatal.
   28- allow vecsort(t_VECSMALL)
   29- renamed mulssmod/divssmod --> muluumod/divuumod and changed their
       prototype (use ulong arguments, return ulong)  [ was already the case,
       with various casts ]
   30- renamed u_invmod --> invumod. Documented all level0 modular routines.
       [ also added invsmod ]
   31- separated "negative or zero argument" (arither2) and "zero argument"
       (arither3) errors.

  Added
    1- member function rnf.pol (polynomial generating absolute extension)
    2- src/kernel/sparcv8_[micro|super]
    3- in emacs/ : pari-completion.el pari-conf.el.in pari-fontification.el
       pari-help.el pari-messages.el sli-tools.el
    4- Configure --builddir : find a decent name for build directory
       depending on kernel options (with/without gmp, exotic assembler kernel)
GH  5- PowerPC level0 inline assembly kernel
    6- support for install() on Mac OS X
BA  7- GP function galoisexport
IZ  8- logstyle and TeXstyle defaults
    9- [GP defaults:] support 'G' suffix (for Giga) (already supported k and M)
   10- extend GP command line: once flags (-xxx) are processed, remaining
       args are taken to be filenames, read upon startup [ _after_ the gprc
       read statements have been processed ]
GH 11- IA64 level0 inline assembly kernel
BA 12- GP function galoisidentify and groups identification facility
   13- public function GENtoGENstr [ for GP2C ]. (was private: gtostr())
   14- function coefs_to_vec()
NS 15- support for Qt graphical library [ hi-res plot ]

  Remove
    1- remove emacs/compile [ integrated in Makefile ]
    2- src/kernel/sparcv[89]
    3- config/MANIFEST [ now built dynamically ]
    4- config/Makefile.DLLs [ use recent libtool instead of dirty hacks ]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.5 (released 11/02/2003):
  Fixed
    1- [bnfinit:] typo in be_honest() --> SEGV when cbach2 > cbach [from 2.2.4]
    2- apprpadic() when p = 2 (could not work) + typos
    3- typo in gphelp [detex mode]: ubiquitous "var" in translation [from 2.2.4]
    4- typo in var_make_safe() [ protecting user variables after trapped
       "stack overflow" ] --> possible SEGV  [from 2.2.4]
BA  5- [Configure:] add -lm -lc to EXTRADLLDFLAGS, not DLLDFLAGS
    6- typo in gp_main_loop: avma not restored properly after allocatemem.
       [from 2.2.4]
    7- typo in [imag|real]_be_honest: SEGV in quadclassunit(D,,[c,c2]), c2 > c
       [from 2.2.4]
    8- typo in rnfisnorminit (pol_up)
    9- at \p28: x = (1. + 10^-28) - 1; for (j=1, 100, x = (x-10^-28) + 10^-28)
       now x has 200 words of precision
   10- stack corruption in addition (t_INT + t_PADIC)
   11- factorpadic(z+y,2,4) --> SEGV
   12- wrong result in idealchinese when the y_i had denominator
BA 13- sigma(n,-1) output a wrong result.
BA 14- inline alpha assembler broken (registers clobbered)
GH 15- polsturm(1, 0, 1) ---> error  [ return 0! ]
   16- "break loop" did not react correctly to allocatemem() read from a file
       with \r (stopped reading file right away)
   17- matker(x, 1): internal loop forgot a pointer when garbage collecting
       --> SEGV (or weird error, e.g division by 0)
   18- ideallog(nfinit(y),2,idealstar(nfinit(y),4,1)) --> SEGV [bad input]
   19- ellrootno(ellinit([0,-25,0,-1250,0])) --> SEGV [from 2.2.3]
   20- typo in elllocalred (wrong Tamagawa number, case I0). [from 2.2.4]
   21- idealtwoelt(nfinit(y),2/3,1) --> SEGV [bad input]
   22- for transcendental function f and polynomial p, f(p) only gave
       seriesprecision significant terms when val(p) = 0
   23- Ser(a/b) --> 1 + O(x^16) (!!)
   24- (x^2)^(1/2) --> error
   25- idealnorm(nfinit(y),matdiagonal([1+I])) --> SEGV [bad input]
   26- polylog(10,x^10) --> O(x^6) at \ps16 [ 16 significant terms ?]
                        --> x^10 + O(x^21) at \ps 21 [missing x^20 term]
   27- nffactor/nfroots: SEGV over Q
   28- missing sanity checks in install() [ did not check the parser code ]
   29- typo in nilord() [lg-->lgefint]: nfdisc() didn't work on 64bit HP
   30- ellisoncurve(ellinit([0,0,0,0,1]),[1/2-sqrt(3)/2*I,0]) --> 0
   31- type 'gphelp' from command line: carriage return is missing
   32- typo in LLL_cmbf() [ rare oo loop in factor() over Z[X] ]
IS 33- [HPUX:] should compile with cc -Ae, not -Aa
   34- excessive memory usage in bnrstark() [ InitPrimes ]
   35- bessel[jk](t_SER) not implemented around a!=0, but gave (bogus) results
       [output error message for now]
IZ 36- [OS/2:] rename static functions _core[2] (conflict with stdlib.h)
IZ 37- [OS/2:] ^C would only work once
   38- algdep(.1^5,1,10) --> 1
   39- { "a
            b" }  \\ with an explicit \n
       produced "ab", whereas whitespace in strings is to be retained.
   40- inconsistencies in return type from lindep [t_VEC/t_COL].
   41- possible oo loop in ellap [ typo in appell1 ]
   42- made PSLQ (algdep/lindep) insensitive to 'realprecision' [use
       precision of the input]
   43- nfinit(x^2-4*3,4) --> SEGV
   44- Compilation failure on ORIGIN + Irix: rename 'sgi' --> 'SG' in
       basemath/galconj.c
   45- '\r a' where file 'a' is empty --> "a is not a GP binary file".
   46- make sure qflll[gram](x) never fails when x has exact entries [ much
       faster than qflll(x,1) when the entries are large ]
   47- increase subFB sooner in buchall() + add GC in Q_denom { bnfinit(x^8 -
4*x^7 + 462*x^6 - 1372*x^5 + 85789*x^4 - 169296*x^3 + 7540560*x^2 - 7456140*x
+ 263038707) } took a long time, then overflowed the stack
   48- make test-kernel did not work anymore (prototype error in kerntest.c)
   49- overflow in u_FpM_gauss (oo loop in ZM_inv for huge matrices)
   50- polcoeff(1+O(x^2),1,y) --> SEGV
   51- content(y/x) --> 1   [ should be y ]
   52- divrem(x,2) --> x/2 instead of [x/2, 0]~
   53- divrem([1.,2],x) --> stack corruption
   54- ff(n)=local(v=[],w=[]);n
       f(n)=n
       ff(f(n))=n  --> error (OK) + SEGV on Linux (same data freed twice)
   55- qflll(matrix(2,3,x,y,x+y)) --> SEGV
IZ 56- default(primelimit, 2156858852) --> SEGV and other signed/unsigned
       conversion problems.
IZ 57- printtex("x1") and printtex("x_1") gave same output
IZ 58- printtex(t_STR) [ protect special characters, eg ~ or \ ]
IZ 59- [readline:] support old versions (1.0), try to recover from
       mismatched headers wrt. library, report version of loaded library in
       gp header [as opposed to library version at Configure time]
BA 60- add "const" keyword to allow building with g++
   61- agm(1+x,2+x) --> oo loop
   62- lindep([1,0]) --> error [ problem with trivial cases in PSLQ ]
   63- wrong reconstruction bounds in nffactor
   64- short help message for isprime/ispseudoprime
   65- issquare(t_FRAC or t_RFRAC, &x) did not work [ worked without &x ]
   66- nfgaloisconj(x^2+1,4, 0) --> SEGV [ bad input ]
   67- typo in quadhilbert(-D): required O(D) memory instead of O(sqrt(D))
   68- all signed/unsigned compiler warnings
   69- \p29, tan(Pi/2) --> "division by zero". Made error more explicit
   70- nfnewprec(nfinit(x,3)) --> SEGV
   71- bnrconductorofchar(0,0)--> SEGV [bad input]
   72- qfjacobi( non-square matrix )  --> SEGV [bad input]
   73- matmultodiagonal([;],matrix(0,1)); --> SEGV [bad input]
   74- [GP, trap:] prevent oo recursion if default exception handler
       itself raises an exception
   75- allow qfbred(,2) [don't update Shanks's distance] also for definite
       forms [ignore flag].
   76- lex(x,"y") --> error [ should be -1 ]
   77- algdep(0,1) --> 0 [ should be x ]
   78- log(1, AGM) --> oo loop
   79- [Configure+gcc] remove useless -m* arguments from CFLAGS [ obsolete ]
   80- improper rounding when printing floats: 1.2 --> 1.199999999
   81- [default:] realprecision was allowed to be 0, and then treated as 9.
   82- Precision loss in inputs of large exponent: 1e100000 -->9.99999824 E99999
   83- quadgen / quadpoly accepted square inputs --> weird bugs later.
   84- poldegree(x^2 / y^4, y) --> -1
   85- setrand(178);quadclassunit(82421) --> 2 instead of 1 [from 2.2.4:]
   86- polroots( Pol(subst([1,0,4*x,0,2*x^2+24,0,16*x,0,16],x,10^2589) )
       --> division by zero [ double overflow ]
   87- LLL-reduction over polynomial rings (almost always failed)
   88- (x/y)*(y/x) --> y/y
   89- fix pari_init_stackcheck to avoid bogus "deep recursion" messages on
       broken machines.
   90- reused invalid (gerepile'd) pointer in mat_ideal_two_elt.

  Changed:
    1- "not enough precomputed primes": output largest needed p if available
XR  2- factorpadic so that factorback gives back the original polynomial, up
       to a power of p
    3- type of avma, bot, top to 'pari_sp' (pari stack pointer) [does not
       break existing code]
    4- [library:] make floating point assignments round the inputs (used to
       truncate)
    5- ensure proper rounding in divrr/mulrr() [ important for numbers input
       in scientific format, e.g. 1e20 ]
BA  6- moved internals of mppgcd to mp.c/gcdii
BA  7- moved internals of genrand to mp.c/randomi
BA  8- renamed mymyrand --> pari_rand31
    9- bnrstark: use partial factorization of discriminant when (pol)reducing
       the polynomial [could embark into hopeless factorizations]
   10- primedec: improved search for uniformizers when p | index
IZ 11- [OS/2:] improve dlopen(NULL,...)
IZ 12- [OS/2:] enable dynamic-linking build
IZ 13- [OS/2:] use same CFLAGS as under Linux
IZ 14- when using external prettyprinter, write in raw format to logfile
       [not in TeX format sent to prettyprinter]
IZ 15- don't output pseudo-TeX sequences to logfile when using external
       prettyprinter (raw format)
IZ 16- make X11.builtin-gnuplot-dynamic the default graphic library.
IZ 17- allow changing the gnuplot DLL name for gnuplot-dynamic at Configure-time
       e.g. Configure --graphic=gnuplot-dynamic,gnpltdrw
   18- allow Vecsmall(t_STR)
   19- polredabs heuristic (try harder to detect subfields).
       Ex: try it on polcompositum(x^2 - d, polcyclo(11));
MSo20- simplified polzagier()
DS 21- improvements in elltors() [ faster torsion bound, check bound > 1
       before checking precision ]
   22- minor improvements in plindep() [p-adic lindep/algdep]
   23- 'make all' now builds the documentation [ that way, 'make install' need
       not run a bunch of TeX commands as root ]
   24- improved idealaddtoone/idealchinese/idealapprfact [use dedicated HNF
       variant + simpler uniformizers in idealapprfact]
   25- rnfkummer: do not return rational coeffs as POLMODs: -1, not Mod(-1,pol)
   26- improved idealval()
   27- simplified element_reduce, idealmodidele (redideal), compute_raygen
       (create bnr.gen): faster, smaller elements
   28- new algorithm for conductor() and bnrdisc() [much faster, does not
       need bnr.gen]: find minimal f such that P_{1,f}(K) \subset H,
       computations are done for a fixed modulus F instead of computing the
       image of H in Cl_f(K) for many f | F.
IZ 29- improve portability of make_vi_tags (cf 'make ctags')
   30- using install() twice on the same symbol now updates the prototype code
   31- re-enable ranlib support (disabled in 2.0.13)
   32- declare first argument in pariputs[f] as 'const char*'
   33- enabled Karatsuba multiplication for t_REAL
   34- broken Configure into many smaller files (config/get_*)
   35- let gphelp write all cross-references as [label:LABELNAME] (was [??])
IZ 36- cache optimization in initprimes() [ default(primelimit,.) ]
   37- Str() now takes multiple arguments as print(). Str(,1) replaced by
       Strexpand()
   38- prototype of strtoGENstr() [remove flag]
   39- remove -Wno-implicit from CFLAGS
   40- prototype code 's*' now produces a t_VEC of GENs [callee's business
       to call GENtostr] (used to be a NULL-terminated list)
   41- [gphelp:] if perl not available, don't pretend extended help is.
   42- try harder to detect precision problems in floating point lllgram
   43- [ix86 kernel:] macroified bfffo()
   44- made all GEN macros return signed types [ had inadvertently switched
       to ulong as a side effect of some other change, long ago ]
BA 45- split kernel Makefiles in MakeLVL0 and MakeLVL1.
BA 46- --disable-kernel Configure option replaced by --kernel=none
   47- compute_polrel() [rnfkummer] was very slow for [L:K] > 5 (compute
       Newton sums directly)
   48- simplified fincke_pohst() [don't recompute gram_matrix]
   49- faster trueeta(), faster quadhilbert(D < 0)
   50- faster isprime (trial divide by small primes, recognize 1-word moduli)
   51- ellheight: use Mestre's AGM to compute Archimedean height
   52- poldegree(0) is now VERYBIGINT
   53- alpha + gcc: compile with -O3 [ since F14 fixed the optimizer "bugs" ]

  Added:
    1- [TeXmacs:] contextual completion (<TAB>)
BA  2- routines ishiftr, gfloor2n, isqrti, randomi
    3- routine random_bits
BA  4- [Configure:] --builddir flag
IZ  5- File README.os2
    6- Allow nfroots(, P) [ roots in Q ]
    7- routines Strexpand(), Strtex()
IZ  8- detect oo recursion on OS/2 [as on Unix systems] (cf STACK_CHECK)
RS  9- routine numbpart()
BA 10- GMP kernel
BA 11- --kernel Configure option
IZ 12- allow an arbitrary polynomial as a 2nd argument to subst()
   13- many files in config/  [ from Configure ]

  Removed
    1- macro definition BITS_IN_RANDOM (useless)
    2- appr_reduce() [static base4.c]: lllreducemodmatrix does the same. Faster.
    3- [useless,undocumented]: idealoplll, idealmullll, idealdivlll
    4- 68k assembler kernel [ unmaintained, obsoleted by the GMP kernel ]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.4 (released 12/09/2002):
  Fixed
    1- add default 'new_galois_format' to make 2.2.3 C-22 optional (by default,
       old format will be used, preserving compatibility)
 BA 2- FreeBSD: DL_DFLT_NAME value was incorrect
    3- Configure: TIOCGWINSZ not detected on Linux
 BA 4- FpV_roots_to_pol not reduced when applied to a singleton
    5- (a.x = [a]); "a".x ---> [a]  \\ should be ["a"]
    6- (a.x = [a]); print("a".x) ---> a0.E-28x  \\ should be ["a"]
    7- (a.x = [a]); 1.x ---> error \\ should be [1]
    8- wrong rnfidealnorm[rel | abs] (wrong result if O_L not free O_K-module)
    9- gcd(x + 1, x + 1/2) --> 1 \\ should be 1/2  [introduced in 2.2.1]
   10- gcd for multivariate polynomials over finite fields slower than
       in characteristic 0
   11- [library:] typo in vpariputs: pariputsf("%Z%Z",x,y) did not work
       (prints x and address of y)
IZ 12- [gnuplot + dynamic link:] allow building even when dlopen() not available
   13- [CVS:] warnings about unknown files (added .cvsignore files)
   14- f()=return \\ return "void"
       g()=return(f()) \\ return eval("void") = 0
       now g() returns "void" also
   15- f(x=11,y=x)=local(t=ff(),u=t);1 --> parse error
   16- conjvec([[],[],[]]) --> SEGV
   17- galoisisabelian(x) --> SEGV
   18- nfeltreducemodpr(nfinit(x),1,1) --> SEGV
   19- idealmul(nf, principal ideal, prime ideal) returned wrong result
       [introduced sometime in 2.2]
   20- elltors(ellinit([...], 1)) --> SEGV
   21- try to make sure life of GP variables is not too short. Was:
         v = [0,0]; v + [v=0,v=0] --> SEGV
         u = Mod(x*Mod(1,2),polcyclo(25)*Mod(1,2)); sum(i=1,4,u=u^32) --> SEGV
   22- typo in to_Fp_simple [ bnfcertify(bnfinit(x^2-40!)) --> type error ]
   23- memory leak in gp when handling '&' arguments
   24- removed hack in gcopy [ did not reset the isclone() flag because
       gunclone checks isonstack(). But other routines may want to use it ].
   25- apparent oo loop in bnfcertify [when computing lower bound for
       regulator]
   26- ideallistarch(nfinit(x),[1,1],0); --> SEGV [bad input]
   27- factor(x-I) --> x - #<16382>
   28- ellsigma(...,matid(1)) --> SEGV [bad input]
   29- ideleprincipal([],1) --> SEGV [bad input]
   30- factorback(matid(1),nfinit(x)) --> SEGV [bad input]
   31- incomplete help message for vecsort
   32- polredabs fails to reduce
         x^8-2*x^7-34*x^6+78*x^5+265*x^4-628*x^3-389*x^2+1237*x-449
       [typo in chk_gen_init: skipfirst not initialized properly]
MW 33- (recent) typo in localred (char 2)
   34- 2.2.3-C20 had broken backward compatibility: restore
       [inefficient, useless] previous output of nfelt*modpr routines
   35- idealappr(nfinit(y),matid(2),1) --> SEGV  [bad input]
   36- sqrtn(0,...) ---> error
   37- galoisinit(x^4 + 5264*x^3 + 8034856*x^2 + 4205424384*x + 504485485632)
       --> weird error
   38- qfsign([;]) --> SEGV
MW 39- torsion group of [0,0,0,-6648,208633] reported as C2 instead of C6
   40- bnfinit: very rare stack corruption
   41- bnfinit: used too much memory when needing huge number of relations
       [when computing fundamental units]
   42- bnrL1(bnr with conductor 1) --> SEGV
   43- "impossible inverse modulo ..." when using addprimes() + ROUND 2
MSo44- [gp: \x] missing 'break' statement in escape()
   45- wrong bound in nf_LLL_cmbf (nffactor) [no counter example to
       the old bound, but proof was wrong anyway...]
   46- [gp:] memory leak when assigning to multidimensional arrays (x[i][j]=1)
   47- added user-friendly error message if Configure not run properly + fix
       INSTALL.tex about make gp.dbg / gp.prf
   48- matcompanion(x*y) --> weird error
   49- typos in hilbert(), e.g
         hilbert(Mod(1,2), y) --> SEGV,
         hilbert(-1+O(2^3), 12 + O(2^3)) accepted wheras 2-adic precision too
         low to decide
BA 50- [FreeBSD:] PORTOBJFORMAT undefined by the system --> Configure fails
   51- rnfisnorm() [errors, SEGV]. Had to change the prototype.
BA 52- Oxxx/Makefile was not compatible with BSD make.
   53- errors in files read from .gprc, containing trap() --> SEGV
   54- bezoutres(Pol(sin(x)+Pi),Pol(cos(x))) --> "bug in subresext"
   55- nfsubfields had a different output format when using galoissubfieds
   56- polcoeff(1/x, -3) --> SEGV
   57- (-2/x)/(-1/x) --> -2/-1
BA 58- [GP internals:] trap() had an invalid prototype [DI,DI]
   59- M[,2][1]=1 --> error; M[1,][2]=1 --> no effect  [ now <==> M[1,2]=1 ]
   60- [GP:] newline in multiline comments /* */ was not ignored
   61- [GP:] when using default 'colors' for input at \gn>1, first debugging
       msg could be colored
   62- [GP:] in break loop, trailing ; was ignored (all results were printed)
XR 63- smarter precision increase in update_alpha() (ROUND 4) [stick to
       padics don't go over Z]
       Ex: factorpadic(polzagier(18,3), 2, 30) much faster than before.
   64- E=ellinit([0,0,0,-10301051460877581926458079712219,-12725370882271967125361344545020920373899020890]); ellap(E,1167254453) --> wrong result
   65- factor(x^2 + I*1.) --> SEGV
   66- when printing x < 0 t_REAL, was rounded in the wrong direction
   67- [WINCE port:] small and SID are already defined in windows.h

  Changed
    1- remove most global variables from gp.c (put them in struct gp_data).
    2- use better bounds for size of factors in nffactor()
    3- tuning for van Hoeij's factorizer (factor + nffactor)
       nffactor: call factornf when deg(pol) << deg(nf) + remove a priori
       overlift for d-1/d-2 test [major overkill]
    4- automatic concatenation for strings: use longest match for expression.
       print("a"[1]) is not valid since "a" is not a vector
       print("a", [1])  prints  'a[1]'
IZ  5- [gphelp:] allow uninstalled operation from $TOPDIR or $TOPDIR/Oarch
IZ  6- [gphelp:] better error messages in case TeX compilation fails
    7- [development version:] add version number for this file to the gp
       header when using CVS
IZ  8- [library:] unified access to diffptr (NEXT_PRIME_VIADIFF macro)
    9- buchall: re-use the same random seed when doubling prec (for units)
   10- major cleanup in thue / thueinit
   11- major improvements in rnfkummer (use elements in factored form):
       much faster, give smaller elements, allow arbitrary prime degree
   12- improved quadray(D < 0) when relative degree is huge
   13- improved bnfisprincipal when class group large: use factorisation
       (+idealred) instead of arch. components (require much less precision)
   14- [library:] allow trapping invmoder and recovering the offending INTMOD
   15- improved factor over Z[X] for _huge_ degrees (factorizations mod p)
   16- change in ordering for primedec output [use cmp_prime_over_p]
   17- [library:] moved (formerly) gp-specific write* and print* to libpari
   18- input format to rnfisnorm() [use rnfisnorminit]
   19- [GP:] break loop prompt from '>' to 'break>'
   20- [GP:] don't get out of break loop after \r
   21- type f(x=1)=; twice ---> x = 1
   22- [trap:] the way default error handlers operate, how to get out of
       break loops (see section 2.7 of manual)

  Added
 BA 1- Add PARI_VERSION and PARI_VERSION_CODE to paricfg.h
 BA 2- Add pari_release at top of dft.Config.in
    3- rnfpolredabs: flag to use partial factorization
    4- [gprc:] test against VERSION number in .gprc
    5- [gprc:] multiline constructs
 IZ 6- mnemonics for flags
    7- internal flag nf_GEN_IF_PRINCIPAL to bnfisprincipal [isprincipalall]
    8- routine rnfisnorminit()
 BA 9- [Makefile:] bzdist target
   10- [library:] CATCH / TRY mechanism [ encapsulate err_catch ]

  Removed
    1- (useless, undocumented) macros buchgen*, buchinit*

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.3 (released 10/06/2002):
  Fixed
    1- bnrinit(bnfinit(subst(polsubcyclo(89,8),x,-x)),4) --> SEGV [make sure
    isprincipalfact is used in makecygen, even in case of precision problems]
    2- bnrisprincipal --> warning + "not an element in ..." [missing nf_FORCE]
    3- oo loop in isprincipalfact when increasing bnf precision
    4- stack corruption in ellap (LARGE p)
    5- zeta(s) destroyed the Bernoulli cache when using the functional equation
    6- oo loop in random_relation (called from bnfinit)
    7- fixed lower bound for p in nfsubfields (could get oo loop: pol never
       squarefree mod p)
    8- [Vecsmall([1, 2])][1][2][1] --> SEGV
    9- typo in t_FRAC + t_PADIC  [only numerator of t_FRAC used]
   10- factorback(t,nfinit(x)) --> SEGV
IZ 11- shift(x > 0,, flag!=0) didn't act as the docs said [flag now ignored]
   12- lindep(Vec(x^48)) --> oo loop
   13- could get NaN in max_modulus (polroots) --> havoc later
   14- missing normalizepol() in centermod(t_POL,)
   15- [Follow-up to 2.2.2-F10] even more recent pdftex failed again
   16- not enough GC when printing a huge t_PADIC
   17- factorpadic(x*(x+1),3,10) would corrupt polx --> SEGV later
   18- delayed carry treated improperly in red_montgomery
   19- F() = 0; local(x)  ==> confusing error message
IZ 20- OS/2: make bench didn't work [env wouldn't start shell scripts]
BA 21- sqrtn(Mod(1,7),2,&z)-->z=1 should be -1
HC 22- Standard transcental functions exp, sin, cos, ^, *, are now orders of
       magnitude faster for t_POL arguments of small degree.
HC 23- fixed a severe bug in p-adic/integer addition (1+3^4+O(3^10))+3
       didn't work.
HC 24- Corrected p-adic initell.
   25- ellj / eta (t_SER) truncated result to seriesprecision
   26- possible overflow in u_FpM_gauss (from ZM_inv)
   27- various problems with C++ compilers
   28- polredabs could fail to reduce "obvious" input, e.g x^2 + n*x + n^2
   29- gcd(x,y,1) didn't check its arguments
   30- typo in elltors: could forget a point of order 2
   31- gdivgs(t_RFRAC,x) incorrect (if numerator had denominator)
   32- serreverse(O(x) or x + O(x^2)) --> SEGV
   33- dbltor(0) returned 2^-308, instead of 10^-308
   34- precision problems in thue/thueinit
       setrand(5);tnf=thueinit(x^3 + x^2 - 43690*x - 3529208) --> error in mplog
   35- typo in bnfnarrow ("impossible inverse")
   36- subst(x,x^0,x) --> floating point exception
ISo37- many typos in the documentation
   38- [DOS/Windows]: incorrect conversion between 'double' and t_REAL
   39- polrootspadic(4*x^2-1,2,2) --> impossible inverse: Mod(2, 16).
       [specific to 2, and non-monic equations]
   40- discrepancy between bnfsunit output and docs [ bnfS[5][2] was t_MAT ]
   41- matdet: pivoting strategy incorrectly chosen ("incorrect type in gexpo")
   42- polcompositum output ordering depended on random seed
   43- plotrecthraw(0,[0]) --> SEGV
   44- plothraw([],[]) --> SEGV
IZ 45- ix86 inline assembler compilation problem [divll]
XR 46- forgotten case in Round4 [ nfdisc(x^12-10*x^11-57*x^10+740*x^9+353*x^8-16130*x^7+17749*x^6+100120*x^5-108466*x^4-292200*x^3+128380*x^2+380800*x+133112)
--> impossible inverse: Mod(2, ...) ]
   47- sin(1e-100) ---> 9.999999999999999999735998397 E-101 [ precision loss ]
   48- idealpow(nf,x, n < 0, 1) did not reduce the result
   49- gcd(0, -1) --> -1, content([0, Pi]) --> 3.14, content([0,Pi,Pi]) --> 1
BA 50- compilation problem on OSF (RTLD_GLOBAL undefined)
BA 51- [X-Windows] hi-res plot: window not redrawn properly (BackingStore pb)
   52- problems with tex2mail output (wrong alignment, wrong colors)
   53- contfrac(sin(Pi/4),,2) --> impossible assignment
   54- oo recursion in gaffect(t_POL, scalar)
   55- content([-1]) was -1 [ should be 1 ]
   56- stack corruption in u_FpV_polint (used by modular bivariate resultant)
   57- polroots() used too high a precision when checking errors a posteriori
       (--> slow)
   58- contfrac(1/x) --> SEGV
   59- typo in sinh(0) --> wrong zero exponent
   60- exp(O(x^-1)) = O(x^(-1))  [ouch...]
   61- dilog(O(x^10)) = O(1)
   62- cosh(O(1)) --> division by 0
   63- sqrt(4*x^2) --> not an integer exponent for non invertible series in gpow
   64- besselj(0,O(1)) [or besseli] --> precision<=0 in gprec.
   65- O(1)' --> O(x^-1)
   66- gcd(O(2^1), O(2^10)) --> O(2^10)
   67- polrootspadic(x^2+8*x+4,2,2) -->  "impossible assignment"
   68- one could write() an object to a binary file, corrupting it
MW 69- ellap(ellinit([0,0,1,-7077,235516]), 1075060289) --> "zero argument in
       an arithmetic function"
MW 70- ellap(ellinit([0,0,1,-7077,235516]),1135392007) --> SEGV
BA 71- user's manual index truncated if LANG=fr_FR
   72- lex(string1, string2) could return something not in {-1,0,1}
   73- bnfisprincipal(bnf,x, 0) was not instantaneous when bnf.no = 1
   74- no GC in poleval
   75- make clean did not remove libpari-2.2.*
   76- incorrect result in gaffsg(s < 0, t_PADIC)  [ wrong valuation ]

  Changed
BA  1- improved Fp_isom
IZ  2- remove all dependance on __OPTIMIZE__ for inlining [cf 2.0.14 F-24]
    3- implementation of psi()  [very slow + wrong results at low accuracy]
    4- cleaned up forvec() [no more global variables]
    5- improvements in bnrstark (precompute common data)
BA  6- improved ffinit()
    7- rewrote time-critical parts of bnrstark
    8- all 'input filter' code removed from GP. es.c:filtre() now handles the
       full filtering [and has become reentrant]
    9- isprime() now guarantees primality
BA 10- improved polsubcyclo()
BA 11- new interface for galoissubcyclo
HC 12- gamma function for integral/rational arguments
   13- faster factornf / nfgcd
   14- removed readline-specific code from gp.c
   15- allow bnrstark over Q
   16- 'subgroup' argument made optional in bnrL1, bnrstark, rnfkummer
   17- use relative van Hoeij algorithm in nffactor [can handle huge number
       of modular factors]
   18- rewrote factorff() to use new modular functions
   19- rewrote primedec() to use new modular functions
   20- rewrote most *modpr functions
   21- modified diagnostics for integral LLL to match floating point version
   22- INCOMPATIBILITY: polgalois(); changed 3rd component of result so that
       it gives the numbering among all transitive subgroups of S_n [ was ad
       hoc up to 7, then as described above for n >= 8 ]
   23- INCOMPATIBILITY: nf.zk is now T2-LLL-reduced
   24- idealtwoelt was very slow when a small prime with many divisors
       divided the index (use approximation theorem)
   25- content(scalar) = abs(scalar) [when it makes sense]
   26- changed the interface to ispseudoprime and isprime
   27- [internal] element_muli: check input is consistent
   28- rewrote all LLL algorithms (use Householder, not Gram-Schmidt; do not
       use Gram matrix; unified code).
   29- INCOMPATIBILITY: the internal components of nf[5] have changed (MC and
       T2 not needed anymore)
   30- INCOMPATIBILITY: [library] polred & polredabs do not take a 'prec'
       argument anymore
   31- unified nfinit, polred* [use dedicated structs internally]
   32- rnfconductor(..., 1) doesn't need GRH anymore
   33- extracted FpXQ_gener from idealstar
   34- allow more types in gdivround
   35- improved root_bound (first step in factor() over Z[X]) for huge pols.
   36- faster bernfrac / bernvec
   37- INCOMPATIBILITY: removed gentimer() / genmsgtimer(). Use TIMER/msgTIMER
   38- let nfsubfields call galoissubfields (much faster when field is Galois)
   39- Configure (locatelib): don't look for lib*.so.x [ pb on Linux with
       [readline | ncurses]-devel.rpm.

  Added
    1- mplog2() function --> faster mplog()
    2- gcd for Gaussian integers
HC  3- APRCL primality test
    4- (strong) Lucas primality test + Baillie-Pomerance-Selfridge-Wagstaff test
BA  5- Facilities for permutation groups (perm.c).
BA  6- New functions galoissubgroups, galoisubfields.
HC  7- Implemented all Bessel functions J, I, N, K, H1, H2, and Bessel functions
       for power series and polynomials.
HC  8- Implemented PSLQ [preliminary]
GTo 9- Implemented Cipolla's algorithm for sqrt(Mod(x, p))
   10- library functions FpM_ker, FpM_deplin, diviiround, centermodii
   11- library function gerepileall
   12- library functions corepartial, core2partial
   13- library functions affui, itou, stor, itor
   14- library function lllint_ip (in place)
   15- library functions Q_primitive_part, Q_primpart, Q_remove_denom, Q_denom
   16- allow polredabs to use a partial factorisation of disc(nf) [as polred,
       but inconsistent values for flag. Backward compatibility problem here...]
   17- routine ellminimalmodel()
IZ 18- systems/ directory (currently for OS/2 only)
IZ 19- [OS/2:] install() for OS/2 system  (using builtin dlopen)
IZ 20- gnuplot and X11 are now simultaneously supported

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.2 (released 10/01/2002):
  Fixed
    1- qfbred(Qfb(4, 17, 18)) --> SIGFPE
    2- broken compilation in arith.c when CC != gcc
    3- nfhilbert (local case pr | 2) expected POLMOD argument without check
    4- poldegree(P, t) slow when t != varn(P), and may not work in library mode
    5- polrootspadic only worked when leading coeff was a unit
    6- paddicappr was very slow (esp. when p was large)
    7- Configure: check for 'double endianness' [used for double --> t_REAL
       conversion]. Previous check was failing on ARM architecture.
    8- forsubgroup state not properly restored after ^C
    9- libpari.so included symbols from libc without linking it explicitly
       (Debian requirement, and cleaner anyway)
   10- recent pdftex failed to compile users.tex  (\pdfannotlink undefined)
   11- !nf.sign[1] was parsed as (!nf.sign)[1]
   12- matrix(0,1) --> "identical index variables in matrix" [from 2.2.1 F48]
   13- bnfinit could miss some relations in the "small norm" phase
   14- x % y incorrect when y < 0 inexact (2 % -3. --> -1.)
   15- typo in gcdreal (result < 0) [introduced in 2.2.1]
   16- some obscure problems in rnfkummer
   17- not enough GC in hnflll
   18- sqrt(25 + O(2^5))^2 - 25 = O(2^4)
   19- not enough GC when writing a t_PADIC
   20- user member functions were very slow (unnecessary copy)
   21- cd Oxxx; make -j4 bench ran things in the wrong order
   22- poltchebi, pollegendre gave bogus output for negative degrees
   23- possible SEGV or oo loop in polrootsmod when p not a prime
   24- nfnewprec(bnf) could change bnf.gen (due to round-off errors)
   25- SEGV in gcd(x,y) when operands have coeffs of the form Mod(t_INT,t_POL)
   26- not enough GC in poldivres (= t_POL % t_POL)
   27- issquare(Mod(3,27)) = 1  [from 2.2.1 C 10]
   28- [BUG] message in 'elliptic' bench [made polroots more canonical]

  Changed
    1- allow compressing *.dvi files for the online help system
    2- index bound was restricted to MAXLONG in subgrouplist. Made it a GEN
    3- try to guess correct precision earlier in polgalois/polroots
    4- allow GP pointers to 'matrix components', e.g issquare(25,&x[i][j])
    5- changed assignment semantics to make it closer to C: x = y understood as
       (evaluate Y:=y, then set x:=Y), e.g i=0; i += (i=2) sets i to 4  (was 2)
    6- output VECSMALLs as 'Vecsmall([...])'
    7- more efficient polcoeff [also: made it independent of MAXVARN]
    8- retuned bnfinit (let subfactorbase increase further):
       setrand(1);bnfinit(x^4 + 1159*x^2 + 335241) would never finish.
    9- specified precisely lex() [see manual]. Now:
       lex([0,0],[0]) = 1 (was -1), lex(0,[0]) = -1 (was 0)
   10- allow factorback(x, e) for prod x[i]^e[i]
   11- don't store empty lines in history [cf 2.2.1 F57]
   12- extend x \ y, x \/ y and divrem(x,y)
XR 13- improvements in bnrstark (try harder to find modulus, need less memory)
   14- global(x): ignore if x already global (used to raise a warning)
BA 15- install: add RTLD_GLOBAL to dlopen flags [so that symbols can be used
       in other .so]
   16- removed hack in gp_init.c [used "constant default args" to call print0]

  Added
BA  1- New function 'vectorsmall'.
    2- allow setting variable in divrem
    3- GP operator #l for length(l)
    4- a warning in zsign ("increase precision?") when dubious result
    5- Montgomery reduction (only used in powmodulo() for now)
    6- [experimental] basic tuning utilities (src/test/tune.c) [make tune]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.1 (released 18/10/2001):

  Fixed
    1- typo in factornf (factor of degree 3 --> error message)
    2- rnflllgram(), idealinv() didn't check their arguments
    3- [readline] \r<TAB> would complete using files matching r*
    4- wrong result in ZY_ZXY_resultant when degree dropped in ERS
    5- factor(x^2 + I*1.) --> stack corruption
    6- \r directory was silently accepted
    7- check arguments in polcompositum()
TH  8- [Cygwin:] fixed paths for readline on cygwin 1.*
XR  9- possible overflow in ComputeCoeff [ bnrstark() ]
   10- numtoperm(2,x) --> SEGV [check arguments now]
   11- rnfkummer could fail with "missing units"
   12- factornf(P, non-monic t) --> error
   13- forsubgroup/subgrouplist didn't check their arguments nor accepted SNF
       matrices
XR 14- typo in nilord4 --> SEGV, e.g.
       nfdisc(x^16-363*x^14+53550*x^12-4091823*x^10+170172414*x^8 \
         -3663509067*x^6+33703350345*x^4-63300912912*x^2+32451860736)
   15- some messages didn't distinguish between MBytes and millions of Bytes
   16- typo in BuildTree [hensel lift]: SEGV
   17- (rare) oo loop in polroots, e.g. x^5-2*x^4-32*x^3+72*x^2+218*x-491
   18- oo loop in ellpointtoz on certain rare inputs
   19- stack corruption in factorff
BA 20- better interface for galoissubcyclo
BA 21- galoisfixedfield(,,2) now works with non Galois subfields
BA 22- nfgaloisconj now use `d-1'-test + better strategy
BA 23- fix accuracy problems in vandermondeinverse
   24- missed some simplifications when handling multivariate t_RFRAC
   25- [Cygwin:] incorrect default 'path' (used : instead of ;)
   26- element_sqr didn't check its arguments (SEGV if bad input)
   27- possible stack corruption in polroots (+ improved GC there)
   28- typo in nfsubfields (incorrect bound: could miss a subfield)
   29- typo in zsimpjoin (concat error in bnrdisclist, intr. in 2.2.0)
IZ 30- typo in Configure [rl_save_prompt and _eprintf not found in target libs]
MD 31- oo loop in ellap [uninitialized array length in apell1]
   32- stack corruption in addfrac [wrong result for large denominators]
MD 33- resmod2n [called from powmodulo] could return unnormalized integers
   34- not enough GC in nfinit for huge degrees [get_mul_table]
   35- intformal(1/2/t^2) --> apparent oo loop
   36- polredabs(degree 1 polynomial) --> x  [could be very slow]
   37- polredabs() could use a basis which was not LLL reduced
BA 38- pariformats (e.g %Z) incorrect on 64bit machines
   39- polhensellift(x,[x,1],2,2) --> "bug in multiplication"
   40- glitches in readline completion (random() * ne<TAB) --> inserted args)
IZ 41- CLK_TCK may reside in time.h
   42- misleading definition for ?omega / ?bigomega
   43- on \q, "Good bye" --> Goodbye
   44- install() accepted gpnames which were not valid identifiers
   45- bnfinit(x^4+65,,[.1]) --> SEGV   (whenever c < c2)
   46- when host badily configured (~ not expanded), gp would die on startup
XR 47- factorpadic(, not a prime, ) --> SEGV
   48- matrix(2,2,i,i, ...) allowed, with weird result
BA 49- better arguments checking for galoisfixedfield
   50- psi(I) --> incorrect type in rtodbl
XR 51- increase precision automatically when needed in quadhilbertreal
   52- idealstar(bnfinit(polcyclo(5)),11).clgp --> stack error
   53- default(format,"g0.4"); 3./10 --> 0.300004577  [now: 0.3000]
   54- subst() didn't check its arguments (e.g SEGV on t_STR)
   55- qfbclassno(x < 0): wrong algo when x non fundamental
   56- obscure bugs with types FRACN/RFRACN [when simplifies to INT/POL]
IZ 57- readline history: while inputing continuation lines, the partial
       command was not put into history until full command was run
   58- not enough GC in polroots (dft) for huge degrees
   59- Cygwin: don't try to build gp-dyn.exe [crashes]
   60- use vsnprintf to fix a long-standing bug in PARI output (using formats)
       used a fixed-length buffer that could overflow. If vsnprintf is not
       found by Configure, the bug remains.

  Changed
    1- removed useless parameter prec in many bnr* and rnf* functions
    2- major update of bnr* functions [use elements in factored form]
    3- use /tmp instead of /var/tmp as default tmp directory [faster on Solaris]
BA  4- Fp_PHlog (Pohlig-Hellman) can use a factorization of the subgroup order
    5- major update of buchall() [bnfinit]: accurate precision increase, use
       multiplicative archimedean components (fewer logs), cleanup
    6- [libpari:] rename permute/permuteInv to GP names numtoperm/permtonum
    7- scalar + [;] --> error  [made it [;]]
BA  8- factorback, chinese, lcm and gcd now accept a single vector
    9- Use I \cap Z instead of NI in hnfideal_inv
   10- improved issquare(t_INTMOD)
   11- improved subresultant routines (new function pseudodiv)
   12- command-line options to Configure (installation directories)
   13- rnfequation: use modular (bivariate) resultant
   14- polynomial gcd (srgcd): uses modular algo (modulargcd,nfgcd) if possible
   15- unified internal hnf* functions
   16- improved nfsubfields [Hensel lift, allow nfsubfields(pol) instead of nf]
   17- merged all "integer logarithms" + "safe ceil" functions (mylogint,
       get_e, floor_bound, myceil)
   18- readline: TAB on empty parentheses following a function name has the
       same effect as M-h (used to insert args).
IZ 19- faster computation of prime number table [better cache use]
IS 20- obscure compiler bug in rootpol.c:max_modulus() [don't modify tau]
   21- make bench ('elliptic'): explained [BUG] message
   22- allow lift(t_PADIC)
   23- faster polroots for Q of the form P(x^k)
   24- allow subst(t, x^n, x)
   25- ?user_fun: do not include function text if help available from addhelp
       [always include it for ??user_fun]
   26- default values for used defined function arguments are evaluated when
       the function is called [used to be "when it's defined"]
   27- allow subgrouplist(znstar(5)) [didn't accept groups in general form]
   28- taught GP about GP2C-style type declaration [ignored]
   29- 0. [realzero()] is now coded on 2 words (was 3, with third one ignored)
IZ 30- readline history: lines are remembered as they were input (whitespace
       was deleted)

  Added
BA  1- function pith() [= pi(x), naive implementation]
    2- new target for Makefile: gp.dbg
BA  3- library functions FpX_roots_to_pol, FqX_roots_to_pol
BA  4- library function FpX_FpXQ_compo (Brent & Kung)
    5- library function FpM_inv, FpM_gauss, ZM_inv, QM_inv
    6- library function primitive_part
IZ  7- readline: allow switching readline editing on/off [for commandtools]
IZ  8- readline: F1 has same effect as M-h, and F1F1 as M-H (short/long help)
    9- function writebin
XR 10- new error message "precer" (precision too low in...)
   11- allow minimal handling of t_VECSMALL under GP
IZ 12- add error messages (as in err(shier2)) to emacs tag file
   13- add error messages (as in err(shier2)) to vi tag file
IZ 14- add flag to shift() to enable consistency with 2-complement semantic
IZ 15- default 'prompt_cont' for continuation lines
IZ 16- default 'readline' to switch readline on/off in readline-able binaries
IZ 17- capabilities to 'bittest' (return bitmap, 2-complement arithmetic)
GH 18- inline assembler micro-kernel for alpha + recent gcc (at least 2.95.3)

  Removed
    1- obsolete functions twototwo, threetotwo, threetotwo2
XR  2- error message truer2 (superseded by precer)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.2.0 (released 30/04/2001):

  Fixed
BA  1- gpflog could print some lines twice
    2- return() could forget objects on heap
    3- polhensellift didn't accept factors which were not squarefree
    4- Configure missed some shared libraries (when only .so.version was there)
    5- possible symlink attacks against mpqs()
    6- internal requests for precision of bnfinit(x) [ = Q ] could yield SEGV
    7- compatible = 3 not taken into account when reading a file
    8- cbezout(0,0) = 1 (should be 0)
    9- when lines > 0, output driver didn't reset properly after user output
   10- nfdisc(x^5+2*x^4+3*x^3-3*x^2+122*x-1) --> impossible inverse
   11- bug in gcc-2.95 -O3 -fomit-frame-pointer [Linux]: SEGV in quicksqri
   12- addrfrac: could return a t_RFRAC whose denominator wasn't a t_POL
   13- bnfcertify (zimmertbound): off by two error when reading bound
   14- very inefficient Hensel lift (used ideas from Shoup's NTL)
   15- incorrect assumption on factor degrees in polcompositum (SEGV in rare
       cases)
   16- Vec(VECSMALL) --> incorrect object
   17- galoispermtopol didn't check permutation length (--> SEGV on bad input)
XR 18- rnfinit(nf, T) -> bug in multiplication if nf = Q
   19- Pol(cotan(x)) -> SEGV
   20- factor(tough polynomial over Z[X]) --> possible SEGV when padic
       precision is increased [e.g factor(polzagier(60,0))]
XR 21- bug in ideal bound computation in rnfnormgroup
   22- bnrisprincipal(...,y+z) --> SEGV
   23- GP could forget about a function whose redefinition was stopped by a
       syntax error (sometimes with a delay!)
   24- bnfisnorm result would include pols in MAXVARN: e.g. Mod(1, #)
BA 25- pbs in Fp_factor_irred (factoring over Fq a pol. defined over Fp)
   26- missing macros for gphelp (tex-mode) in chapter 5
   27- nfsubfields(nfinit(polcyclo(13))) --> impossible inverse Mod(0, 29)
   28- argument checks for element_mulid, nf_get_r1 (access to nf.sign)
   29- typo in quadhilbertimag (SEGV for very large discriminants)
   30- wrong precision used in numerical derivation
BA 31- isprime(n < 2, 1 or 2) gave wrong result
IZ 32- \r C:\a.gp wouldn't work     [ : and \ forbidden... ]
BA 33- bad PARI prototypes in init.c [were confusing GP2C]
XR 34- nfdisc: fixed cache system in nilord (esp. precision handling)
BA 35- nfgaloisconj(polcyclo(40)): accuracy lost
       nfgaloisconj(polcyclo(11)+1): oo loop
IS 36- typo in squfof tuning on 64bit machines
   37- -lm doesn't exist on MacOS X
BD 38- typo in src/kernel/l0asm.c: ulong not recognized by MSVC
IZ 39- TeX quasi-parsing in gphelp
   40- ^C in gp would kill an xdvi launched by gphelp via ?? [detach from tty]
   41- factor(P in Z[X]): wrong bound used in LLL_cmbf --> "no factor"
   42- one extra blank line printed with some error messages [errcontext]
   43- no typechecks in subgrouplist and forsubgroup
   44- round4 [dbasis]: make sure polmodi gets a polynomial, not an int (SEGV)
   45- various typos in rnfkummer (SEGV or 'non-maximal rank in nfhermite')
   46- Configure -l (no argument) didn't work anymore
BA 47- incorrect quoting in src/make_vi_tags (make ctags)
   48- 1/[;] --> error, whereas [;]^-1 --> [;]  [ now, allow 1/[;] ]
   49- ??real  only gave the help on t_REALs, not on real()
   50- eigen: "missing eigenspace" [roundoff pb in ker() compared to exact 0]
   51- error messages on GP metacommands (\...) indicated wrong context
   52- bnr functions might fail with "indefinite matrix in lllgram" [prec pb]
   53- nfhilbert(nf,a,b, pr | 2) would give bogus result if nf in variable 0 (x)
MD 54- real(1 / (a+quadgen(...)*b)) was a / (a^2 + b^2)  [assumed quadgen(-4) !]
   55- wrong HNF (reduction not finished) when nblines >> nbcol [hnf(,0) only]
   56- rare problem in isprincipal (large non Galois base field)--> wrong
       result (generators not required) or oo loop.
   57- compatibility problems with readline-4.2 (build would fail)
BA 58- pari format %Z (pariputsf) treated incorrectly on 64bit machines
XR 59- typo in smallvectors (polredabs): possible oo loop

  Changed
    1- DOS distribution archives (GPM removed)
XR  2- round 4 algorithm: compute characteristic polynomials via Newton sums
XR  3- nffactormod now calls factmod / factmod9 when possible
XR  4- don't compute discriminant in nffactor/nfroots + better bounds in nfsqff
    5- input loops rewritten (filtre more flexible + unified common code)
    6- better modular arithmetic for polynomials (+ uniformized names)
    7- bnfinit: "looking hard" part overdone in random relations. Tuned down.
XR  8- added flag in rnfconductor to check extension is abelian (under GRH)
    9- made Vec("pari") return ["p","a","r","i"] instead of ["pari"]
   10- renamed library function gsize() to sizedigit()  [conflict with gtk]
XR 11- bnrstark: check if N0 is too large (=> computation impossible)
IK 12- let readGEN() return NULL when EOF is met (was oo loop)
   13- algorithm for zeta(), gamma() [initial GP code by HC]
   14- improved rnfnormgroup() [reduce number of calls to isprincipal]
IZ 15- flags for OS/2 build + use generic [pre|suf]fix for object files
IZ 16- readline: hit_return() would not work after Esc-H
                 extend online help recognition capabilities (Esc h/H, F1)
   17- install the whole distribution (see ?12)
   18- clean up in the bnrdisclist ray class group internal functions
   19- naming scheme for development versions library: libpari-2.2.so.0.0.0
   20- new Configure flags --share-prefix, --host
   21- allow library functions to return NULL to the GP interpreter
   22- let A^-1 and 1/A return a left inverse of A if it exists [A had to be
       square]
   23- retuned factorization over Z[X] (+ "d-1 test" in naive recombination)
   24- sort factorpadic() output

  Added
    1- files README.WIN, config/[arch-osname|locatesymbol], doc/tex2mail.1
GN  2- Jebelean extended gcd + rational number reconstruction
XR  3- new flag to rnfconductor (check extension is abelian)
IZ  4- set of default colors (boldfg)
    5- modular polynomial arithmetic ([uni|bi]variate resultant over Z,
       characteristic polynomial of algebraic numbers, nfgcd).
       [undocumented, experimental]
    6- Pohlig-Hellman discrete log over Fp and nf.zk / pr
BA  7- flag to galoissubcyclo (also output conductor)

  Changed
    1- start using the new modular functions [polcompositum]
BA  2- sqrtn, aka mpsqrtnmod (modular n-th root) uses Fp_shanks now

  Removed
    1- obsolete undocumented functions oldidealinv, idealinv0
    2- buggy function hnfhavas (hnflll is a better alternative)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Done for version 2.1.0 (released 17/11/2000):

  Fixed
    1- non portable \e in es.c (pb with Sun cc)
    2- ^C while prettyprinter in action --> gp crash
    3- polresultant(a,b,x,2) --> b
    4- exp(log(1.+x+y)) --> division by 0
TH  5- support cygwin version 1
    6- TeXmacs interface
    7- GP parser codes (sqrtint, idealprimedec)
    8- trap (break loop) + NO readline + ^C at input time --> exit.
    9- qfminim(,,,1) --> nonsensical result (typo)
   10- SPARC + gcc-2.97 --> bug in addsmulsi (register reset too soon)
   11- trapping allocatemem() could crash GP

  Changed
    1- release PARI under the GNU GPL. Remove COPYRIGHT file, add COPYING

===========================================================================
Done for version 2.0.21 (released 27/10/2000):
  Fixed
    1- trap(gdiver2,a,1/0) <C-D> trap(,a,1/0); trap(gdiver2,a,1/0) --> crash
    2- lllgramintern could reduce a wrong lattice (after precision problems)
XR  3- not enough GC in bezout()
    4- use hnfmodid in ideallllred  (work mod I \cap Z, not mod N(I))
IS  5- C++ compilation problem (compl is a C++ operator + casts)
    6- factor(x^2 - 16810110*x + 62994937599000) --> division by 0
BA  7- Pocklington-Lehmer didn't stop factorisation after sqrt(N)
    8- exp(log(Pi+x+y)*1.) --> SEGV (still gives an error, but a decent one)
    9- factorff needed a prime field F_p where p was single precision
   10- more digits than were significant could be printed (ex: precision(Pi,1))
   11- rnfisnorm didn't accept vectors on Zk basis as argument
   12- [cygwin] fixed timer (always returned 0)
IS 13- function prototypes (missing 'extern')
   14- quadray(bnf, ...) didn't work when bnf.disc < 0. Could also return
       a relative equation over an intermediate field
   15- deficient argument checks: asinh(2*x-1), agm(1,1-x), zetakinit(2*x-1),
       idealinv( , wrongtype), nfnewprec([2*x-1]), thueinit(non-monic or
       degree 1), lcm(x, 0) rnfidealmul(2*x-1,0), galoisfixedfield(2*x-1),
       qfbnupow(2*x-1, 0), polred([x,x]), bezout(Mod(x,x^2+1),0),
       numtoperm(-1,0), polred(nf), idealhnf(nf,y+z), factorpadic(,y,),
       nfelftreduce, rnfsteinitz, idealappr(not an nf, ...): SEGV
   16- check variable numbers in algtobasis: nfalgtobasis(nfinit(P(y), x))
   17- factorcantor(x^4 - x^3 - 2*x - 1, 3) --> SEGV [typo!]
   18- matsupplement(non-exact entries): fixed zero test (--> |x| < eps)
   19- precision(I*1.) --> +oo (should be realprecision)
   20- global() could check uninitialized memory
   21- default(prettyprinter,"non-existent-file") ---> SIGPIPE and GP crash
   22- gamma(1+O(3^2)+x) --> SIGFPE
   23- typo in cxgamma (gamma(-4.1+Pi*I/2) --> exponent overflow)
   24- Odos/paricfg.h defined PARIINFO incorrectly
   25- inconsistenty t_POLMOD specification: Mod(x,y)+16 --> invalid object
   26- bnfsunit error (impossible I-->S) when large class group
   27- qfminim([;],...) / qfperfection([;]) --> SEGV
   28- idealpow(,,,1) only reduced at the end, not after each multiplication
   29- typo in zbrent (always used bisection)
BA 30- cotan(x) wasn't accepted
   31- wrong internal prototype for thetanullk (prec not taken into account)
   32- various bugs in gphelp -detex (??\a)
   33- trap + ^C + next would interrupt \r or read()
IZ 34- external prettyprinter incompatible with colors
   35- idealval used much larger numbers than necessary
   36- sqrtint very inefficient (computed with full precision all along)
   37- bnfisprincipal couldn't deal with some non-Galois fields
   38- listcreate allowed creating longer lists than GP could later handle
   39- INPUT colors was "leaking out" (affected status messages)
   40- idealpowred(, power > 2^32) --> wrong result
   41- when lines > 0, output driver didn't reset properly after overflow
   42- huge precision losses in bnfinit computations (--> truncation error)
   43- mateigen([1,2;3,4]) wouldn't work at default precision
   44- leftover debugging statements in gphelp -to_pod
   45- zeta(x) didn't always use the precision of x (contrary to the other
       trans. functions)
   46- some Warnings from MIPSPro 7.2.1 compiler (contributed by PM)
BA 47- gdiv(SER,POL) --> SEGV when POL has lgef < lg
   48- check relative pol is monic before calling a rnf* function
XR 49- cleaned up bnrL1 character computations
XR 50- round 4: possible problems when increasing p-adic precision
   51- stack corruption in mppgcd(huge t_FRAC, huge t_FRAC)
BA 52- abs(t_SER) not allowed
   53- nfdisc(non monic polynomial,, disc factorization) returned wrong answer
   54- rnfidealnormrel(rnfinit(nfinit(y^2-2),x),2) --> SIGBUS
   55- hardcoded paths in a few scripts (tex2mail, gpflog, make_vi_tags)

  Changed
BA  1- more efficient quadratic Hensel lift
    2- made ya optional in polinterpolate
BA  3- more efficient factorff when pol belongs to Fp[X] (based on Fp_isom)
    4- catch SIGFPE
    5- made poltchebi efficient
    6- write all real zeroes in exponential format (0e28) in format 'g'
    7- bnfsunit: try to compute S-units even when the class group is large
                 reduce class group generators
    8- 0.e N now inputs a real 0 of decimal exponent N (was N-defaultprecision)
    9- try to avoid errors due to precision loss (while computing archimedian
       components) in bnfnewprec/bnfmake
   10- restore \o2 to previous meaning, use \o3 for alternate prettyprinter
   11- normalized output of idealfactor (sort factors)
   12- better TeXization (\left / \right)
   13- allow color changes in error messages (when sample input is given)
   14- format for bnf[9] (new isprincipal)
   15- cleaned up isprincipal + bnfinit (small_norm, getfu, class_group_gen)
XR 16- added flag for D>0 in quadhilbert: if non-zero, try more modulii
   17- idealred: reduce huge ideals as Z-module first (using lllintpartial)
   18- TeXmacs interface

  Added
    1- library function zerovec
    2- van Hoeij's algo. for modular factors recombination (factor over Z[X])
    3- algdep for p-adic numbers
IZ  4- default values for 'colors' (light/dark) and 'prettyprinter' (tex2mail)
    5- hnflll implementation (old one was preliminary and didn't work at all)
GN  6- squfof implementation
    7- numerical derivation
XR  8- GP interface to hensel_lift functions (polhensellift)

  Removed
    1- quadrayimagwei, preliminary implementation to quadray(D < 0)

===========================================================================
Done for version 2.0.20.beta (released 07/06/2000):
  Fixed
    1- gp -p1e -->SEGV
    2- nfinit([x,1]) --> SEGV
    3- ensure stack large enough [allocatemem(1) painted user in a corner]
    4- make sure mpinl.o is linked (binaries may fail to build otherwise)
    5- make sure sqrt(Mod(a,b)) terminates
    6- memory leak with PARI pointers (issquare(4,&x))
    7- 'make clean' didn't affect doc
    8- Configure didn't detect some SuperSparc + Linux combination
    9- forprime (and friends) could crash when loop index was tampered with
   10- trap(, -1, (1/0)) == -1 ---> -1 (analyseur not reset)
XR 11- bnrstark initializations (incorrect when field not totally real)
   12- member functions not very robust [e.g. ellinit(e,1).roots --> SEGV]
   13- compiler warnings (gcc -O -Wall)
   14- trap() not robust enough in library mode (nested handlers)
   15- (x^2+3)/(2*x)*x --> invalid RFRAC
   16- factorpadic result used too high a precision (+improved handling of
       nonmonic polynomials)
   17- sqrt(Mod(0,1)) --> oo loop (+ improved a bit mpsqrtmod)
   18- no GC in norml2
IZ 19- tex2mail had difficulties with rational functions
   20- (rare) SIGBUS in quadclassunit(non-fundamental discriminant)
   21- g()=f()==0 --> syntax error
   22- } as last char of an input file (missing a final \n) caused problems
   23- ??keyword@ didn't work properly (pattern modified between chapters)
BA 24- bug in galconj.c:corediscpartial (could return half integer)
   25- factorff and ffinit "not random enough"
TH 26- Configure doesn't handle cygwin new directory structure
CW 27- polsturm(x,0,1) = 1 (should be 0)
   28- [library:] gentimer(3) didn't work
PW 29- various bugs in qfminim(,,2) [bound was rounded up + stack corruption]
   30- ellap(e,2) gave wrong result when 2 | e.disc
   31- factorint: isprime() used on factors even within smallfact()
GN 32- SEGV in mpqs main sieving routine (unsigned comparison)
   33- prevent polredabs from keeping small vectors accumulating in a subfield

  Changed
    1- renamed .DOC files to .txt (Explorer was getting confused...)
    2- moved MANIFEST to config/MANIFEST
IZ  3- meaning of flags > 1 in plothraw
IZ  4- output of \x (a bit more verbose)
    5- unified basic t_QFR routines (use exponential distance internally)

  Added
BA  1- Pocklington-Lehmer primality prover
BA  2- Fp_isom (library)
BA  3- Mod(a,b)^(c/d) for a,b,c,d integers
    4- flag to vecsort (decreasing order)
BA  5- function sqrtn

===========================================================================
Done for version 2.0.19.beta (released 17/03/2000):
  Fixed
    1- buffer overflow in ploth (when extrema too large)
    2- trap(,"") didn't work
IS+BA 3- various fixes necessary for g++
    3- prototype inconsistency in level1.h (evalexpo/evalvalp)
    4- trouble with pgcc -mk6 + variable k6 in elliptic.c
HC  5- nfnewprec(bnf) could contain objects of low accuracy
XR  6- check subgroup argument in bnrL1
    7- typo in ideal_two_elt (oo loop)
    8- pb with GNU as + preprocessor on Sparc
    9- incorrect result in matdet over Z[1/n] (Gauss-Bareiss) [gdivexact]
   10- solve(x=0,1,deriv(x)) --> SEGV
   11- ??' --> weird error
   12- generic SNF (polynomial entries) couldn't handle 0s on diagonal
   13- incorrect handling of 0 ideals in some functions
XR 14- typos in bnrL1
   15- bad input not handled in rnfcharpoly()
IZ 16- delay rounding in rectplot structures until plotting device
   17- Mod(1,x) / matid(2) --> incorrect object
   18- avoid getrusage on alpha (pb with gp-dyn)
   19- incorrect file inclusions when using gas on Sparc (-->undefined symbols)
   20- massive cancellations in zetak(nfz,) when current prec lower than nfz's
XR 21- bnrstark(): fixed inconsistency between 32bit & 64bit versions +
       check maxprime() before starting the computation
PW 22- hyperu bad input bug
PW 23- intnum(x=1,2,0) --> oo loop
   24- sin(x + y) --> error
   25- next(i > 1) didn't work (part of the last loop could be executed)
   26- typo in polrootspadic(p, 2, *) [singular case]

  Changed
XR  1- bnrL1 now takes a congruence subgroup as second argument
    2- allow some functions to modify bnf/bnr structures (matal + cycgen)
CB  3- modified TeX macros for pdftex
    4- have abs(t_COMPLEX) give an exact result if possible [abs(0*I) was 0.0]
IS  5- improved generic gcc compilation flags
    6- in qfbclassno(), compute in G^2 to get rid of cycli factors
    7- improved bnrdisc/bnrconductor

  Added
BA  1- function galoissubcyclo()
BA  2- (for now internal) function inverseimage_mod_p()
BA  3- optional arguments (vertical range) to plot()
IZ  4- `ticks' on hi-res plots
IZ  5- prettyprinter default and tex2mail file
BA  6- new function Fq_ker

===========================================================================
Done for version 2.0.18.beta (released 20/12/1999):
  Fixed
    1- wrong method chosen in isinexactfield for 0 polynomials
    2- stack corruption in sylvestermatrix(0,...): Mod(x,x)^-1 --> SEGV
    3- garbage left on stack in ginv(1 / n)
    4- typo: carreparfait --> gcarreparfait in nfiso0()
    5- for (A=1, 2, A = -A) --> SEGV
IZ  6- [gnuplot] couldn't set terminal as the first graphing operation
DE  7- typo in kernel/sparcv7/level0.S: err --> pari_err
    8- TeXmacs interface (use new protocol)
    9- call simplify() before applying GP '==' and '!=' operators
      Ex: x;n;k;m; (n+m)==(k+1-k)*(n+m) was false.
   10- sumdiv(N,...) required single precision N
BA 11- bound problems in nfgaloisconj()
   12- oo loop in do_agm()
   13- "Warning: in Gauss lg(a)=1..." from isprincipalall0
   14- specific error for precision problems with p-adic ell. curves
IZ 15- ploth() plots are 1/2-pixel off
BA 16- result was not always complete in nfgaloisconj()
   17- type(1/y, RFRACN) --> SEGV + check compatibility before applying type()
   18- made 'secure' safer. Confirm before write, prevent from changing 'help'
   19- gettime() called the wrong timer(): was reset in debug mode
   20- missing case (doubling) in apell1
   21- gmod(x, mod) replaced by gmul(x, gmodulcp(gun,mod)) in poldivres
       [obscure bugs when dividing complicated polynomials with mixed
        polmods/intmods].
   22- Make sure result is a t_POL before doing a setvarn in caract2_i()
   23- precision problems in ClxModulus (bnrstark()) [check leading term!=0]
   24- elltors() could miss some points: determine needed precision first
   25- clean up files after an error (not only under GP)
   26-  divisors(highly composite integer) --> "cryptic" error message
   27- 'make clean' wasn't thorough
   28- ellpointtoz(e, [0,0]) could correspond to the inverse point
   29- "ideals not coprime" in rnfsteinitz
BA 30- typo in Configure [CPP] (cc --> CC)
BA 31- member functions for galoisinit
   32- allowed power series in Mod(). Fixed cryptic error messages.
   33- precision problems in zsigne
   34- value of 'gzip' found by Configure overwritten in TOP_Make.SH
XR 35- precision loss in Round 4
XR 36- ensure that fundamental unit is computed in quadray (if D > 0)
XR 37- precision fixes in stark.c (inconsistencies 32/64 bit + early abort)
   38- bug in P*Q for polynomials over (non prime) finite fields if Q is
       defined over the prime field
XR 39- [stark.c]: bugs in RecCoeff3, reduced memory use in ComputeArtinNumber
   40- core dump on oo recursion under GP
   41- use appropriate precision in torselldoud (could be much too large)
   42- removeprimes(addprimes) didn't work
   43- (at least part of) numerical instability of LLL over R
   44- f() = bug(x, &y) ---> syntax error
XR 45- inefficiencies in ComputeArtinNumber for large modulus
HC 46- no GC in dirmul
   47- meaningless heap count for user functions
   48- setrand(16);quadclassunit(48893) --> oo loop
   49- rnfpolred(bnfinit(y^2+1),x) --> SEGV
   50- float overflow in polroots (e.g polroots(x^3 + 2^1024*x + 1))
   51- charpoly(Mod(1,x^2+1)) --> SEGV
   52- added GC in polsturm
BA 53- bugs involving rarely used type combinations in generic operations
   54- check x >= 0 in lllgramint(x)
   55- in rnfdedekind: use rnfhermitemod, not rnfhermite (slooow)
XR 56- updated factorpadic to use new Round 4
BA 57- nfgaloisconj: discrepancies between 32/64 bits architectures
   58- random(1 << 32) could have 32 bits
   59- missing newline in error messages on startup (reading .gprc)
   60- silent codeword overflows (e.g. O(x^100000))
IZ 61- updated gnuplot support
   62- x="a"; eval(x) --> error
   63- general flakiness with buffer handling under GP
       (Ex: input() + allocatemem --> SEGV)
   64- [1] == 2 --> error (instead of 0)
   65- lngamma(-0.106) --> SEGV
   66- quadray(-11,3) --> x^2
XR 67- typo in nilord2 (wrong value for modular reduction)
   68- unsafe division t_SER / t_SER with clonable components
   69- polroots(1E-28*I*x^2+1) --> bug in roots (conjugates)
   70- typo in cxlngamma [ lngamma(-7.4927-0.418564*I) --> SEGV ]
   71- polroots(polynomial of very small Norm wrt prec) behaved badly (SEGV)
   72- polylog(1, Mod(1,2)) --> SEGV
   73- zeta(22!/23) --> SEGV
   74- not enough GC in rnformax
   75- over-reactive 'secure' default (+ moved it later in default .gprc)
   76- sqrt(Mod(15,y^2+1) + O(x^5)) --> SEGV
BA 77- typo in isinexactfield
   78- sum(x=1,10, expr1; seq) : seq silently ignored
   79- ellan and elltaniyama didn't check their arguments
   80- simplify(t_POLMOD) could create invalid objects (mod not a t_POL)
   81- primes(-1) --> SEGV
   82- addprimes(0) wasn't rejected
   83- various inconsistant error bessages (e.g. factor("a"))
   84- estimate for the precision of unit embeddings in isprincipalall
   85- global("b") --> polvar corrupt
   86- hnfmod --> hnfmodid whenever possible
   87- check arguments in incgamc
   88- non-rectangular matrices could trigger a SEGV (in error msg!)
   89- qfminim(,,2) didn't like mixed t_REAL/ t_FRAC entries (typo)
   90- inconsistant spacing after GP error messages
   91- regrouped code between idealred and idealmin
   92- prevent 'install' in secure mode
DS 93- typo in bnfisnorm(,,flag > 1) [extraneous gtrans]
   94- don't reset pariErr in err_recover()
   95- highlevel.c had become dependent from gp.c
XR 96- incorrect output of quadray(D,,1) when D>0 and rayclass is trivial
   97- typo in lllall_trivial --> matkerint([0;0]) didn't work
BA 98- incorrect object for gerepileupto in gscalcol
   99- try to detect bad input (e.g quad. form not > 0) in (integral) LLL
XR100- typo in nffactor ("keep the value of i")
IS101- work around an obscure gcc bug (gcc-2.96, alpha-linux) in stark.c
  102- rnfcharpoly(nfinit(y^2+1),1,1) --> SEGV
BA103- tan(t_COMPLEX) gave bogus result
BA104- trace([;]) --> SEGV

  Added
IZ  1- [gnuplot] look up directory tree for gnuplot related files
    2- improved on-line help wrt to defaults and ambiguities
       (? default/some_default, ? some_default)
    3- library functions gentimer, genmsgtimer, get_timer
HC  4- optional argument to direuler (length of result)
    5- low-level kernel function for integer squarings (twice faster)
    6- error trapping in library mode and under GP
    7- break loop to investigate errors under GP
    8- "sprintf-rounding" under GP
IZ  9- string justification in high-res plot
IZ 10- bit operations ( bit[ and | or | neg | negimply | xor ] )
XR 11- add new flag value in bnrstark/quadray: try to find a better modulus
   12- Configure flags to indicate where gmp/readline library/headers are to
       be found

  Changed
    1- default binary produced by Configure -g is now static
    2- improved the heuristics in ellisoncurve
HC  3- extend the range of direuler (maxp was 2^16)
    4- trial divide by the "private primes" before the primality tests
    5- don't double stack automatically
    6- disable ff_poltype correction (for lack of decent finite fields) in gmul
    7- slight optimization to hnf / hnfmod (skip zeroes)
XR  8- nfsqff: choose a prime ideal with few factors + better heuristic bound
IS  9- default CFLAGS on linux-alpha
   10- improved factorcantor / factorff
   11- default multiprecision kernel is GMP if the library is installed

  Removed
    1- sunview "support" (didn't work, hard to test, X11 is a better standard)

===========================================================================
Done for version 2.0.17.beta (released 24/09/1999):

  Fixed
XR  1- typo in zarchstar (result possibly incorrect when more than two places)
    2- check_unit not severe enough ([;] --> session could die !)
    3- wrong error message when using global var as argument to user function
    4- typo in boundfact(t_FRAC) --> SEGV
    5- buchall: don't compute xarch if not needed
    6- remove limit on string size + silent overflow, e.g Str(10^5000)
    7- "break status" not checked often enough: [break, 1] --> SEGV
    8- rewrote errcontext (use print_text to fit messages on terminal)
BD  9- added workarounds against some MSVC annoyances (Windows version)
IZ 10- typo in Gnuplot.h
   11- typo in Configure ("2>&1 >/dev/null" replaced by ">/dev/null 2>&1")
   12- simplified incgam[23] + typo (mulrr --> gmul)
IZ 13- typo in LD_LIBRARY_PATH setting (benches)
   14- inconsistency in gadd(0., FRAC) (should give 0. if FRAC small enough)
   15- libraries/headers ordering inconsistent in Configure (report: IZ and KO)
   16- typo in ff_poltype [symptom: (Mod(1, y^2 + 1)*x + 1)*x --> garbage]
   17- qfbprimeform(4, [2]) --> SEGV
   18- overflow in  factorcantor(2*x^3+3*x^2+x, 2^31-1)
   19- memory corruption in apell1 + no garbage collection,
       rewrote the function to parallel apell0, replaced hashing by sorting,
       use Montgomery's trick, removed the p < 10^25 limit
IS 20- cc -64 warning in mp.c:vals()
   21- bad free in gp_expand_path
   22- extract([;], "..") --> SEGV
   23- not enough GC in hnfall
   24- recover gracefully when precision too low in lindep/algdep
IS 25- cleaned up unused variables, fixed some missing casts
   26- algdep(x) --> undefined behavior when x exact. Replace by decimal
       approximation
IS 27- C++ keywords (new, class) occurred as variable names
   28- arguments of ideallistarch not checked
   29- Mod(t_FRAC or t_PADIC, t_INT) --> garbage
   30- gcmp1(t_REAL) always false: polylog(2, 1) --> error
   31- (spurious) compiler warnings about variables used before initialization
   32- memory (possibly) freed twice in buchall + unsafe allocation of matcopy
   33- online help for matsnf not updated
   34- rnfequation() didn't check its arguments correctly
   35- removed spurious special case in compute_class_number()
   36- typo in the compatibility macros mpabsz / mpnegz (missing ;)
   37- "lost pointers in gerepile" in bnfisprincipal(Q, ...)
   38- bnfisprincipal(..., Pol(0)) accepted
   39- [Configure] Makefile name didn't necessarily match object directory
   40- zetak(nfz, integer + 0.) --> stack corruption
   41- for(i=1, ..., zetak(nfz, any complex number)) went slower and slower
   42- poltchebi(.,y), pollegendre(.,y) didn't work
   43- confusing "array index out of allowed range" message (e.g [1-0])
IS 44- fixed obscure compiler optimization bugs in smithall() and eint1()
GN 45- weird results in ellisoncurve() due to misguided precision heuristics
   46- typo in forvec([],...): readexpr() --> readseq()
   47- check arguments in ploth()
XR 48- rare bug in bnrL1 (wrong value!)
   49- precision problems in polredabs
   50- division by 0 in rnfordmax [typo in mymod()]
   51- removed all dangerous occurences of constpi/consteuler (cf 41-)
   52- typo in det() [forgot to divide by a pivot]
   53- divide by 0 error in lllgramintern (precision problem)
   54- suminf(k=1,suminf(j=1,.067^(k+j)/k^4/(k+j))) ran forever
   55- factor(2*x + 2) --> [2*x + 2, 1] (instead of stripping the content)
   56- (ultra-rare) stack corruption in mpqs_solve_linear_system()
   57- rl_refresh_line() prototype changed across readline's versions
   58- incorrect handling of INTMODs modulo integers of different magnitude
XR 59- matsnf(3 x 3 matrix, 4) --> SEGV
   60- some pathological bnfinit() computations (strive to get maximal rank)
XR 61- precision problems in nfsqff() [increase precision for T2-norm bound]
   62- time wasted checking generators of the form [x,0,...,0] in polredabs
   63- variables deleted too late in freeall()

  Changed
XR  1- modulus choice in bnrstark
    2- make sure that addii(x,y) returns gzero, not icopy(gzero)
    3- cutoff in ellap to use Jacobi sums (457 --> 100)
    4- pariputsf("%Z",(long)g): removed the casts (not needed)
    5- cleaned up hnfspec
    6- look for at least MIN_EXTRA extra relations in buchall
    7- simplified calling interface to hnfspec/add
    8  Used hnfspec in bnfsunit, changed the way S-units are found
    8- output of bnfsunit modified (removed res[3], made res[2] suitable
       for hnfadd)
    9- listput and listinsert now return the inserted element, not the list
   10- check_break_status rewritten: was very inefficient
   11- Used parser code DG whenever it was possible (moved reorder to init.c)
   12- faster isunit()
   13- added GC in expr()
   14- buchall(): increase subfactorbase without starting over
GN 15- minor tuning in pollardbrent() for huge integers (call ECM sooner)
   16- renamed directories dos -> Odos, o.xxx.xxx --> Oxxx.
       Moved win32/* --> Odos
OR 17- new version of pari.el
XR 18- new modular round 4 implementation (nilord2)
BA 19- improved algorithms in galconj.c

  Added
    1- an optional argument to next()
    2- MANIFEST
YU  3- support for FreeBSD ELF binary format
    4- file CVS.DOC
    5- support for Windows CE (Nigel Smart + coworkers)
BA  6- functions related to Galois theory: galoisinit, galoisfixedfield, etc
    7- [library] trivial function realun()

  Removed
    1- #define HIGHBITM1 (useless)
    2- files config/tar_[include | exclude] (obsoleted by MANIFEST)

===========================================================================
Done for version 2.0.16.beta (released 29/06/1999):

  Fixed
    1- paricfg.tex (needed to compile INSTALL.tex) missing if Configure is
       not run. Added a test in parimacro.tex
    2- non-portable casts in galconj.c
    3- 64-bit graph benches (extra spaces)
IZ  4- typos in plotgnuplot.c
    5- unnecessary plothsizes in "graph" bench (fails if no X server)
    6- typo in ff_poltype
IZ  7- check rectwindow in rectcopy and rectclip
IZ  8- /opt/local/lib missing in Configure's library path
IZ  9- [Math::Pari] needs pariErr->die _before_ pariErr->flush
IZ 10- wrong valence code for plotcolor, plotclip
IS 11- obscure inlining bug (pgcc 1.1.3 -O3) in stark.c:ComputeKernel0()
   12- gcc -E doesn't define __GNUC__. Add it explicitly to KERNELCPPFLAGS
   13- whatnow(sigmak) didn't tell the arguments have been swapped
   14- [1]~ * [[1]] --> SEGV
   15- lim=(av+ x * bot) >> y can overflow if large addresses are available
       (e.g Linux...). Use lim_stack() instead
   16- algdep(I,1), lindep([I,1]) entered an oo loop
   17- removed the maxHastad (= 50) limit in algdep/lindep
   18- typo in polrootspadic(,,1) --> SEGV
   19- GC not frequent enough in idealval
   20- in split_ideal (isprincipal), LLL-reduce first if ideal is big
   21- factorpadic(,,,1) didn't work anymore
   22- round 2 (= nfbasis(,2)) used too much memory
   23- idealval did not accept all types of ideals
GN 24- unsafe stack handling in auxdecomp
   25- polroots[mod|padic] returned a t_VEC, not a t_COL (as polroots)
   26- check coeffs of polynomials with coeffs in nf (rnf* functions)
   27- typos in polredabs0 (get_Bnf + nf_RAW in storeallpols)
BA 28- nfgaloisapply could forget to clean up the stack
   29- typo in gp_rl.c (rl_save_prompt <--> rl_restore_prompt)
DE 30- arch="sun4" non reconnu par Configure
   31- uninitialized variable (prec) in quadhilbertimag
IS 32- pari.el.in was not updated when gphelp was moved from miscdir to bindir
   33- rnfkummer(bnrinit(bnfinit(y^2-y-1),101,1),[1,0;0,2]) --> gerepile error
IZ 34- update gnuplot interface
      a) Strings were put too low in gnuplot terminal;
      b) Allow setting of output file sizes, as in plotterm("gif=300,200");
      c) Allow querying of possible output terminals, via plotterm("?")
      d) Update to newer Gnuplot-interface-layer (Gnuplot.h)
         allows compilation on Linux (stdout was bad as an initializer),
         corrects bugs in processing of terminal options
   35- in buchall, allow minfsb to increase before doubling cbach
       (bnfinit(x^4+5*239*x^2+5*239^2) couldn't be computed)
   36- bnfnewprec can't handle bnf = bnfinit(,2) --> SEGV (now, error)
   37- typo in pseudorem (didn't recognize 0 properly)
GH 38- weird bugs in thue() on alpha: typo int <--> long in thue.c
   39- bnrisconductor assumed moduli had small norm (< VERYBIGINT)
   40- bnfnewprec didn't accept imaginary quadratic fields ("missing units")
   41- inefficiency in zarchstar (VERYBIGINT --> BIGINT)
       (rnfconductor(bnfinit(y^3+972*y-12),x^2+x+1) ran forever)
   42- too much memory used in rnfordmax (+ removed some inefficiencies)
   43- try to recover in nffactormod if input not prime (SEGV)
   44- SEGV in nffactormod if degree(pol) > 100
   45- factornf(p(x), q(x)) was accepted (and produced incorrect objects)
   46- nfisincl / nfisiso made use of the bug above
   47- subgrouplist(bnr) with trivial ray class group --> SEGV
   48- background color was assumed to be "white" (by gphelp and gp)
       Made it "transparent" by default
   49- pages shifted by 1 in User's Manual's table of contents
   50- Mod(x, x^2+1) + x return Mod(2*x, x^2+1), not x + Mod(x,x^2+1)
       (fixed gadd, gmul, gdiv)
   51- for certain flag combinations buchrayall unsuitable for gerepileupto
       (+ cleaned up the code)
   52- ^C in smithclean corrupt existing objects
   53- silent overflow in qfbhclasso
   54- nfreducemodpr didn't check its arguments
   55- confusing error messages when precision too low in initell
   56- polx[0] modified in nfsubfields(P(y))
   57- various memory optimizations in bnrstark
   58- incorrect debugging output in calc_bloc (at \g6)
   59- rare memory corruption when garbage collecting in mppgcd
   60- type t_STR not treated correctly in changevar
   61- C-long overflow in ellan
   62- memory use in the incgam* functions
   63- bad input bug: qfperfection(indefinite matrix) --> SEGV
   64- mateigen dropped some eigenvectors when precision was too low

  Changed
    1- err() --> parierr() [conflict with system library in Redhat 6.0]
    2- use Doud's algorithm in elltors [initial patch: HC]
    3- new (internal) function get_mul_table (for nfinit, padicff)
    4- disable LD_LIBRARY_PATH before running benches
    5- strtoGEN() --> strtoGENstr() + added flag
    6- optimized stack usage in pollardbrent (in place)
    7- don't try to compute units in buchrayall if bnf doesn't contain them
    8- simplified misc/gprc.* (esp. colors)
    9- use C long to keep track of exponent in regula
   10- src/kernel/sparcv7/level0.s --> level0.S + include preprocessing stuff
   11- extended matsnf flags: immediate cleanup (backward compatible)
   12- arguments swapped in veceint1
   13- allow @ markers (??keyword@) in extended help (was apropos only)
   14- do all computations in mppgcd in place (as in Changed-6)
OR 15- new pari.el (cf emacs/pariemacs.txt)
   16- search multiple lines in apropos extended help (???key)

  Removed
    1- make test duplicated the "make bench" computations. Removed the
       test and dotest targets
    2 -veceint1() function. Can be reached in library mode or using a flag to
       eint1

  Added
    1- default 'secure'
    2- optional flag to Str()
    3- expand environment variables in filenames
    4- TODO file
    5- man page for gphelp
    6- Trivia section in the pari/gp man page

===========================================================================
Done for version 2.0.15.beta (released 21/05/1999):

  Fixed
    1- ?? (TeX mode) didn't work anymore
    2- rl_save_prompt incorrectly detected on a.out systems
    3- allow extra_relation() (bnfclassunit) to abort
    4- allow cbach to double once more before triggering PLEASE REPORT
       (introduced in 2.0.14)
    5- check for non-monic pol in smallbuchinit
    6- vecex<TAB> --> SEGV on some Linux systems (typo in match_concat)
    7- exceedingly rare but possible overflow in forvec(, flag == 1)
    8- factorff(x^7-3,3,y^3+2) --> SEGV
DC  9- ghpelp doesn't exit when problems arise in TeX processing
   10- made idealprimedec random again (also use det_mod_P_n to compute norm)
   11- inefficiencies in nfeltval (computing norm is a waste of time)
   12- did same prime twice when collecting garbage in modulargcd (=> error)
   13- ffinit(huge prime,) output a weird error message
   14- highly inefficient memory use in nfsubfields
IS 15- [cygwin] typo in Makefile generation
   16- file leak in mpqs (COMB)
   17- allow prime_to_ideal to be called with a t_INT argument (for quadray)
   18- typo in nf_shanks (calling Fp_shanks with wrong parameters)
   19- polun (possibly) destroyed in bnrstark
IS 20- keep logfile in synch with screen output
   21- reset DEBUGLEVEL correctly on ^C (was sometimes set to 0)
   22- bnrstark does not require anymore the modulus to be the conductor
   23- check bnrstark's arguments in the right order (bnrstark(1,0) --> SEGV)
   24- inefficiencies in idealval (removed element_mulh)
   25- idealadd unsuitable for gerepileupto
HC 26- quadray should work in all cases now and give better polynomials
XR 27- bnrstark should return smaller polynomials
   28- very inefficient pseudo-remainder routine (psres)
   29- forstep(x=a,b, 1/2, ...) --> SEGV (signe -> gsigne)
IS 30- [Cygwin] Configure fix (use $HOSTTYPE instead of uname -m)
   31- polcoeff(a*x^-1*y^-1+O(x^2)+O(y^2),-1,y) --> 0
HC 32- (false) accuracy problem in mpsc1 ("truncation error")
   33- don't use mpqs_diffptr in mpqs_find_k, set it in mpqs_create_FB
   34- (very rare) "precision loss in truncation" in buchall
   35- C-long overflow in zarchstar
   36- C-long overflow in zprimestar
   37- (old versions of) GNU as not recognized correctly
BA 38- ?? in TeX mode could not process some sections (missing macros)
   39- factor(polynomial with t_PADIC coeffs) didn't work (factorpadic
       assumed coeffs were integers)
   40- T=[1,x; x,1]; charpoly(T,Z) produced object with wrong variable
       ordering
   41- polrootsmod(x^n,p) could corrupt the stack
   42- Warnings/errors from HPUX and AIX native compilers
OR 43- many problems in the emacs interface pari.el (introduced in 2.0.14)
   44- factorpadic treated only monic polynomials
   45- gphelp TeX mode (use general macros instead of a specific file)
   46- under readline, input lines of length > 2048 could trigger SEGV
   47- more thorough check in checkbid (accepted prime ideals->SEGV)
GH 48- possible stack corruption in thueinit(totally real field)
XR 49- various problems in bnrstark (oo loop in fincke_pohst)
   50- in doc/Makefile: removed GNU-style make macros + put a missing TAB
   51- sloppy garbage collecting in hnfperm
   52- HPUX+cc: work around a compiler bug (wr_float)
   53- warnings in make_emacs_tags (perl5.005)
   54- Configure --static should not disable install()
   55- in rare cases reduction not complete in lllgramall (off-by-1 error)
   56- addshiftw (polynomial case) could produce non-normalized polynomials
   57- take content into account in modulargcd as in srgcd (not normalized)
GH 58- uninitialized variable in poldisc0 (purify warning)
   59- inefficiencies in round 4: modular computations [more needed!]
       (starting from a patch by DF+XR)
GN 60- lllintpartial did not output the right matrix
   61- huge memory leaks in bnrstark
   62- signed int overflow in allocatemem
   63- parisize (local to gp/gp.c) not updated properly
   64- *sol not properly initialized in subresall
   65- in idealpowred, check whether |n| < 16, not n < 16 (would slow down
       bnfinit a lot when class number is large)
   66- polrootsmod(x^6-10,25) --> SEGV (now error message)
   67- SEGV when renormalizing zero series in gdiv
XR 68- unify precision choice in bnrstark (4 different formulae used...)
GN 69- oo loop in mpqs (64bits machines + harsh compiler) when more
       factors were found than were hoped for (1 <--> 1L)
GN 70- SIGFPE in buchall (double didn't fit in 32-bit integer)
   71- also check sign in real0 (internal: called by gauss_pivot)
   72- use current realprecision in plot() (was fixed: 28 digits)
   73- memory use in subgrouplist(bnr)
   74- in bnfcertify: "Too many iterations in isprincipal"
   75- auto detect precision in quadhilbertimag ("overflow in I+R")
   76- error message numbers in src/kernel/m68k/mp.s
   77- polroots(x^3-x-422!) --> "impossible R-> dbl conversion"
   78- not enough modular reductions in buchrayall (bnrinit)
   79- technical argument in quadclassunit not read correctly
   80- factor(x^3-1 + 0.*I) --> gerepile error
GN 81- gp -p (close to a p^2) --> p possibly missing in the prime table
   82- until narrow class group in quadclassunit is implemented, non-zero
       flag raises an error
IZ 83- some code numbers in functions_basic (for Math::Pari)
   84- precision problem in initell (AGM)
   85- "impossible assignment I-->S" in ellrootno
   86- missing break in poltype (factor)

  Changed
    1- ?? (no arguments) opens the users'manual in xdvi
    2- print readline version in header on startup
    3- compute multiplication table first in element_mulvec[row]
    4- nf[5][7] is now stored in two-element form (faster ideal inversion)
    5- install gphelp in BINDIR, not MISCDIR
    6- simplified output of trivial matrices
    7- replaced square_free_factorization by mysquare_free_factorization
    8- call LLL before using idealtwoelt
GH  9- choose random elements in idealtwoelt, and allow bigger ones in two_elt
   10- cleaned up lllgramall/lllgramintern + give quality ratio as argument
   11- in rnflllgram, try to survive lllgram errors (findmin)
   12- simplified rnfpolredabs (simple interface to polredabs). Should be
       much more efficient
   13- replace many gdiv by 1 ginv + many gmul in sqred1intern
   14- optimized polredabs (always do the initial polred now: it is for free)
   15- more efficient ideal multiplication in random_relation (bnfinit)
   16- library names nfhermite[mod|basis] <--> nfhnf[mod|basis]
   17- subgrouplist function (use Birkhoff algorithm)
   18- improve recovery in lllgramintern
   19- improved checkgenerator in polredabs (look directly for double roots)
   20- for consistency, return S-units in t_POL format (as fundamental units)
IZ 21- revamp gnuplot autodetection by Configure
BA 22- nfgaloisconj(nf, 4) uses Allombert's algorithm instead of Kluners's

  Added
    1- install-doc target
    2- make install makes a symlink pari.1 --> gp.1
    3- ??tutorial/refcard opens tutorial/refcard.dvi in xdvi
    4- posibility to extract the complement in vecextract
HC  5- Ducos's subresultant algorithm (polresultant(,,2))
HC  6- accept a "vector of steps" in forstep
    7- examples/classno.gp
XR  8- new function bnrL1
    9- new function gdivexact (used in subresultant, Gauss-Bareiss...)
   10- new function bnfnewprec
   11- optional argument to \l and \e shortcut
   12- nfinit,polred[abs] accept input of the form [pol, HNF basis for Z_K]
   13- q-Pascal triangle (matpascal(n,q))
   14- file src/basemath/subgroup.c, new function forsubgroup()
IZ 15- function plotclip
IZ 16- new file examples/taylor.gp (nice example for plotclip)
BA 17- new file galconj.c

===========================================================================
Done for version 2.0.14.alpha (released 05/03/1999):

  Fixed
    1- factormod(2*x+1, 2) --> "factor for general pol. not implemented"
IK  2- gphelp could leak temporary files
BD  3- for native Win32 build: buffer overflow in get_home, incomplete
       paricfg.h, typo in try_pipe (#endif misplaced)
    4- nfsubfields: could miss subfields if index > 1
    5- removed 3 useless setrand(1) in subfields.c
    6- rare and obscure memory bug in inverseimage (lost pointers in gerepile)
    7- memory bug in factorpadic4 (prime not copied before result)
    8- memory consumption in round2 (allbase)
GT  9- m68k version: duplicate symbols from mp.c
IS 10- Cygwin: in mpqs.c, open files in binary mode (otherwise fseek goes crazy)
   11- bnfisprincipal().gen gives the expected answer
IZ 12- signatures for Math::Pari in highlvl.c / init.c + GNUPLOT
       set-output-file problem
   13- if we think readline needs libiberty, check whether it's installed first
DB 14- PowerMac: header inclusion in highlvl.c, lround def'd in system headers
XR 15- rnfkummer makes sure to return an integer
XR 16- rnfconductor accepts polynomials with rational coeffs
   17- polredabs + internal precision change --> nfnewprec forgets nf[5][1]
   18- don't log lines twice when pariecho is set
   19- glitches in content() (e.g content("a") --> SEGV)
   20- get_sep(2) reacted incorrectly to empty strings
   21- rootmod could destroy its argument
   22- Fp_pow_mod_pol(x, 1,...) should return gcopy(x), not x
   23- galoisconj1 computed wrongly the precision needed (+ prototype change)
IZ 24- remove __OPTIMIZE__ dependence (define GCC_INLINE instead)
   25- off-by-1 error in apell1
   26- misleading error message in minimalexponent()
XR 27- in nffactor, forgot to update precision when increasing exponent
       (+ various typos)
   28- sparc + non-gcc --> kernel2 possibly not included: compilation failure
   29- when echo is set don't print prompt if line is empty
   30- ellpointtoz sometimes return -x instead of x
   31- gp -b 1 --> hangs gp
DE 32- many glitches in manual
   33- mathnf(x, 3) when x hasn't maximal rank (SEGV)
   34- differences in buchall 32bit/64bit (PRECREG too high. bnfinit(x^13-6))
   35- various inefficiencies in nfshanks ("module too large in nfshanks")
   36- memory leak in buchall (= bnf*)
   37- "not a definite matrix in lllgram" after a call to bnf*
   38- typo in factorff(x^3+2,3,y^2+1) --> SEGV
   39- [internal] missing tags (e.g zprimestar) after make ctags
   40- idealstar(*, big prime) --> cryptic error msg (more tolerant now)
   41- have Mod(0,1)^-1 return Mod(0,1) (fixes znstar(prime))
   42- ginv(-1/2) --> 2
   43- heap leak when using local()
   44- overflow in addssmod
   45- changed the syntax of round()
   46- sqrt(1. + O(x)) --> oo recursion
IZ 47- don't create GP variables when expanding strings
   48- internal variable 'parisize' not properly updated after allocatemem()
IS 49- config/display didn't work properly with ActivePerl
IS 50- Configure didn't handle most recent Cygwin
   51- polinterpolate([],[]) --> SEGV
   52- adapted gp_rl.c to readline 4.0
   53- glitches in whatnow database (new file src/gp/whatnow.c)
   54- all warnings from gcc 2.8.1
   55- uninitialized tetpil in gscal() (bnfreg(x^2+1))
   56- precision problems in polgalois (degree > 7)
   57- config/locatelib prompted a lot of useless work (returning too many
       libraries) and could pick up the wrong library
   58- very rare bug in nfbasis (discriminant ok, but wrong basis)
   59- quadclassunit: make sure sub factor base is big enough (oo loop)
   60- more flexible "colors" default (initial work IZ)

  Changed
    1- x.fu outputs polynomials (as all bnf* functions), not polmods
    2- improved mppgcd (including vali)
    3- improved division vector/scalar
    4- \x to print a * in front of out-of-stack moduli (t_[INT|POL]MOD)
IZ  5- better commandline usage message
    6- don't buffer log messages going to pari.log
    7- accept [nf, t_POLMOD] where nf is expected
    8- poldisc() and quadgen() accept an optional variable name
    9- when defining user function check for duplicate variable names
   10- [internal] is_entry always uses function_hash (use is_entry_intern)
OR 11- pari.el updated (see emacs/pariemacs.txt)
   12- removed shiftl from lgcdii
   13- use roots_to_pol in polgalois
   14- precision heuristic in gauss_get_prec
   15- cleaned up lllall and lllgramall
   16- sort the output of nffactor, nfroots, factorff and factornf
   17- nfgaloisconj now guaranteed to find all conjugates (use nffactor)
   18- Removed flag 1 in nfisisom/nfisincl: function checks its arguments,
       and uses the best algorithm (both guaranteed complete). Changed the
       names (nfiso/nfincl) in library mode to match GP usage
   19- gerepile(ltop,lbot,0) no longer returns ltop - lbot
   20- improved floor and round(t_FRAC)
   21- removed some duplicate code from nffactor
   22- passing a pointer to GEN in a GP funciton now explicitly requires an &
IZ 23- more verbose error messages for online help
   24- increased a bit poltschirnaus's period
   25- DOS version: don't use more for external help
   26- cleaned up buchall code
   27- removed unnecessary gres from polarit1.c:to_fq()

  Added
    1- apropos command in gphelp (-k switch), ??? under GP
    2- function global()
    3- function gp_variable to use sums, etc in library mode
    4- [internal] new functions mulmat_real
    5- new functions gerepileupto[leaf|int]
    6- function znlog()
IZ  7- added default(color, "yes" / "no")
    8- --static flag to Configure
GH  9- inline alpha assembler (gcc specific)

  Removed
    1- isinclfast/isisomfast
    2- rounderror

===========================================================================
Done for version 2.0.13 alpha (released 14/12/98):
  Fixed
IK  1- Configure hangs on FreeBSD systems
RD  2- Roland's patch (2.0.11: Fixed- 42) had been incorrectly applied
    3- stack corruption in glcm (if operands > 10^155)
    4- index wrap-around in polsubcyclo (n > sqrt(2^31))
    5- incorrect placement of strings in psdraw
    6- memory corruption in rhoimag0
    7- fix up memory debug mode (\gm) when switching to alternate stack
    8- memory corruption (new_chunk + mulii) in gmul/gdiv (t_FRAC)
    9- escape chars in GP strings sometimes parsed twice (e.g Str("\\") --> "")
   10- nfinit(x^18+16) --> impossible inverse mod(0,2) (bug in eltppm()
       introduced in 2.0.12)
   11- weird SEGVs due to variable handling (changed the 'bloc' structure)
   12- moved highlvl.c to src/gp (libpari was missing symbols from plotport)
   13- polcyclo ignored its second argument (introduced in 2.0.12)
TP 14- minor fixes in paridecl.h (poldivres, gredsp: C++ compiler exits)
HC 15- still sign problems in resultant (see 2.0.12: Fixed-58)
   16- (Solaris):GNU ld doesn't like empty object files: remove kernel2.o
IZ 17- make bench forgot to treat the install() BUG in a special way
   18- factor(x^2 + I) --> SEGV (also with t_QUADs)
   19- factornf(x^3+1,y^2-1) --> stack doubling (now output error msg)
IZ 20- for Math::Pari fix valence of factormod()
IZ 21- outfile rename pari_outfile (conflict with gnuplot headers)
   22- DEBUGLEVEL could be modified and not reset upon interrupt
IK 23- make perl -wc gphelp happy
   24- incorrect use of gettime() in the library (nffactor) --> wrong timings
       (in particular for the 'nfield' bench)
   25- polred/polredabs used different types for output. Made both t_VEC
   26- remove duplicate polynomials in polredabs(x,4) and polred
XR 27- precision fixes in modules/[nffactor|stark].c
   28- in compatible mode, \precision didn't work anymore
   29- typo in Round4 (case "p small" and "p huge" were swapped)
   30- incorrect prototype for conductor in compatible mode
   31- factor((x^2-1)/2) --> SEGV (factpol assumed integer entries)
   32- memory usage in Round2: nfbasis(*, 2) (also cleared some inefficiencies)
IK 33- typo in primitive_pol_to_monic
   34- deplin did not check its arguments
   35- quadray() assumed variable "y" was not in use

  Changed
    1- glength() returns a C-long integer
    2- in hnfmodid(x,d) reduce mod d immediately
    3- allow vector(n), and matrix(n,m)  (filled with 0s)
    4- under GP, wait for input if line ends with '=' (cf \)
    5- wait for input when a line ends with an '=' sign
    6- modified extended help to (potentially) search the whole manual
    7- in nfdisc, specific error message if discriminant is 0
    8- use divide_conquer_prod() in factorback()
IZ  9- in test suite, add setrand(1) in front of poltschirnaus
IZ 10- M-( bound by default
IZ 11- improved gnuplot support
   12- improved gcmp[1|_1](t_REAL)
OR 13- new pari.el (see emacs/pariemacs.txt)

  Added
    1- members e, f, p, gen for prime ideals
    2- mathnf([M, M2]) computes mathnf(M), updating M2 (equivalent to
       v=mathnf(M,1) then M2*v[2], but much faster if M2 is small or over a
       finite field)
    3- local() keyword for user function definitions in GP
IZ  4- new functions plotfile(), plotpointsize()
IZ  5- splines for ploth (flag 256)

  Removed
    1- \k metacommand

===========================================================================
Done for version 2.0.12 alpha (released 06/11/98):

  Fixed
    1- GNU as incorrectly treated by Configure
GN  2- various fixes in mpqs.c (incl. file descriptor leak)
GN  3- [From 2.0.11- Fixed 14] floating point exponents: 1E1 --> possibly 0.1
    4- 1 % Pol(2) still wasn't right [cf 2.0.11- Fixed 31]
    5- src/test/dotest for DOS boxes (running sh)
    6- removed unreachable err() in factor()
    7- system() is defined under EMX, so make it available for DOS
    8- possibly use / as path separator under EMX, check COMSPEC and EMXSHELL
    9- compatible = 3 downcased all the following lines in gprc and caused
       incorrect behaviour of preprocessing statements
   10- unified default commands + better checks (e.g: default(log,0)->SEGV)
   11- memory leak in gp_main_loop: bufferlisit wasn't reset on error
   12- gptimer() not initialized properly if ^C was first command
   13- extra space (sometimes) output by command line completion in DOS
       version
   14- modifying histsize could corrupt the history stack
   15- incorrect error messages in gsqr
   16- not enough garbage collection in rootmod (polgcdnun)
TP 17- compilation using cc -64 on 64-bit SGI
IS+GN 18- "(hit return to continue)" message did not flush stdin
GN 18- ECM rewrite
   19- incorect absi_cmp in buch3.c
   20- useless garbage collecting in sqred2
   21- O(1)^(1/2) --> SEGV
   22- forvec(i=[],...) --> SEGV
GN 23- deriv(x*y, y) --> 0
GN 24- inefficient GC in ispseudoprime()
   25- fixed some (not all) compiler warnings (char * --> unsigned char *)
   26- exp(too large number) now gives a meaningful error message
AW 27- getrusage still not detected on FreeBSD 2.2.5
GN 28- off by 1 error in initprimes() (--> not enough calculated primes)
   29- inefficiencies in factor(t_POL)
HC 30- bug in rnfelementabstorel for Mod(scalar, t_POL)
HC 31- typo in gaussmoduloall
   32- idealred(principal ideal) always returned an archimedean part
HC 33- idealpowprime wrong for negative powers
   34- typo in binomial(n,k) (wrong answer if n<=k)
   35- online help for polinterpolate
   36- incorrect garbage collecting in quickmulii/quicksqri
   37- reformatted the output in test mode (gp -test)
   38- polroots((x-7)*(x-8)*(x+16)) took far too much time
   39- ellap assumed ell was given in characteristic 0
IZ 40- outlook of plot function (better labels, better choice of chars)
RD 41- when factoring over a non prime finite field and found a p-th power,
       forgot about Frobenius
GN 42- rare memory bug in ellfacteur
   43- gscalmat was not suitable for gerepileupto
   44- polredabs(,2) didn't handle non-monic polynomials
   45- check for various overflows (x ^ 1000000, etc.)
   46- printtex(I) --> missing closing brace
   47- setisset() did not check that elements were strings
   48- typo in gdiv(t_POLMOD, t_POLMOD) with different variables
KO 49- missing ; in level1.h (Windows specific code)
   50- forprime(p=0,10,) indeed started at p=0
   51- (cf 2.0.11 Fixed-1) put back 3 cgeti in galois.c (were necessary)
   52- factorpadic could overstate the precision of the result
   53- (very) rare memory corruption in allhnfmod (when cleaning up)
PM 54- prototypes in paridecl.h (fussy IRIX compiler), cc -64 in MACHINES
   55- factormod implemented for all primes (p = 2 and p > 2^31 called
       factorcantor which was much slower)
   56- check for unsuitable input in [factor|roots] (SEGV for multivar. pol)
   57- polresultant sometimes gave the wrong sign
   58- extraneous space in err(impl,"") (= "sorry,... not implemented")
   59- aliases treated incorrectly during error recovery (--> obscure bugs)
   60- obscure bug when normalizing rational functions with real coeffs
       (corrected content())

  Changed
    1- paricfg.h in dos and win32 extracted by Configure before the release
       (to get version number right)
    2- GPRC logic: try $GPRC, then look in $HOME, /etc (/ and C:/ under EMX)
    3- make sure the output of pari_unique_filename() doesn't exist already
    4- use a stack of files to gracefully handle errors/interrupts without
       leaking file descriptors
    5- replaced fixed-size buffers by dynamically allocated ones (es.c/gp.c)
    6- rename INSTALL.QUICK --> INSTALL.DOC (updated)
              Changelog --> CHANGES (looks better under DOS)
    7- mention ?12 in the header
    8- use ; (instead of :) as PATH separator under DOS, OS/2 or Windows (for
       drive letter)
GN  9- ECM tunings
   10- check for overflow in cget* (instead of silent wraparound)
   11- gp_main_loop cut into (improved) pieces
   12- simplified normalizepol
   13- Warn when trying to replace an existing function with install
       (previously error)
   14- new function mpcopy. replaced some inlined function (rcopy, absi,
       absr, negi, negr) by compatibility macros
   15- gphelp now uses GPDOCDIR and GPTMPDIR
   16- improved rational arithmetic by computing smaller gcds (gredsp removed)
GN 17- improvements in MPQS (use less memory, count relations precisely)
   18- text-mode (non-TeX) extended help printed screen by screen
   19- retuned integer multiplication, and made polkaramul the default
       polynomial multiplication
XR 20- stark.c rewritten
IZ 21- updated the pariperl interface
   22- improved handling of t_INTMODs (less GC)
   23- improved (a lot) factoring/root finding for intmod polynomials
   24- modified poldivres to avoid computing remainder when useless
   25- removed inefficient shiftl/shiftlr from the kernel
   26- from the same sources, Configure can now simultaneously run on
       different architectures
   27- polynomial factorizer now sorts the factors (increasing degree)
   28- ?an_obsolete_function now calls whatnow
   29- .pol operates also on t_POLMOD
   30- random() argument can have arbitrary length
IZ 31- with gnuplot, pick a sensible terminal when X11 is not around
IZ 32- change valences for use with Math::PARI
IZ 33- various interface patches (new file highlvl.c, different prototype
       for foreignAutoload...)
   34- optimized permute()
   35- setrand, getrand, getstack, gettime return a C long, and not a GEN
   36- pari_randseed no longer global. Don't reset random number generator
       when entering certain functions
   37- improved smallvectors() (correcting the "not enough storage" bug)
   38- improved computation of special polynomials ([sub]cyclo,tchebi,legendre)
   39- read() and extern() are timed as a whole now
   40- check if LONG_IS_64BIT is correctly defined in pari_init (in case we
       include the wrong pari.h)
GN 41- use Lehmer-Jebelean to compute inverse mod p (TODO: extended gcd)
   42- moved subcyclo() to bibli2.c
   43- improved polredabs, suppressed flag 8
   44- improved ground(), case t_REAL
   45- modified the internal SMALL nf structure (add matrix M, for polredabs)

  Removed
    1- doc/Makefile.SOS, since make should succeed even if Configure failed
    2- many error messages from the analyzer (referer*, trucer1,
       matvecter...), better handled by talker2
    3- obsolete test %_ in bench
    4- polkaramul(), which is now the default multiplication
    5- factmoder error message
    6- obsolete function polredabsfast

  Added
    1- `pipes' for DOS running EMX, i.e extern() and extended help are
       available (perl needed for the latter)
    2- file handling functions pari_fopen, pari_fclose, pari_unlink
    3- new default `debugfiles'
    4- file README.DOS
IZ  5- target etags in top Makefile
    6- target ctags
IZ  7- gnuplot support
HC  8- elliptic functions package (ellzeta, ellwp, ellsigma)
HC  9- quadray function, extending quadhilbert
   10- files src/basemath/polarit3.c and src/gp/highlvl.c
   11- user-defined member functions
   12- possibility to choose sizeof(long) at Configure time when the
       hardware suports it (eg. MIPS)

===========================================================================
Done for version 2.0.11 beta (released 30/07/98):
  Fixed
    1- removed all dummy cgeti (--> new_chunk)
    2- stack corruption in gcarreparfait (t_INTMOD)
    3- incorrect Fq-loop in apprgen9
    4- removed useless normalize in gdivgs, gdiv
    5- some {} Warnings from gcc -Wall (unjustified, but doesn't hurt)
    6- incorrect zero series return by deriv
    7- gaffsg(, t_PADIC) misused the valuation (symptom: deriv((1+O(2^2))*x^2)
    8- online help for ellinit
GN  9- default gp built without X11 in presence of some versions of xmkmf
   10- ggval: zero series + simplified the code in there
   11- subst(O(q),q,x) --> O(q)
   12- newtonpoly did not treat correctly zero coefficients
IK 13- getrusage incorrectly detected (at least on Linux/FreeBSD machines)
   14- constante() used far too much memory (+ an int should have been a long
       + an lg should have been an lgefint). Reading in a huge bnf needs much
       less memory now
   15- y[2] checked in divri instead of is_bigint (see 2.0.10, Changed 2)
   16- powgi, default case: missing gcopy + incorrect gerepilemany if y==NULL
       Also, uniformized random GC with gpowgs
   17- stack corruption in hil(x,y,p) when typ(x) > typ(y)
   18- SEGV if DISPLAY was unset and hi-res routine under X11 is called
GN 19- ispseudoprime(negative integer)
   20- removed -static from the CFLAGS of profiling version (didn't build)
   21- linear algebra routines involving polynomials with real coeffs
   22- compiles properly under DOS + EMX
GN 23- Warnings from C++ compiler (include unistd.h and sys/ioctl.h where
       needed)
   24- znprimroot(0) --> oo loop
GN 25- various fixes in mpqs
GN 26- add safety parentheses to macros in paricom.h
   27- polroots needed too much precision (two extra words)
   28- factor(1. * x + I) ---> rubbish or SEGV (bug in polynomialtype automat)
   29- possible address wrapparound in gerepile* (cast to ulong)
   30- in gerepile: useless special case for t_SER
   31- Pol(1) % 1 returned 1, not 0
   32- matdet([x1,1,1/x1; x2,1,1/x2 ; x3,1,1/x3]) returned wrong result
       (call to gdeuc should have been gdiv in all cases in det())
   33- SEGV in powmodulo (access garbage pointer just before exiting)
GN 34- various problems in rho and mpqs

  Changed
    1- simplified detint, fibo
    2- simplified GC and optimized gmul: t_SERxt_SER, t_POLxt_POL, and gsqr
       (same types)
    3- streamlined binomial
    4- replaced all abusive cmpsi by the relevant egalii
    5- prototype for error types [gmuler|gadder|gdiver][fi], assign[ri]
       using new function type_name
    6- uniformized the test suites (make test*,bench,...)
GN  7- add random GC in mppgcd. Use modified plus-minus algorithm (new cgcd)
    8- format of bench files (to reduce size)
    9- cleaned up factor and polynomialtype
   10- matdet tries to return a significant 0 when called with a
       non-invertible argument, e.g
         matdet([1+O(3),1+O(3);O(3),O(3)]) --> O(3), not 0
   11- made the output of make bench/test slightly more informative

  Removed
    1- mpkaramul
    2- error messages expter1 and gaffer13

  Added
    1- misc/gprc.dos a sample gprc for DOS boxes
    2- Configure --prefix=dir is now recognized (in addition to -p)
===========================================================================

Done for version 2.0.10 beta (released 09/07/98):
  Fixed
    1- integer factoring engine (ECM): sisprime killed N
XR  2- file closed twice in MPQS
GN  3- bad argument checking in [next|prec]prime
BD  4- warnings from MSVC compiler
    5- warnings from purify (vpariputs + puissii)
    6- sample program and Makefile in examples/
    7- v=...; forvec(a=v, v=...) ==> SEGV
LG  8- support for HP running NextStep
GN  9- have checkmemory (in cget*) check for overflows
LG 10- avoid a bug in cc compiler (version 4.2) under Solaris (in factmod())
LG 11- some missing prototypes and typecasts (for C++)
GN 12- add LOCAL_HIREMAINDER in mulssmod (factor(17!+1) => SEGV on some PCs)
   13- non portable pari_is_rwxdir
GN 14- lots of typos in the documentation

  Changed
GN  1- add debugging output to ECM
    2- forvec implementation (+ new flags)
GN  3- rewrote the integer factorizer (use Pollard-Brent + improved ECM +
       new MPQS code from 2.0.9)
    4- disabled pari-matched-insert under Emacs
    5- reorganized vecsort & co
    6- in library mode, classno3 --> hclassno
XR  7- improved the nffactor module
HC  8- elllseries (use ellglobalred + ellrootno)

  Added
    1- new function in library mode readGEN()
HC  2- new GP function ellrootno

  Removed
    1- error message vecsorter2
    2- functions vecindexsort, veclexsort (use vecsort with flag)

===========================================================================
Done for version 2.0.9 alpha (released 16/06/98):

  Fixed
    1- typo in qfbhclassno (SEGV when result in (1/3)Z)
    2- too much memory allocated in factmod /factcantor (use clones)
    3- removed the -DREADLINE_LIBRARY hack, use <readline/readline.h> and
       not <readline.h>
    4- version 2.0.8 did not compile with readline 1.*
    5- after gaffect(0, padic), padic was unsuitable for further gaffect
    6- length(a string) gave number of non code words, not string length
    7- factorpadic(polynomial of degree one) did not convert coeffs to padics
    8- reduction mod p^r forgotten in gaffsg(s,t_PADIC)
    9- default(realprecision,,1) did not return # significant digits
   10- typo in nfmodprinit (return x instead of 1-x)
   11- matinverseimage did not check its arguments
   12- mathess([;]) --> SEGV
   13- matid(-100) --> SEGV
   14- mateigen([;]) --> SEGV
   15- matmultodiagonal([;],Mat(1)) --> SEGV
   16- vecextract([;],"..") --> SEGV
   17- introduced in 2.0.8 (Added 3-): aliases/user function + <TAB> ==> SEGV
GN 18- (t_RFRAC) ^ t_INT took an unreasonable amount of time
   19- prevent quick succession of ^C from corrupting memory in recover()
   20- hyperu could enter an oo loop due to round-off errors
XR 21- matadjoint(Mat(n)) returned Mat(n), not Mat(1)
   22- matadjoint([;]) returned [[;]] (???)
   23- wrap some long error messages
XR 24- inefficiencies in rnfpolredabs
XR 25- nffactor (wrong format for discriminant computation + problems with
       unseparable polynomials + compute disc only once)
HC 26- typos in kummer.c
GN 27- check environment variable LINES, not ROWS
   28- introduced in 2.0.7 (Fixed 7-): lift(Mod(O(2^0)*x, x^3 - 2)^4) was a
       zero polynomial with non-zero sign (=> pb when normalizing in poldivres)
   29- timer always returned 0 if times() was used (e.g linux-alpha)
   30- kill'ing the argument of a user function corrupted the function
   31- make clean did not remove pariinline.h
   32- incorrect memcopy in identifier, case 's' (removed * sizeof(long))
   33- online help for ?. (nf.nf does not exist)
   34- lisseq0: gnil not respected after break/next. avma=av too brutal
       after return
   35- ellwp assumed precdl > 3
   36- under emacs, \c + hit return froze emacs (Emmanuel Kowalski)
   37- (f()= f()=x); f; didn't set f properly
GN 38- comments in anal.c
   39- qflllgram([;]) --> SEGV
   40- no online help for bernfrac
   41- from 2.0.6 (Fixed-8): in padicff2, forgot to raise ideal to power e

  Changed
    1- improved (trivially) gneg (case t_INTMOD), gtopoly
    2- use macro is_bigint() instead of tests (ulong)x[2] < VERYBIGINT
       (led to typos as in Fixed-4 in 2.0.8)
    3- improved poldivres by replacing many gsub by 1 gneg + many gadd
    4- in pvaluation check for small integer
    5- internal function rnfelement_*mod (prhall=NULL instead of gzero)
    6- improved mathess
    7- added error message "inconsistent data in" in parierr.h
    8- gpui[gs] renamed to gpow[gs]
GN  9- improved probable-primality tests ('end matching')
   10- moved pseudo primality and ECM stuff into ifactor1.c
GN 11- raise to an integer power using left-shift binary (new functions
       powi and powgi)
   12- add some details in the online help headers
GN 13- nextprime, precprime now accept real arguments
TP 14- improved the alpha micro kernel (addllx and subllx)
   15- simplified poltschirnaus
   16- cleaned up identifier(): #ifdef __hpux__ + call_fun() modified
   17- taylor() improved (one gerepile removed)
   18- unified the treatment of zero series
   19- gerepilemany faster and more efficient memory-wise (copy to heap first)
GN 20- improved stack checking in lllgramall

  Removed
    1- global variable defaultpadicprecision
    2- function compute_prhall (nfmodprinit is better)
    3- function [g]pseudopremier (miller[rabin] better)

  Added
    1- function egalii
    2- support for cygwin32 in Configure (Andy Stubbs)
    3- new function gunclone to delete a clone (killbloc should be used by
       the analyser only)
    4- comments in anal.c
TP/XR 5- new function factorint(), using MPQS (_experimental_)

===========================================================================
Done for version 2.0.8.alpha (released 07/05/98):

  Fixed
    1- improved garbage collecting in polroots
    2- zetak did not check its nfz argument properly
    3- warnings from MSVC
GN  4- isprime() did not work for numbers in [2^(BIL-1), 2^BIL-1]
GN  5- precprime sometimes missed a prime
    6- quaddisc(x in Q\Z) did not always work
    7- powering of zero series
    8- factorization of null matrices (SEGV)
    9- mateigen for non-diagonalizable matrices (SEGV)
GN 10- oo loops in some arithmetical functions when arg = big prime
GN 11- cleaned up paridecl.h
   12- gimag/greal for type t_RFRAC/t_RFRACN (fix: Terje Sparre Olsen)
GN 13- ordinal numbers to number components seen through \x
HC 14- lllgram: incorrect gabage collecting in first "warnmem"
   15- theta(q exact, z) entered oo loop
   16- typo in gdiventres (x<-->y in last line)
MS 17- gtrunc for p-adics when valp(x) < 0
MS 18- polresultant(u+v,u-v,v) => x + u;  polresultant(u+v,u-v) => 2*u
MS 19- issquare(Pol), where Pol(0) = 0
IZ 20- use 15 points (by default) for recursive plotting as documented
   21- matsnf for singular matrices (supersedes a patch by GN)
LG 22- micro kernel support for HPUX
LG 23- compilation with Sun's C++ compiler (version 4.2)
   24- SEGV when factoring polynomials of huge degree (removed expos[100],etc)
   25- garbage collection in gpuigs
GN/BH 26- micro kernel support for ix86 running SunOS
HC 27- handling of 0x0 matrix in some hnf* functions
HC 28- bug in discrayabslist* (try bnrdisclist(bnfinit(y^2-2),200,,1) in 2.0.7)

  Changed:
    1- moved hnf and snf from base1.c to alglin2.c (base1.c too big)
    2- use gexpo in linear algebra functions when entries contain real
       numbers (work for inexact polynomial entries now). Still does not
       work properly for p-adics
GN  3- in sigma() fall back to numbdiv() or sumdiv() when k < 2
    4- made comments started in file through read("file") local to file
       (not so \r file)
    5- valuation(0) now returns VERYBIGINT instead of raising an error
MS  6- simplified gegal in case t_FRAC
IZ/GN 7- faster initprimes, using less memory
LG  8- improved Configure

  Added:
    1- new function write1
MS  2- new Lisp-like quote operator 'a
IZ  3- readline: electric parentheses, move across balanced expressions,
         add formal arguments to completion of GP command (when unique)
    4- micro-kernel for hppa
    5- quiet mode (gp -q) to suppress headers

===========================================================================
Done for version 2.0.7.alpha (released 21/03/98):

  Fixed
XR  1- SEGV in get_regulator for imag. quad. fields
    2- "beautified" output (still ugly, less buggy, ok for simple objects)
    3- error during "print()" could change output default
    4- SEGV when syntax errors in gprc
    5- make install failed when libpari.$sodest had been removed
    6- moved term_width and term_heigth to es.c
HC  7- inefficiency in mulii (Karatsuba used too easily)
XR  8- many problems in stark.c
XR  9- bugs in rnfpolredabs (+ new flag)
GN 10- _many_ typos in tutorial and user's manual. New, much nicer, layout
   11- whatnow not robust enough + faulty call by err_new_fun ==> SEGV
   12- idealadd treated incorrectly the 0 ideal
   13- default(realprecision) gave wrong value when format had been changed
   14- bnfs structure was inefficient for applications (inverted 2nd comp.)
   15- buffersize was incorrectly updated during complicated read()
   16- one-line comments "ignored" if buffersize too small
   17- using eval on object containing killed variables caused a SEGV
   18- contfrac lost last term when first parameter was rational and
       numerators were supplied
   19- problems when dividing with polynomials/series whose leading coeff is
       non-exact 0
BD 20- missing #ifdef ZCAT in es.c
BD 21- check in paricom.h whether min / max are already defined
BD 22- universal_constants freed early in freeall() (problems on Windows NT)
BH 23- update Makefile.dos (nf.h --> parinf.h)
BH 24- changed kernel/ix86/level0asm.c (FUNBEGIN/FUNEND + ALIGN)
   25- cleaned the gauss_pivot functions + garbage collecting in gauss()
   26- mathnfmod did not check its second argument
   27- since 2.0.4 (item 24) install did not work anymore on FreeBSD + gp-dyn
   28- cleaner malloc in plotX.c (to remove Warnings when debugmem > 0)
   29- slightly optimized matdet (gsub --> gadd(,gneg))
   30- ? x=1; Pol(1)
         ***   variable name expected: x,n,
                                       ^---
       is fixed everwhere (wherever an optional variable name is expected)
       setting "x" to some value is now safe
IZ 31- nicer looking plot() function
   32- warnings while building for m68k arch
   33- sqrt(Mod(1,2)) went into an oo loop
   34- ?? did not resolve aliases
   35- besselk near integers entered an oo loop
   36- p-adic sqrt (bad valp)
   37- hnfmodid could output wrong results (wrong diagonal) and wreck the
       powering of prime ideals
   38- added garbage collecting in izeta
   39- ??a_number now works as gphelp
   40- in prettymatrix format, matrices 0xn and nx0 are always printed as [;]
   41- 1 - "a" ==> SEGV

  Changed
    1- reorganized output functions (es.c)
    2- have mulir check if integer is small
    3- part of GENtostr inlined (check_output_length())
HC  4- functions where it makes sense now admit an optional argument for
       "variable number" (intformal, deriv, things having to do with
       polynomials, etc)
    5- lines of any length can be input interactively (previously 1k at most)
    6- remove {} and \ from readline history
    7- improve treatment of sample programs in gphelp -d
    8- uniformized debugmem messages
MSo 9- simplify the coinit function
   10- changing the function set through default(compatible,) no longer
       resets installed functions
   11- renamed nfker-->nfkermodpr, nfgauss-->nfsolvemodpr
   12- simplified/extended dummycopy
   13- listput gives more informative error messages

  Added
    1- default: lines
HC  2- (made known to GP) functions nfmodprinit, nfkermodpr & nfsolvemodpr
XR  3- function bnrstark
    4- install code D& (optional pointer)
    5- function name_var (to use after fetch_var)
    6- concatenation of lists (or row vectors) of objects (overloaded concat)
    7- ranges for vecextract (eg. vecextract(x, "1..3"))

  Removed
    1- useless code 'F' in analyzer
    2- perl directory (moved the files in ./perl to ./doc)
===========================================================================
Done for version 2.0.6.alpha (released 22/02/98):

  Fixed
    1- \x (voir2) did not always print the correct number of words
    2- in changevar, type POLMOD, modulus and polynomial were interchanged
    3- all occurences of former header file names in the documentation
    4- (from 2.0.5. item C5) using allocatemem in a script aborted file reading
    5- expanded the documentation for bnrrootnumber
    6- factor(pol. with rational non integer coeff) could corrupt the stack
    7- Euler gave wrong results when prec > 80502 digits (also cleaned up Pi)
    8- cleaned up ggcd, grando0, tayl and factorpadic2
    9- is_scalar_t --> is_const_t in gvar/gvar2
IZ 10- Configure and example Makefile for OS/2
   11- idealprincipal did not accept n x 1 matrices
   12- idealhnf(nf,a,b) did not work for quadratic fields
   13- matsolve[mod]([;],.) could corrupt the stack or accept incorrect input
   14- modules/galois.c unnecessarily included <sys/stat.h>
BH 15- symbol name problem in level0asm.c (cancels patch by IZ)
XR 16- fixes in stark.c
   17- cleaned all occurences of HIGHVALPBIT and HIGHEXPOBIT
   18- serconvol assumed main variable was "x"
   19- (x + O(x^2))^(3/2) gave a stupid error message
   20- types not checked correctly in gtoser
   21- check more seriously arguments to default()
   22- in Makefile: added some missing $(RM), changed an "ln -s" in $(LN)
   23- extra '\n' after print1 + sequence of warnings
   24- simplified a statement in addii()
   25- typo in classno() (classno(-200183): "division by 0") + cleaned classno
   26- all compiler warnings + most of lint's
   27- make install would not work anymore if emacs was not found
   28- HNF reduction not always complete when rank is small compared to dim
   29- gphelp -d did not handle ~ properly (+ cosmetic changes)

  Removed
    1- unused files src/kernel/ix86/{asmi386.h,asmi386inline.h}
    2- useless macro gcopyifstack and global variable RAVYZARC
    3- useless error message gcder1
    4- useless (undocumented) function fasthnf

  Changed
    1- simplified isonstack
    2- extended valid inputs for matsolvemod
    3- don't output a '\n' before an empty matrix
    4- mpsincos no longer static (so that it can be installed)
    5- reorganized gp_initrc() to cater for for non-UNIX arch
    6- the "obsolete function" message now launches whatnow() directly
       (and caters for the special cases "i" and "o" now)
    7- improved stack management in hnf/allhnfmod/fasthnf
    8- moved powering functions to trans1.c
    9- disable logfile while reading .gprc
   10- (slightly) the output of whatnow()

  Added
BH  1- support for DOS build using EMX (dos directory + fixes)
    2- function cotan() and bernfrac()
    3- a code for pointers (&) for analyzer and install()
    4- ??readline now includes info about completion and online help

===========================================================================
Done for version 2.0.5.alpha (released 07/02/98):

  Fixed
BH  1- LOCAL_HIREMAINDER added twice more in mp.c
LG  2- some symbols declared extern in gp_rl.c to avoid compiler warnings
LG  3- isprime could corrupt the stack (isprime_proto removed)
LG  4- possible redeclaration of macro from system header (MAX in bibli1.c)
    5- typos in the user's manual
    6- removed unused error numbers and fixed their ordering in mp.s
    7- a ; or : after read/extern was not always correctly taken into account
    8- a bug in polroots (possible SEGV in very rare cases) (Paul Zimmermann)

  Changed
LG  1- (huge) reorganization of PARI kernel and headers
    2- logfile example in gprc.dft to take advantage of "time expansion"
XR  3- stark units module rewritten
HC  4- rnfpolredabs improved
    5- errors now cause GP to close any file it was reading instead of going on
    6- increased the static limit for the number of files opened simultaneously

  Added
XR  1- function bnrrootnumber

===========================================================================
Done for version 2.0.4.alpha (released 26/01/98):

  Fixed
    1- recovery on startup was not correctly disabled
GN  2- pari.el (see emacs/pari.el-changes)
    3- "" missing around a DLLD caused Configure to fail if shared library not
       available
    4- component of GEN could be created before its root in gadd(t_SER, t_SER)
    5- nffactormod did not like big primes
    6- removed the `.' binary concat operator introduced in last update
       (broke semantics). Instead Str() argument evaluated in string context
    7- solve did not find some obvious zeroes (solve(x=-2,1,x) for instance)
    8- Configure -pg did not work
    9- 68k version didn't work: corrected mp.s, moved some code & defines
   10- subst(x,variable(x),1) did not work
   11- flag acted contrary to doc in matsolvemod
   12- in rare cases the prompt could still start at column > 1
   13- bnfissunit much faster now
   14- idealval could make mistakes with non-integers
   15- Mat([1])[1,] gave a stack error
   16- zetakinit(x-1) as well
   17- zetakinit(K, even integer) gave a wrong result whenever r1(K)>0
   18- typo in whatnow(hermite) and ?bnfsunit
   19- missing newline in user error after print1
   20- various typos and omissions in chapters 1, 2 and 5 of manual
   21- (x-x)==(y-y) returned FALSE
   22- polfactormod(f,0) gave a SIGFPE
   23- some missing #ifdef UNIX
BH 24- install() now works for gp-sta under Linux and OSF
BH 25- gcc Warnings in gp.c + es.c
BH 26- problems when installing from a different non-priviledged account
BH 27- inefficiencies in mpinline.h (replace memory access by a constant)

  Changed
    1- when logging mode is on, record command line as well as result, and
       flush buffer often
    2- subdirectory lib now called misc. Changed some filenames in it
    3- defaults psfile and logfile are now run through strftime
    4- for benches total time now taken into account ([BUG] was excluded)
    5- noerr is now the LAST error message (for CLISP interface)
    6- cleaned path expansion (default(path,...))
    7- renamed types.h and cast.h (prefixed by "pari")
    8- renamed type Rect to PariRect
DB  9- kernel/kerPPC.s replaced by kernel/kerPPC.c
   10- made static the arrays in check_isin() (for the Mac port)
BH 11- overflow/hiremainder use local variables as much as possible
   12- prompt not printed during a batch job, unless echo is set
       commands not echoed twice in interactive mode

  Added
    1- gplogfilter script in misc
    2- check for strftime in Configure
    3- support for alpha running linux (include portability fix on keralpha.s)
    4- file MACHINES
    5- made message for "array index out of range" error more precise
    6- more frequent garbage collecting in mathnf
BH  7- inline asm for i386
GN  8- support for native compiler on AIX

  Removed
    1- support for dynamic linking on AIX (did not work)

===========================================================================
Done for version 2.0.3.alpha (released 13/01/98):

  Fixed:
    1- rare bug in gadd (PADIC + PADIC) which caused one of the arguments
       to be overwritten
    2- typos in refcard
    3- galois.c still couldn't compile on the HP (_INCLUDE_POSIX_SOURCE)
    4- introduced in 2.0.2: item 14 used gexpo incorrectly (bnfinit sometimes
       did not give units it could have computed)
    5- replaced INFINITY by pariINFINITY in rootpol.c (cancels Warning on OS/2)
    6- on OS/2, target ../gp-$dft in o.xxx/Makefile could not be built
       (extraneous $exe_suff)
    7- command line switches so that one can enter them with or without white
       space (new function read_arg in gp.c)
    8- setdcolors so that it can't unset disable_colors if we are under emacs
    9- random did not check its argument correctly (random(2^32) was accepted)
   10- b=10; for(a=1,b, b=2) exited immediately, whereas the upper bound is
       supposed to be evaluated only once
   11- reorganized the error recovery system (initially because errpile could
       cause SEGV on Linux systems)
   12- typo. problems in doc and refcard (interletter spacing in $nfz$...)

  Changed:
    1- Reorganized Makefile.SH: extraction twice as fast
    2- pari.menu and pariemacs.txt rewritten, pari.el updated
    3- expanded the man gp.1 to mention command line switches
    4- the implied input from non-interactive input command (like extern and
       read) does not go into the GP history (%x) anymore (it never went into
       readline's). The final output (value of last expression evaluated) of
       course still does!
    5- updated chapter 5 of the User's Manual (removed obsolete information)

  Added:
    1- better settings for handling the Meta key under readline in
       examples/Inputrc
YU  2- support for shared libraries under FreeBSD
    3- colors under Emacs
       1) emulate exactly the "colors" default after a M-x gp
       2) .gp files edited get a special highlighting
    4- a flag to default() to get the result under GP
    5- overloaded the "." (member) operator to concatenate as strings if LHS is
       a string
    6- .gprc accepts some limited preprocessing directive (#if READL and
       #if EMACS (and #ifnot as well)). Updated lib/gprc.default to reflect the
       changes

  Removed:
    1- some unused, undocumented functions (allocatemem(), checksqid())
       made static some other (op_ReIm)

===========================================================================
Done for version 2.0.2.alpha (released 15/12/1997):

  Fixed:
    1- typos in the documentation for the random() function
    2- removed an extra -emacs flag in pari.el
    3- decodefactor was incorrectly remembered by whatnow (it's factorback now)
    4- test mode did not prevent all prompt expansion (==> bug in make test)
    5- gphelp stopped abruptly when meeting a cross-referencing macro
    6- zetainit now aborts cleanly when disc. too big (caused memory fault)
    7- exceedingly rare bug in the printing of real numbers (missing decimals)
    8- too early rounding in polroots which in rare cases made GP think some
       error had happened
    9- text overflowed the manual pages (and tutorial) on non-A4 paper
   10- polred incorrectly assumed that nf arguments were totally real (in a non
       critical part: that just led to some unnecessary computations)
   11- polred(f,2) could try to overwrite universal integer gzero
   12- check if we are using GNU as or GNU ld in Configure
   13- empty -R argument to $CC when building GP without graphics (==> link
       failed)
   14- bnfinit acts sensibly when fundamental units are too large (before:
       "overflow in R*R")
   15- cleaned up buch2.c (removed ideallllredpart1, removed gerepile in
       class_group_generators(), not_given now called from getfu)
   16- nfgaloisconj(...,2) was unusable (tried an illegal multiplication)
   17- is_totally_split was very inefficient (==> nfgaloisconj was very slow)
   18- some unimportant typos (gexpo) in polgalois
   19- compiling without readline gave a Warning in gp.c (already_hist)
   20- some make programs don't like $< (suppressed from doc/Makefile)
   21- ellap sometimes assumed wrongly that coeffs of the curve were integers
   22- flag 0 and 1 in ellap had been mixed up
   23- print an extra \n before an error message if last output did not
       include it
   24- component(any non recursive type) gave a SEGV
   25- suminf / prodinf / prodeuler assumed they treated a real expression
   26- lindep / algep had problems with numbers having a rational component
   27- last significant digits of bessel* and hyperu were wrong (now only the
       last one is)
   28- expi now returns a long as documented (expi(gzero) returned 0 on 64-bit
       machines!)
   29- g++ could not compile libpari.a (casts missing, extraneous extern "C",
       faulty inline, etc.)
   30- cleaned up the enums in gp.h
   31- incorrect target veryclean in doc/Makefile

  Changed:
    1- '_' is now valid in GP identifiers
    2- removed subsections from table of contents. pages in the manual are now
       numbered consecutively
    3- gexpo now accepts exact 0 arguments (return -HIGHEXPOBIT)
       gexpo for complex numbers now return max(gexpo(Re), gexpo(Im))
    4- parts of lib/gprc.default
    5- the second argument of subgrouplist is now optional

  Removed:
    1- buggy label/goto functions
    2- (now unused) error messages: labeler, gexpoer2
    3- _ as shorthand for conj()
    4- (useless, undocumented) function gnormalize
    5- some files in the lib directory (functions, gp)

  Added:
    1- some files in the lib directory (README, pari.xbm, xgp)

==============================================================================
Done for version 2.0.1.alpha (released 29/11/1997):

  Fixed:
    1- multiple factors forgotten when factoring univariate pols over Z
    2- extraneous modifications of the random seed (period of random
       generator was ridiculously small for some buchxxx functions). Change
       the bench results (in a non essential way)
    3- bad terminal size determination
    4- aliases incorrectly killed (possible SEGV)
    5- incrementing/decrementing array elements with the (valid) syntax
      v[i]++ / v[i]-- caused a weird error message
    6- subgrouplist() could end up by a SEGV on Linux systems
LG  7- on HP-UX, flag -Aa not taken into account in Configure (caused it to
       fail on has_TIOCGWINSZ.c)
LG  8- added a missing #define _INCLUDE_POSIX_SOURCE in galois.c
       (7 & 8 independently fixed by OV)
GN  9- the script examples/cl.gp called vecconcat() instead of concat()
GN 10- make install-sta rebuilt gp-sta unnecessarily
GN 11- many, many typos in the tutorial
   12- tu / fu applied incorrectly to a bnfclassunit
   13- bnfclassunit did not output a valid object (matrix whose elements were
       rows instead of columns)
   14- conversion bug from t_QUAD to t_REAL/t_COMPLEX
   15- off-by-1 error in the history recovery after an error
   16- in fprintferr() (debug messages), embedded %Z did not work correctly
   17- rnfequation over Q yielded a SEGV
   18- string() in compatibility mode corrupted the stack
   19- it is now safe to have colours in prompt and input line under readline
   20- default colours restored upon exiting
   21- default colors in lib/gprc.default used 0 instead of -1 for "no color"
   22- psi and lngamma could give wrong results when the argument was not real
   23- the make test-graphic bench was missing a newline
   24- Pol(break) gave a SEGV
   25- x=1; Pol(1) gave a stupid error message
IZ 26- tutorial.tex was unnecessarily rebuilt
   27- typos in ggcd (cases nobody will ever access: gcd of a non-reduced
LG     fraction with an intmod, etc.)
LG 28- incorrect handling of integrals of vectors
   29- gcd of polynomials with non-exact coeffs gave stupid results (they are
       still often wrong, since the mathematical notion is rather imprecise)
   30- typos in rnfkummer (incorrect flag handling)
   31- typo in idealpowprime (negative exponent gave wrong denominator)
   32- multiplication t_COMPLEX x t_COMPLEX used 4 mult. instead of 3
   33- some modular functions (j, f, f2) rewritten to take advantage of new eta
       function (trueta)

   Changed:
    1- ?? (gphelp) starts in detex mode (-d) from a console window. tmp files
       now placed according to the $TMPDIR environment variable (in /tmp by
       default)
    2- /usr/local/lib/pari/data is a better place for the Galois resolvents
       (which are not included yet in the standard distribution)
    3- The example for prompt in gprc.default to discuss escape sequences under
       readline
    4- Configure now starts by searching the toplevel directory for a temporary
       readline installation
    5- The output of default(colors) was confusing. It is a string now
    6- third argument of polinterpolate can be arbitrary and is now optional
       ("x" by default) (it had to be numeric)
    7- directory configure renamed config, some of the Makefiles in there as
       well (to avoid confusion)
    8- the low_stack macro to facilitate dynamic stack expansion
    9- if, back to GP main loop, the last command was a print1(), output an
       extra newline. This way the prompt is guaranteed to be anchored on
       column 1 (suppresses a readline display bug as well)
   10- Due to 9, pari.el now supposes the prompt starts in col. 1
   11- Better handling of version numbers (LG)
   12- decodefactor() renamed to factorback()

   Removed:
    1- The (unused, undocumented) Malloc_Procs functions and macros
    2- The (now unused) error message numvarer
    3- some (useless, undocumented) targets in the top Makefile
    4- (useless, undocumented) function polgcd()

   Added:
    1- This file !
    2- new flags -ch, -cb, -cu (colour support) to gphelp (see its header)
IZ  3- OS/2 (+ enough tools...) supported by Configure
    4- file examples/Inputrc (example of .inputrc for readline)
    5- Weber f1 function implemented
    6- Karatsuba multiplication t_REAL x t_REAL (development code, not used by
       PARI yet). Test it with install if you wish
