Karim BELABAS on Mon, 10 Jun 2002 23:26:56 +0200 (MEST)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

pari-2.2.3.alpha released


Hi pari-dev,

  as promised, here's a snapshot of current sources, called pari-2.2.3.alpha

  ftp://megrez.math.u-bordeaux.fr/pub/pari/pari-alpha.tgz

(CVS tag release-2-2-3). It is an ALPHA release, but nearing beta status.
It contains

* a number of major new features (BPSW primality test, APRCL primality
prover, PSLQ integer relation finder, stable floating point LLL, van Hoeij
factorizer over number fields).

WARNING: isprime(n) guarantees primality ==> SLOW when n is huge. Use
ispseudoprime(n) for a quick (BPSW or strong-RM) test.

* large rewrite of basic number field stuff (LLL-reduced nf.zk, modular
algorithms, partial factorization). General speedup for generic
number field code (40% for `nfields' bench which features trivial examples,
much more for tough problems). Specifics:

  - nfsubfields orders of magnitude faster for tough Galois cases
    (interfaces Allombert's algorithm nfgaloisconj for WSS groups). Try
    {
      nfsubfields(x^32 - 448*x^30 + 84864*x^28 - 9028096*x^26 +
602397952*x^24 - 26625650688*x^22 + 801918722048*x^20 - 16665641517056*x^18 +
239210760462336*x^16 - 2349014746136576*x^14 + 15459151516270592*x^12 -
65892492886671360*x^10 + 172580952324702208*x^8 - 255690851718529024*x^6 +
183876928237731840*x^4 - 44660812492570624*x^2 + 2000989041197056);
    }
    \\ yes, it has _a lot_ of subfields, it's the compositum of the
    \\ Q(sqrt(p)) for p = 2, 3, 5, 7, 11

  - polredabs allows partial factorization (flag 16) and should be impervious
    to precision problems. Try :
    {
      P = x^20 - 20060746*x^19 - 26317708967*x^18 + 1272499722*x^17 -
68388085954*x^16 - 397162072594*x^15 - 588825188791*x^14 +
211790286098*x^13 + 1816277408059*x^12 + 3573979023900*x^11 +
4200711847680*x^10 + 3951202410004*x^9 + 3362073609371*x^8 +
2415036105634*x^7 + 1338063714403*x^6 + 454352699370*x^5 + 86337091498*x^4
- 1546262554*x^3 + 27330619*x^2 + 6622*x + 1;
      polredabs(P, 16); \\ use partial factorisation of poldisc(P)
    }
    Compare in the stable version:

      addprimes(factor(poldisc(P),0)[,1]) \\ same, slightly less legible...
      polredabs(P);

    at \p28, \p60, \p100, \p200 etc. (should be at least ten times slower,
    would enter a near infinite loop at \p28)

  - approximation theorem: primedec, idealtwoelt, idealappr orders of
    magnitude faster for tough fields (large degree, small primes totally split)
    Try:  idealprimedec(nfinit(galoissubcyclo(341,2)), 2)

  - faster bnrstark and quadray
    Try:  allocatemem(80*10^6); quadray(5, 11*y^3 + 17*y^2 + 8*y + 19)
    \\ it's _tough_ (class field of relative degree 69), allow for about
    \\ 4min on a PIII 1GHz, scale accordingly.

  - very fast polsubcyclo/galoissubcyclo (defining pol. for abelian fields)
    and ffinit (same for prime finite fields)

* a large number of (mostly minor) bug fixes

Plus a few other things I might have forgotten.

Have fun,

    Karim.

P.S: The complete CHANGES:

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 transcendental 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- infinite 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"  [ [] in
       stable version, which is also wrong: 2 + O(2^2) ]
   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.*

  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
-- 
Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas
--
PARI/GP Home Page: http://www.parigp-home.de/