-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES-2.2
3994 lines (3843 loc) · 209 KB
/
CHANGES-2.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# $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