1 Copyright 1996, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
4 This file is part of the GNU MP Library.
6 The GNU MP Library is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or (at your
9 option) any later version.
11 The GNU MP Library is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with the GNU MP Library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22 Changes between GMP version 4.2 and 4.2.1
25 * Shared library numbers corrected.
26 * Broken support for 32-bit AIX fixed.
30 * Exact division (mpz_divexact) now falls back to plain division for large
34 * Support for some new systems.
37 Changes between GMP version 4.1.4 and 4.2
40 * Minor bug fixes and code generalizations.
41 * Expanded and improved test suite.
44 * Many minor optimizations, too many to mention here.
45 * Division now always subquadratic.
46 * Computation of n-factorial much faster.
47 * Added basic x86-64 assembly code.
48 * Floating-point output is now subquadratic for all bases.
49 * FFT multiply code now about 25% faster.
50 * Toom3 multiply code faster.
53 * Much improved configure.
54 * Workarounds for many more compiler bugs.
55 * Temporary allocations are now made on the stack only if small.
56 * New systems supported: HPPA-2.0 gcc, IA-64 HP-UX, PowerPC-64 Darwin,
58 * New i386 fat binaries, selecting optimised code at runtime (--enable-fat).
59 * New build option: --enable-profiling=instrument.
60 * New memory function: mp_get_memory_functions.
61 * New Mersenne Twister random numbers: gmp_randinit_mt, also now used for
63 * New random functions: gmp_randinit_set, gmp_urandomb_ui, gmp_urandomm_ui.
64 * New integer functions: mpz_combit, mpz_rootrem.
65 * gmp_printf etc new type "M" for mp_limb_t.
66 * gmp_scanf and friends now accept C99 hex floats.
67 * Numeric input and output can now be in bases up to 62.
68 * Comparisons mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d recognise infinities.
69 * Conversions mpz_get_d, mpq_get_d, mpf_get_d truncate towards zero,
70 previously their behaviour was unspecified.
71 * Fixes for overflow issues with operands >= 2^31 bits.
74 * mpfr is gone, and will from now on be released only separately. Please see
78 Changes between GMP version 4.1.3 and 4.1.4
80 * Bug fix to FFT multiplication code (crash for huge operands).
81 * Bug fix to mpf_sub (miscomputation).
82 * Support for powerpc64-gnu-linux.
83 * Better support for AMD64 in 32-bit mode.
84 * Upwardly binary compatible with 4.1.3, 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0,
88 Changes between GMP version 4.1.2 and 4.1.3
90 * Bug fix for FFT multiplication code (miscomputation).
91 * Bug fix to K6 assembly code for gcd.
92 * Bug fix to IA-64 assembly code for population count.
93 * Portability improvements, most notably functional AMD64 support.
94 * mpz_export allows NULL for countp parameter.
95 * Many minor bug fixes.
96 * mpz_export allows NULL for countp parameter.
97 * Upwardly binary compatible with 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, and 3.x
101 Changes between GMP version 4.1.1 and 4.1.2
106 Changes between GMP version 4.1 and 4.1.1
109 * New systems supported: NetBSD and OpenBSD sparc64.
112 Changes between GMP version 4.0.1 and 4.1
115 * Speed improvements.
116 * Upwardly binary compatible with 4.0, 4.0.1, and 3.x versions.
117 * Asymptotically fast conversion to/from strings (mpz, mpq, mpn levels), but
118 also major speed improvements for tiny operands.
119 * mpn_get_str parameter restrictions relaxed.
120 * Major speed improvments for HPPA 2.0 systems.
121 * Major speed improvments for UltraSPARC systems.
122 * Major speed improvments for IA-64 systems (but still sub-optimal code).
123 * Extended test suite.
124 * mpfr is back, with many bug fixes and portability improvements.
125 * New function: mpz_ui_sub.
126 * New functions: mpz_export, mpz_import.
127 * Optimization for nth root functions (mpz_root, mpz_perfect_power_p).
128 * Optimization for extended gcd (mpz_gcdext, mpz_invert, mpn_gcdext).
129 * Generalized low-level number format, reserving a `nails' part of each
130 limb. (Please note that this is really experimental; some functions
131 are likely to compute garbage when nails are enabled.)
132 * Nails-enabled Alpha 21264 assembly code, allowing up to 75% better
133 performance. (Use --enable-nails=4 to enable it.)
136 Changes between GMP version 4.0 and 4.0.1
141 Changes between GMP version 3.1.1 and 4.0
144 * Speed improvements.
145 * Upwardly binary compatible with 3.x versions.
146 * New CPU support: IA-64, Pentium 4.
147 * Improved CPU support: 21264, Cray vector systems.
148 * Support for all MIPS ABIs: o32, n32, 64.
149 * New systems supported: Darwin, SCO, Windows DLLs.
150 * New divide-and-conquer square root algorithm.
151 * New algorithms chapter in the manual.
152 * New malloc reentrant temporary memory method.
153 * New C++ class interface by Gerardo Ballabio (beta).
154 * Revamped configure, featuring ABI selection.
155 * Speed improvements for mpz_powm and mpz_powm_ui (mainly affecting small
157 * mpz_perfect_power_p now properly recognizes 0, 1, and negative perfect
159 * mpz_hamdist now supports negative operands.
160 * mpz_jacobi now accepts non-positive denominators.
161 * mpz_powm now supports negative exponents.
162 * mpn_mul_1 operand overlap requirements relaxed.
163 * Float input and output uses locale specific decimal point where available.
164 * New gmp_printf, gmp_scanf and related functions.
165 * New division functions: mpz_cdiv_q_2exp, mpz_cdiv_r_2exp, mpz_divexact_ui.
166 * New divisibility tests: mpz_divisible_p, mpz_divisible_ui_p,
167 mpz_divisible_2exp_p, mpz_congruent_p, mpz_congruent_ui_p,
168 mpz_congruent_2exp_p.
169 * New Fibonacci function: mpz_fib2_ui.
170 * New Lucas number functions: mpz_lucnum_ui, mpz_lucnum2_ui.
171 * Other new integer functions: mpz_cmp_d, mpz_cmpabs_d, mpz_get_d_2exp,
172 mpz_init2, mpz_kronecker, mpz_lcm_ui, mpz_realloc2.
173 * New rational I/O: mpq_get_str, mpq_inp_str, mpq_out_str, mpq_set_str.
174 * Other new rational functions: mpq_abs, mpq_cmp_si, mpq_div_2exp,
175 mpq_mul_2exp, mpq_set_f.
176 * New float tests: mpf_integer_p, mpf_fits_sint_p, mpf_fits_slong_p,
177 mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, mpf_fits_ushort_p.
178 * Other new float functions: mpf_cmp_d, mpf_get_default_prec, mpf_get_si,
179 mpf_get_ui, mpf_get_d_2exp.
180 * New random functions: gmp_randinit_default, gmp_randinit_lc_2exp_size.
181 * New demo expression string parser (see demos/expr).
182 * New preliminary perl interface (see demos/perl).
183 * Tuned algorithm thresholds for many more CPUs.
186 Changes between GMP version 3.1 and 3.1.1
188 * Bug fixes for division (rare), mpf_get_str, FFT, and miscellaneous minor
192 Changes between GMP version 3.0 and 3.1
195 * Improved `make check' running more tests.
196 * Tuned algorithm cutoff points for many machines. This will improve speed for
197 a lot of operations, in some cases by a large amount.
198 * Major speed improvments: Alpha 21264.
199 * Some speed improvments: Cray vector computers, AMD K6 and Athlon, Intel P5
200 and Pentium Pro/II/III.
201 * The mpf_get_prec function now works as it did in GMP 2.
202 * New utilities for auto-tuning and speed measuring.
203 * Multiplication now optionally uses FFT for very large operands. (To enable
204 it, pass --enable-fft to configure.)
205 * Support for new systems: Solaris running on x86, FreeBSD 5, HP-UX 11, Cray
206 vector computers, Rhapsody, Nextstep/Openstep, MacOS.
207 * Support for shared libraries on 32-bit HPPA.
208 * New integer functions: mpz_mul_si, mpz_odd_p, mpz_even_p.
209 * New Kronecker symbol functions: mpz_kronecker_si, mpz_kronecker_ui,
210 mpz_si_kronecker, mpz_ui_kronecker.
211 * New rational functions: mpq_out_str, mpq_swap.
212 * New float functions: mpf_swap.
213 * New mpn functions: mpn_divexact_by3c, mpn_tdiv_qr.
214 * New EXPERIMENTAL function layer for accurate floating-point arithmetic, mpfr.
215 To try it, pass --enable-mpfr to configure. See the mpfr subdirectory for
216 more information; it is not documented in the main GMP manual.
219 Changes between GMP version 3.0 and 3.0.1
221 * Memory leaks in gmp_randinit and mpz_probab_prime_p fixed.
222 * Documentation for gmp_randinit fixed. Misc documentation errors fixed.
225 Changes between GMP version 2.0 and 3.0
227 * Source level compatibility with past releases (except mpn_gcd).
229 * Much improved speed thanks to both host independent and host dependent
231 * Switch to autoconf/automake/libtool.
232 * Support for building libgmp as a shared library.
233 * Multiplication and squaring using 3-way Toom-Cook.
234 * Division using the Burnikel-Ziegler method.
235 * New functions computing binomial coefficients: mpz_bin_ui, mpz_bin_uiui.
236 * New function computing Fibonacci numbers: mpz_fib_ui.
237 * New random number generators: mpf_urandomb, mpz_rrandomb, mpz_urandomb,
238 mpz_urandomm, gmp_randclear, gmp_randinit, gmp_randinit_lc_2exp, gmp_randseed,
240 * New function for quickly extracting limbs: mpz_getlimbn.
241 * New functions performing integer size tests: mpz_fits_sint_p,
242 mpz_fits_slong_p, mpz_fits_sshort_p, mpz_fits_uint_p, mpz_fits_ulong_p,
244 * New mpf functions: mpf_ceil, mpf_floor, mpf_pow_ui, mpf_trunc.
245 * New mpq function: mpq_set_d.
246 * New mpz functions: mpz_addmul_ui, mpz_cmpabs, mpz_cmpabs_ui, mpz_lcm,
247 mpz_nextprime, mpz_perfect_power_p, mpz_remove, mpz_root, mpz_swap,
248 mpz_tdiv_ui, mpz_tstbit, mpz_xor.
249 * New mpn function: mpn_divexact_by3.
250 * New CPU support: DEC Alpha 21264, AMD K6 and Athlon, HPPA 2.0 and 64,
251 Intel Pentium Pro and Pentium-II/III, Sparc 64, PowerPC 64.
252 * Almost 10 times faster mpz_invert and mpn_gcdext.
253 * The interface of mpn_gcd has changed.
254 * Better support for MIPS R4x000 and R5000 under Irix 6.
255 * Improved support for SPARCv8 and SPARCv9 processors.
258 Changes between GMP version 2.0 and 2.0.2
263 Changes between GMP version 1.3.2 and 2.0
265 * Division routines in the mpz class have changed. There are three classes of
266 functions, that rounds the quotient to -infinity, 0, and +infinity,
267 respectively. The first class of functions have names that begin with
268 mpz_fdiv (f is short for floor), the second class' names begin with mpz_tdiv
269 (t is short for trunc), and the third class' names begin with mpz_cdiv (c is
272 The old division routines beginning with mpz_m are similar to the new
273 mpz_fdiv, with the exception that some of the new functions return useful
276 The old function names can still be used. All the old functions names will
277 now do floor division, not trunc division as some of them used to. This was
278 changed to make the functions more compatible with common mathematical
281 The mpz_mod and mpz_mod_ui functions now compute the mathematical mod
282 function. I.e., the sign of the 2nd argument is ignored.
284 * The mpq assignment functions do not canonicalize their results. A new
285 function, mpq_canonicalize must be called by the user if the result is not
286 known to be canonical.
287 * The mpn functions are now documented. These functions are intended for
288 very time critical applications, or applications that need full control over
289 memory allocation. Note that the mpn interface is irregular and hard to
291 * New functions for arbitrary precision floating point arithmetic. Names
292 begin with `mpf_'. Associated type mpf_t.
293 * New and improved mpz functions, including much faster GCD, fast exact
294 division (mpz_divexact), bit scan (mpz_scan0 and mpz_scan1), and number
295 theoretical functions like Jacobi (mpz_jacobi) and multiplicative inverse
297 * New variable types (mpz_t and mpq_t) are available that makes syntax of
298 mpz and mpq calls nicer (no need for & before variables). The MP_INT and
299 MP_RAT types are still available for compatibility.
300 * Uses GNU configure. This makes it possible to choose target architecture
301 and CPU variant, and to compile into a separate object directory.
302 * Carefully optimized assembly for important inner loops. Support for DEC
303 Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, Intel
304 i960, Motorola MC68000, MC68020, MC88100, and MC88110, Motorola/IBM
305 PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7,
306 SuperSPARC, generic SPARCv8, and DEC VAX. Some support also for ARM,
307 Clipper, IBM ROMP (RT), and Pyramid AP/XP.
308 * Faster. Thanks to the assembler code, new algorithms, and general tuning.
309 In particular, the speed on machines without GCC is improved.
310 * Support for machines without alloca.
311 * Now under the LGPL.
313 INCOMPATIBILITIES BETWEEN GMP 1 AND GMP 2
315 * mpq assignment functions do not canonicalize their results.
316 * mpz division functions round differently.
317 * mpz mod functions now really compute mod.
318 * mpz_powm and mpz_powm_ui now really use mod for reduction.