Finalize CLN 1.3.3 release.
[cln.git] / NEWS
1 2013-07-21, version 1.3.3
2 =========================
3
4 Implementation changes
5 ----------------------
6
7 * Fix integer input of leading zeros in power-of-two base.
8
9 * Fix several floating-poing conversion bugs involving huge numbers.
10
11 * Fix bug that would set input stream fail state when reading a number at EOF.
12
13 Other changes
14 -------------
15
16 * Support the x32 ABI.
17
18
19 2011-05-08, version 1.3.2
20 =========================
21
22 Implementation changes
23 ----------------------
24
25 * Fixed a bug in scale_float(cl_LF, cl_I) when the scale factor exceeded 2^31
26   on x86.
27
28 Other changes
29 -------------
30
31 * Improved portability to some non-GCC compilers.
32
33
34 2009-09-24, version 1.3.1
35 =========================
36
37 Implementation changes
38 ----------------------
39
40 * Fixed a crash in double_approx(cl_RA) on 64-bit platforms.
41
42 * Add basic support for Renesas SH (sh4).
43
44
45 2009-06-30, version 1.3.0
46 =========================
47
48 Other changes
49 -------------
50
51 * Use the GNU autotools as build system.
52
53 * Implemented a more portable module dependency mechanism.
54
55
56 2008-04-05, version 1.2.2
57 =========================
58
59 Implementation changes
60 ----------------------
61
62 * Re-establish CLN-1.2.0 ABI and fix ARM build, both inadvertently broken in
63   the previous release.
64
65
66 2008-03-24, version 1.2.1
67 =========================
68
69 Implementation changes
70 ----------------------
71
72 * Fixed some bugs in the output of numbers larger than 2^32 decimal digits.
73
74 Other changes
75 -------------
76
77 * Modifying C/C++ operators like +=, ++, etc. are now enabled by default.
78
79
80 2008-01-19, version 1.2.0
81 =========================
82
83 Algorithmic changes
84 -------------------
85
86 * Save big amounts of memory in computation of some functions and constants by:
87     - Avoiding pre-computation of series terms and instead computing them in a
88       streamed way.
89     - Avoiding computation with excess precision in binary splitting algorithm
90       by coercion of intermediate integer values to floating-point as early as
91       possible.
92
93 Implementation changes
94 ----------------------
95
96 * Added support for huge numbers:
97     - intC used for all counter loops.
98     - intE is now a 64-bit type on all 64-bit platforms and even on selected
99       32-bit platforms.
100
101 * CLN now uses C++ exceptions for error handling. The cl_abort() hook is not
102   supported any more. Please refer to the documentation to learn about existing
103   exception types.
104
105 * Fixed a bug on i386 where comparing Z/2Z ring zeros returnd random results.
106
107 * Removed cl_boolean. Use built-in C++ bool instead.
108
109 Other changes
110 -------------
111
112 * Dropped the cln-config script. Please use pkg-config instead.
113
114 * Updated infrastructure to that of libtool-1.5.24.
115
116 * Changed encoding of all files to UTF-8.
117
118 * Fix compilation issues with GCC-4.3.
119
120 * Fix linking issues on platforms that don't feature weak symbols (like win32).
121
122
123 2006-08-08, version 1.1.13
124 ==========================
125
126 * Compilation fixes for 64-bit brokenness introduced in last release.
127
128
129 2006-08-06, version 1.1.12
130 ==========================
131
132 Implementation changes
133 ----------------------
134
135 * Fix rare assertion when printing quite large floats.
136
137 Other changes
138 -------------
139
140 * Compilation fixes for several platforms: *BSD, Intel Mac, and MinGW.
141
142
143 2005-11-23, version 1.1.11
144 ==========================
145
146 Algorithmic changes
147 -------------------
148
149 * Considerably improved performance of number input.
150
151
152 2005-10-22, version 1.1.10
153 ==========================
154
155 Implementation changes
156 ----------------------
157
158 * Removed the vptr of modular integer and univariate polynomial
159   classes in order to fix some crashes in that sector of CLN.  Code
160   using this needs to be recompiled.
161
162 * Many more operator signatures make the integration of CLN types with
163   float/double easier.
164
165 Other changes
166 -------------
167
168 * Several compilation fixes.
169
170 * Made it possible to cross-compile CLN.
171
172
173 2004-11-03, version 1.1.9
174 =========================
175
176 Algorithmic changes
177 -------------------
178
179 * Input of numbers in bases 2, 4, 8, 16 and 32 is now done in linear bit
180   complexity as opposed to O(N^2). Useful for all kinds of persistency.
181
182 Implementation changes
183 ----------------------
184
185 * Fixed several bugs in the integer input and output routines that could be
186   blamed for random crashes in the following cases: output in base 32 for
187   quite large numbers, input in base 2 for fixnums and input in base 3 for
188   fixnums on a 64 bit target.
189
190 * Fixed crash when radix specifiers were used in input streams.
191
192 * Speed up on x86_64 and ia64 by adding some inline assembly.
193
194 Other changes
195 -------------
196
197 * Fixes for compilation on MacOS X and little endian Mips.
198
199
200 2004-07-01, version 1.1.8
201 =========================
202
203 Implementation changes
204 ----------------------
205
206 * Fix bug in log(a,b) when b is 1/n.
207
208 * Fix crash in shared library on AMD64.
209
210 Other changes
211 -------------
212
213 * Fixes for some language conformance issues.
214
215
216 2004-05-02, version 1.1.7
217 =========================
218
219 Implementation changes
220 ----------------------
221
222 * Fixed two corner case bugs in cl_LF multiplication and sqrt.
223
224 * Workaround GCC 3.[123] compiler bug.
225
226 * Parallel build should work reliably now.
227
228
229 2004-01-01, version 1.1.6
230 =========================
231
232 Functional changes
233 ------------------
234
235 * New function
236   `sintL ldegree(const cl_UP& x)'.
237   (Suggested by Munagala Ramanath.)
238
239 Implementation changes
240 ----------------------
241
242 * Fixed a bug in polynomial subtraction.
243   (Reported by Munagala Ramanath.)
244
245 Other changes
246 -------------
247
248 * Provide a package control file cln.pc.
249
250 * Updated infrastructure to autoconf-2.57.
251
252 * Fixed compilation issues with GCC-3.4 prereleases and on Mac OSX.
253
254
255 2002-05-28, version 1.1.5
256 =========================
257
258 Other changes
259 -------------
260
261 * Fix compilation issues with GCC-3.1.
262
263
264 2002-01-04, version 1.1.4
265 =========================
266
267 Other changes
268 -------------
269
270 * Fix compilation issues with GMP-4.0 and on IBM s390.
271
272 * Updated infrastructure to autoconf-2.52.
273
274
275 2001-11-05, version 1.1.3
276 =========================
277
278 Implementation changes
279 ----------------------
280
281 * Fix a computation error of sin and sinh for small arguments.
282   (Reported by Christopher Kennedy.)
283
284 * Module ordering works with gcc-3.0 -fuse-cxa-atexit now.
285
286 * -DNO_ASM works properly on Sparc.
287
288
289 2001-07-25, version 1.1.2
290
291 Implementation changes
292 ----------------------
293
294 * Minor cleanups and portability issues.
295   (No need to upgrade if you have been happy so far.)
296
297
298 2001-05-31, version 1.1.1
299 =========================
300
301 Implementation changes
302 ----------------------
303
304 * Minor cleanups for GCC 3.0 and libstdc++-v3.
305
306 * Fixes several little bugs and portability issues.
307
308
309 2000-12-14, version 1.1.0
310 =========================
311
312 Functional changes
313 ------------------
314
315 * ISO/IEC 14882 fashion adjustments:
316   Put everything into namespace cln.  All fundamental data types still
317   carry their old names.  Other non-macro identifiers are now written as 
318   cln::foo instead of cl_foo, except where the cl_ comes from a data type
319   (as in cl_I_to_int()).  Headers are installed into a separate
320   directory, #include <cln/foo.h> instead of <cl_foo.h>.  Applications
321   must be manually ported to the new style.  We apologize for the
322   inconvenience.
323
324 Implementation changes
325 ----------------------
326
327 * Removed internal copy of mpn subdirectory tree from libgmp-2.0.2.
328   Configuring with --with-gmp now relies on an installed libgmp library
329   version 3 or above.  We recommend libgmp-3.1 or newer.
330
331 * Adjusted several break-even points to make better use of a faster libgmp and
332   better match present-day CPUs.
333
334 * Fix several errors for architectures with 64-bit wide words.
335   (Others than Alpha, which worked already.)
336
337 * Fix compilation errors with current GCC-3.0 snapshots.
338
339 Other changes
340 -------------
341
342 * Added package tools: script cln-config and autoconf macro AC_PATH_CLN
343   (in file cln.m4).
344
345
346 2000-01-13, version 1.0.3
347 =========================
348
349 Functional changes
350 ------------------
351
352 * New function
353   `cl_I doublefactorial (uintL n)'.
354
355 Implementation changes
356 ----------------------
357
358 * Fix several little configuration errors.
359
360 * Fix some compilation errors with gcc-2.96 prereleases.
361
362
363 1999-09-07, version 1.0.2
364 =========================
365
366 Functional changes
367 ------------------
368
369 * New functions
370   `cl_I numerator (const cl_RA&)'
371   `cl_I denominator (const cl_RA&)'.
372   Suggested by Richard Kreckel and Sylvain Pion.
373
374 * New function `cl_equal_hashcode' for the classes cl_N, cl_R, cl_RA, cl_I,
375   cl_F, cl_SF, cl_FF, cl_DF, cl_LF.
376   Suggested by Richard Kreckel.
377
378 Implementation changes
379 ----------------------
380
381 * Fix an endless loop when either of the functions
382   `cl_boolean rootp (const cl_RA&, uintL, cl_RA*)',
383   `cl_boolean rootp (const cl_RA&, const cl_I&, cl_RA*)'
384   was called with an integer argument. Thanks to Richard Kreckel.
385
386 * Fix a bug in the addition and subtraction of rational numbers which could
387   cause unnormalized rational numbers like 3/1 to be created.
388
389
390 1999-06-09, version 1.0.1
391 =========================
392
393 Algorithmic changes
394 -------------------
395
396 * Speed up the functions `logand', `lognand', `logandc2'.
397
398 Implementation changes
399 ----------------------
400
401 * Fix compilation errors with gcc-2.7.2, egcs-1.1.2 and gcc-2.95.
402
403 * Fix compilation errors on HPPA, MIPS, some versions of DEC Alpha, OpenBSD,
404   and SPARC with LiDIA.
405
406 * Fix compilation errors on Win32. Thanks to Mumit Khan.
407
408
409 1999-01-12, version 1.0
410 =======================
411
412 Functional changes
413 ------------------
414
415 * New include files, containing I/O functions:
416     <cl_integer_io.h>
417     <cl_rational_io.h>
418     <cl_float_io.h>
419     <cl_sfloat_io.h> <cl_ffloat_io.h> <cl_dfloat_io.h> <cl_lfloat_io.h>
420     <cl_real_io.h>
421     <cl_complex_io.h>
422   The file <cl_io.h> now contains only I/O functions for characters and
423   C integers.
424
425 * To access the base ring of a univariate polynomial ring, now use
426   `R->basering()' instead of `R->basering'.
427
428 * Implement `plusp', `max', `min' for the classes cl_F, cl_SF, cl_FF, cl_DF,
429   cl_LF, cl_RA, cl_I.
430
431 * Implement `abs' for the class cl_RA.
432
433 * Replaced `read_number' with specialized functions `read_complex',
434   `read_real', `read_float', `read_rational', `read_integer'.
435
436 * Replaced the functions
437   `void fprint (cl_ostream stream, int x)'
438   `void fprint (cl_ostream stream, unsigned int x)'
439   `void fprint (cl_ostream stream, long x)'
440   `void fprint (cl_ostream stream, unsigned long x)'
441   with
442   `void fprintdecimal (cl_ostream stream, int x)'
443   `void fprintdecimal (cl_ostream stream, unsigned int x)'
444   `void fprintdecimal (cl_ostream stream, long x)'
445   `void fprintdecimal (cl_ostream stream, unsigned long x)'
446
447 Algorithmic changes
448 -------------------
449
450 * The function `cl_I xgcd (const cl_I& a, const cl_I& b, cl_I* u, cl_I* v)'
451   now normalizes the resulting u and v to be of minimum absolute value.
452   (Suggested by the LiDIA group.)
453
454 * The conversion from string to cl_F, cl_R, cl_N now chooses the format of
455   the resulting float depending on the number of significant digits present
456   in the input string.
457
458 * Speed up the functions
459   `cl_R operator* (const cl_RA&, const cl_LF&)'
460   `cl_R operator* (const cl_LF&, const cl_RA&)'
461   `cl_R operator/ (const cl_RA&, const cl_LF&)'
462   `cl_LF operator/ (const cl_LF&, const cl_RA&)'
463
464 Implementation changes
465 ----------------------
466
467 * Fix for `cl_I ash (const cl_I& x, const cl_I& n)' when |n| is between
468   2^29 and 2^37.
469   (Reported by Thomas Papanikolaou.)
470
471 * Fixed a memory leak in the long-float truncate function.
472   (Reported by Keith Briggs.)
473
474 * Fixed a memory leak in the modular integer exponentiation.
475
476 * Reduced the stack space consumption. The default stack size (typically
477   8 MB on Unix) should now be sufficient in order to run all CLN programs.
478
479 * Portability fixes for m68k platforms.
480   (Reported and fixed by Roman Hodek.)
481
482 Other changes
483 -------------
484
485 * Restructured the sources. The subpackages
486     - base
487     - base + integer
488     - base + integer + rational
489     - base + integer + rational + float
490     - base + integer + rational + float + real
491     - base + integer + rational + float + real + complex
492     - base + integer + modinteger
493   are now self-contained.
494
495 * The configuration script can be called with option `--enable-shared',
496   to build CLN as a shared library.
497
498 * Updated the LiDIA interface.
499
500
501 1998-05-07, version 0.98
502 ========================
503
504 Implementation changes
505 ----------------------
506
507 * Portability fixes for 64-bit platforms like DEC Alpha.
508   (Reported by John Cremona and Thomas Papanikolaou.)
509
510
511 1998-02-27
512 ==========
513
514 Other changes
515 -------------
516
517 * Portability fixes for new ISO/ANSI C++ compilers.
518
519 * Updated the LiDIA interface for LiDIA version 1.3 and fixed a couple of
520   bugs.
521
522
523 1997-09-06
524 ==========
525
526 Implementation changes
527 ----------------------
528
529 * Portability fix for i686 platforms.
530   (Reported by Michael Pfeifer.)
531
532
533 1997-09-01
534 ==========
535
536 Functional changes
537 ------------------
538
539 * New include files:
540   <cl_ring.h>, declaring general rings,
541   <cl_GV.h>, <cl_SV.h>, defining vectors,
542   <cl_univpoly.h>, defining univariate polynomial rings.
543
544 Algorithmic changes
545 -------------------
546
547 * Speed up the internal computation of ln(2) and ln(10) by about 20%.
548
549 * Speed up the computation of exp (for 1000 digits or more) by about 10%.
550
551 Implementation changes
552 ----------------------
553
554 * Portability fix for 64-bit platforms like DEC Alpha:
555   Fixed a bug: endless loop in `sqrt' for large precision.
556   (Reported by Blake Jones.)
557
558 * Portability fix for RS/6000 platforms.
559
560
561 1997-02-21
562 ==========
563
564 Algorithmic changes
565 -------------------
566
567 * Speed up the computation of the elementary transcendental functions:
568   exp, sinh, cosh, asinh, atanh (for 100 digits) by about 30%,
569   log (for 100 digits) by about 25%,
570   sin, cos (for 1000 or 10000 digits) by about 20%,
571   asin, acos, atan (for 1000 digits) by about 25%.
572
573 Implementation changes
574 ----------------------
575
576 * Portability fix for SunOS 4 and other BSD platforms.
577
578
579 1997-01-31
580 ==========
581
582 Algorithmic changes
583 -------------------
584
585 * Fixed a bug: endless recursion in `cl_boolean sqrtp (const cl_RA&, cl_RA*)'.
586
587 * Fixed a bug: Only the first 85% of the digits returned by `cl_eulerconst'
588   for moderate precision (< 11370 digits) were correct.
589   (Reported by Thomas Papanikolaou.)
590
591 Implementation changes
592 ----------------------
593
594 * Fix static initialization order bug. Requires g++ 2.7.0 or newer
595   (g++ 2.8.0 or newer on HPPA).
596
597 * New method `debug_print()', for pretty printing of CLN objects, intended
598   to be called from the debugger.
599
600
601 1997-01-07
602 ==========
603
604 Functional changes
605 ------------------
606
607 * New functions `float cl_float_approx (const cl_R&)',
608                 `double cl_double_approx (const cl_R&)'
609   for converting a real number to a C `float' or `double'.
610
611 Algorithmic changes
612 -------------------
613
614 * Speed up `cl_zeta' using Cohen-Villegas-Zagier convergence acceleration.
615
616 Implementation changes
617 ----------------------
618
619 * New function `cl_print', for pretty printing of CLN objects, intended to be
620   called from the debugger.
621
622 * Portability fixes for 64-bit platforms like DEC Alpha.
623
624
625 1996-11-29
626 ==========
627
628 Functional changes
629 ------------------
630
631 * New include files:
632   <cl_string.h>, defining strings,
633   <cl_symbol.h>, defining symbols,
634   <cl_proplist.h>, defining property lists,
635   <cl_condition.h>, defining conditions/exceptions.
636
637 * New functions `cl_F cl_catalanconst ()',
638                 `cl_F cl_catalanconst (const cl_F&)',
639                 `cl_F cl_catalanconst (cl_float_format_t)'
640   which return Catalan's constant.
641   (Suggested by Thomas Papanikolaou.)
642
643 * New functions `cl_F cl_zeta (int s)',
644                 `cl_F cl_zeta (int s, const cl_F&)',
645                 `cl_F cl_zeta (int s, cl_float_format_t)'
646   which return the Riemann zeta function at an integral point s>1.
647
648 * New functions `cl_F cl_exp1 ()',
649                 `cl_F cl_exp1 (const cl_F&)',
650                 `cl_F cl_exp1 (cl_float_format_t)'
651   which return e = exp(1).
652
653 * New function `cl_I binomial (uintL n, uintL k)' which returns the
654   binomial coefficient (n choose k).
655
656 * New functions `int cl_I_to_int (const cl_I&)',
657        `unsigned int cl_I_to_uint (const cl_I&)',
658                 `long cl_I_to_long (const cl_I&)',
659        `unsigned long cl_I_to_ulong (const cl_I&)'
660   for converting an integer to a C `int' or `long'.
661
662 * New functions `float cl_float_approx (const cl_I&)',
663                 `float cl_float_approx (const cl_RA&)',
664                 `double cl_double_approx (const cl_I&)',
665                 `double cl_double_approx (const cl_RA&)'
666   for converting a rational number to a C `float' or `double'.
667
668 Implementation changes
669 ----------------------
670
671 * Moved the sources to subdirectories.
672   (Suggested by Jörg Arndt.)
673
674 Other changes
675 -------------
676
677 * New benchmark for better comparing LiDIA, Pari and CLN.
678
679 * Added an interface to LiDIA, allows using CLN as a replacement of libI.
680   (Suggested by Thomas Papanikolaou.)
681
682 * Added an ILOG Talk interface, for interactive use of the library.
683
684
685 1996-10-13
686 ==========
687
688 Functional changes
689 ------------------
690
691 * New include file <cl_modinteger.h>, defining modular integer rings.
692
693 * New functions `cl_F cl_eulerconst ()', `cl_F cl_eulerconst (const cl_F&)',
694   `cl_F cl_eulerconst (cl_float_format_t)' which return Euler's constant.
695
696 Algorithmic changes
697 -------------------
698
699 * Speed up square root of large numbers by use of Newton's algorithm.
700
701 * Speed up multiplication and division of large long-floats by small integers.
702
703 * Speed up the computation of pi, e, exp, log, sin, cos, tan, sinh, cosh, tanh,
704   asin, acos, atan, asinh, acosh, atanh.
705   All of them are now computed with asymptotically fast algorithms, of
706   bit complexity O(log(N)^2*M(N)) = O(N^(1+epsilon)) for N digits.
707
708 * Fixed several bugs in the transcendental functions routines. In particular,
709   the `log' function went into an endless loop.
710
711 * Fixed a bug: The cl_I -> cl_DF and cl_I -> cl_LF conversions didn't work
712   correctly for negative integers.
713
714
715 1996-09-08
716 ==========
717
718 Functional changes
719 ------------------
720
721 * New include file <cl_numtheory.h>, containing number theoretic functions,
722   for now only the Jacobi symbol.
723
724 Algorithmic changes
725 -------------------
726
727 * Speed up squaring of large numbers by 30%.
728
729 * Speed up division of large numbers by use of Newton's algorithm. The
730   improvement is noticeable for numbers with at least about 1000 words =
731   32000 bits = 10000 decimal digits.
732
733 * Speed up the binary-to-decimal conversion of large numbers by use of
734   a divide-and-conquer method. The improvement is noticeable for numbers
735   of at least 1250 words = 40000 bits = 12000 decimal digits.
736
737 * Fixed a bug: The functions `cl_boolean minusp (const type&)' and
738   `cl_boolean zerop (const type&)' were missing for type=cl_I and type=cl_RA.
739
740 * Fixed a bug: The function `cl_boolean logtest (const cl_I&, const cl_I&)'
741   didn't work correctly if both arguments were bignums.
742
743 * Fixed a bug: The function `cl_I mod (const cl_I&, const cl_I&)', when called
744   as `mod(-n*m,m)' (n>0), returned m instead of 0.
745
746 * Fixed a bug: The function `uintL power2p (const cl_I&)' returned wrong
747   values for arguments x = 2^n, n >= 29.
748
749 Implementation changes
750 ----------------------
751
752 * Speed up CLN by using the low-level addition/subtraction, shift and
753   multiplication loops from GNU gmp-2.0.2.
754
755 * Fixed a severe reference counting bug in the constructors
756   `type::type (const long)' and `type::type (const unsigned long)'
757   for type=cl_number, type=cl_N, type=cl_RA, type=cl_I that most often
758   caused a core dump.
759
760 * CLN's word sequences can be chosen to be stored big-endian in memory
761   (like it was up to now) or little-endian (needed for interfacing to GMP).
762
763
764 1996-05-20
765 ==========
766
767 Functional changes
768 ------------------
769
770 * New include file <cl_timing.h>, contains timing facilities.
771
772 Algorithmic changes
773 -------------------
774
775 * Speed up the multiplication of large numbers by use of an FFT based
776   algorithm (Schönhage-Strassen). The improvement is noticeable when both
777   factors have at least 1250 words = 40000 bits = 12000 decimal digits.
778
779 * Speed up the functions `cl_I gcd (const cl_I&, const cl_I&)' and
780   `cl_I xgcd (const cl_I&, const cl_I&, cl_I*, cl_I*)' by a factor
781   of 1.5. Simple trick.
782
783 * Speed up the function `cl_boolean sqrtp (const cl_I&, cl_I*)' using a
784   trick from Henri Cohen.
785
786 * Fixed an endless loop in the function `uint32 gcd (uint32, uint32)'
787   which occurred when one of the arguments is zero.
788
789 * Fixed an endless loop in the function `cl_I factorial (uintL)'.
790
791 Implementation changes
792 ----------------------
793
794 * <cl_io.h> now uses iostreams by default instead of stdio FILE pointers.
795   (Reported by Tito Flagella.)
796
797 * Fixed linking error when compiling without -O.
798   (Reported by Tito Flagella.)
799
800 * Fixed syntax error in <cl_input.h>.
801   (Reported by Tito Flagella.)
802
803 * Fixed syntax errors in src/cl_DS.h and src/cl_FF_plus.h.
804   (Reported by Marcus Daniels.)
805
806 * More portability fixes.
807
808 * Configuration now supports the --srcdir option.
809   (Reported by Marcus Daniels.)
810
811
812 1996-01-03
813 ==========
814
815 * Compiles well on Sparc, using gcc.
816
817 * Mail to beta testers.
818
819
820 1995-12-06
821 ==========
822
823 * Compiles well on Linux, using gcc.
824