Austin Schuh | dace2a6 | 2020-08-18 10:56:48 -0700 | [diff] [blame] | 1 | Copyright 1996, 1999-2016, 2018-2020 Free Software Foundation, Inc. |
| 2 | |
| 3 | Verbatim copying and distribution of this entire article is permitted in any |
| 4 | medium, provided this notice is preserved. |
| 5 | |
| 6 | Changes between GMP version 6.1.* and 6.2.0 |
| 7 | |
| 8 | BUGS FIXED |
| 9 | * gmp_snprintf now correctly reports an error (returns -1) when snprintf |
| 10 | does. |
| 11 | |
| 12 | * Conversion to double is now more robust even if the configuration process |
| 13 | does not recognize the float format. |
| 14 | |
| 15 | * mpz_powm could return a not completely normalised value, when the |
| 16 | exponent was 1 and the base < 0. |
| 17 | |
| 18 | * mpf_set_str could create invalid mpf_t variables for input strings with |
| 19 | many leading zeros. |
| 20 | |
| 21 | FEATURES |
| 22 | * New C++ functions factorial, primorial and fibonacci for mpz_class. |
| 23 | |
| 24 | * Functions to detect primality now substitute the first 24 Miller-Rabin |
| 25 | iterations with the BPSW test. |
| 26 | |
| 27 | * Mini-GMP: new functions mpz_2fac_ui and mpz_mfac_uiui. |
| 28 | |
| 29 | * Mini-GMP: mpz_sizeinbase, mpz_get_str, and mpz_set_str now support bases up |
| 30 | to 62. |
| 31 | |
| 32 | * Mini-GMP: added support for the mpq_t layer. |
| 33 | |
| 34 | * MIPS r6 cores are now supported. |
| 35 | |
| 36 | SPEEDUPS |
| 37 | * Major speedup for AMD Ryzen and Epyc thanks to an extensive set of assembly |
| 38 | code. |
| 39 | |
| 40 | * Major speedup for IBM POWER9 thanks to assembly code making use of new madd |
| 41 | instruction. |
| 42 | |
| 43 | * Speedup for 64-bit ARM CPUs thanks to new/improved assembly code. |
| 44 | |
| 45 | * The n-over-k function mpz_bin_ui has been reimplemented for great speedups |
| 46 | for large operands. |
| 47 | |
| 48 | * Speedup for the worst case of mpz_perfect_power_p. |
| 49 | |
| 50 | * Speedup for gcd for small and medium size operands. |
| 51 | |
| 52 | * Speedup for really huge multiplies thanks to much larger FFT tables. |
| 53 | |
| 54 | MISC |
| 55 | * Internal representation of the mpz_t variables now supports lazy |
| 56 | allocation; memory is allocated only when a value is stored. |
| 57 | |
| 58 | * Small improvements and better coverage for the test suite. |
| 59 | |
| 60 | * The tune/speed program can measure some more functions. |
| 61 | |
| 62 | * The low-level function mpn_mul no longer diverts to mpn_sqr, users should |
| 63 | call mpn_sqr directly when applicable. |
| 64 | |
| 65 | * New installed files gmp.pc and gmpxx.pc, for use with pkg-config. |
| 66 | Contributed by Hugh McMaster. |
| 67 | |
| 68 | Changes between GMP version 6.1.1 and 6.1.2 |
| 69 | |
| 70 | BUGS FIXED |
| 71 | * Mini-GMP: Fixed a division bug, which on a machine with 64-bit |
| 72 | unsigned long affects approximately 1 out of 2^32 divisors. |
| 73 | |
| 74 | * Mini-GMP: Fix mpz_set_str crash on inputs with a large number of |
| 75 | leading zeros. Also stricter input validation, rejecting inputs |
| 76 | with no digits. |
| 77 | |
| 78 | FEATURES |
| 79 | * Handle more systems which require PIC code in static libraries (e.g., |
| 80 | "hardened" Gentoo and Debian 9). |
| 81 | |
| 82 | * Configuration for arm (-32 and -64) has been rewritten, fixing poor |
| 83 | code selection for many CPUs. |
| 84 | |
| 85 | * Mini-GMP: Updated to the latest development version, including |
| 86 | new functions mpn_com and mpn_neg. |
| 87 | |
| 88 | SPEEDUPS |
| 89 | * None, except for arm CPUs affected by the configuration rewrite. |
| 90 | |
| 91 | MISC |
| 92 | - |
| 93 | |
| 94 | Changes between GMP version 6.1.0 and 6.1.1 |
| 95 | |
| 96 | BUGS FIXED |
| 97 | * Make Intel Broadwell configurations work on Windows. |
| 98 | |
| 99 | FEATURES |
| 100 | * Work around faulty cpuid on some recent Intel chips (this allows GMP to run |
| 101 | on Skylake Pentiums). |
| 102 | |
| 103 | * Support thumb-less ARM chips. |
| 104 | |
| 105 | Changes between GMP version 6.0.* and 6.1.0 |
| 106 | |
| 107 | BUGS FIXED |
| 108 | * The public function mpn_com is now correctly declared in gmp.h. |
| 109 | |
| 110 | * Healed possible failures of mpn_sec_sqr for non-cryptographic sizes for |
| 111 | some obsolete CPUs. |
| 112 | |
| 113 | * The option --disable-assembly now disables all inlined asm. |
| 114 | |
| 115 | * Fixed bug affecting mini-gmp's bitwise functions mpz_setbit, mpz_clrbit, |
| 116 | and mpz_combit. |
| 117 | |
| 118 | * Various problems related to precision for mpf have been fixed. |
| 119 | |
| 120 | * Fixed ABI incompatible stack alignment in calls from assembly code. |
| 121 | |
| 122 | * Fixed PIC bug in popcount affecting Intel processors using the 32-bit ABI. |
| 123 | |
| 124 | SPEEDUPS |
| 125 | * Speedup for Intel Broadwell and Skylake through assembly code making use of |
| 126 | new ADX instructions. |
| 127 | |
| 128 | * Square root is now faster when the remainder is not needed. Also the speed |
| 129 | to compute the k-th root improved, for small sizes. |
| 130 | |
| 131 | * Improved arm64 support. |
| 132 | |
| 133 | FEATURES |
| 134 | * New C++ functions gcd and lcm for mpz_class. |
| 135 | |
| 136 | * New public mpn functions mpn_divexact_1, mpn_zero_p, and mpn_cnd_swap. |
| 137 | |
| 138 | * New public mpq_cmp_z function, to efficiently compare rationals with |
| 139 | integers. |
| 140 | |
| 141 | * Support for Darwin in all x86 code, thereby enabling fat builds on Darwin. |
| 142 | |
| 143 | * Support for more 32-bit arm processors. |
| 144 | |
| 145 | * Support for compilation with clang/llvm on more platforms. Caution: GMP |
| 146 | triggers mis-compilation bugs in clang for many platforms, such as arm, x86 |
| 147 | (32-bit and 64-bit), powerpc, mips. |
| 148 | |
| 149 | * Support for AVX-less modern x86 CPUs. (Such support might be missing either |
| 150 | because the CPU vendor chose to disable AVX, or because the running kernel |
| 151 | lacks AVX context switch support.) |
| 152 | |
| 153 | * Stack usage trimmed; we believe 512 KiB is now sufficient for any GMP |
| 154 | call, irrespective of operand size. |
| 155 | |
| 156 | * Support for NetBSD under Xen; we switch off AVX unconditionally under |
| 157 | NetBSD since a bug in NetBSD makes AVX fail under Xen. |
| 158 | |
| 159 | MISC |
| 160 | * We now use manufacturers' code names for x86 CPUs, e.g., "haswell" instead |
| 161 | of names derived from the commercial brands. |
| 162 | |
| 163 | * Small improvements and better coverage for the test suite. |
| 164 | |
| 165 | * The various FreeBSD problems listed for 6.0.0 affect this release too. |
| 166 | |
| 167 | * Tuned values for FFT multiplications are provided for larger number on |
| 168 | many platforms. |
| 169 | |
| 170 | Changes between GMP version 5.1.* and 6.0.0 |
| 171 | |
| 172 | BUGS FIXED |
| 173 | * The function mpz_invert now considers any number invertible in Z/1Z. |
| 174 | |
| 175 | * The mpn multiply code now handles operands of more than 2^31 limbs |
| 176 | correctly. (Note however that the mpz code is limited to 2^32 bits on |
| 177 | 32-bit hosts and 2^37 bits on 64-bit hosts.) |
| 178 | |
| 179 | * Contains all fixes from release 5.1.3. |
| 180 | |
| 181 | SPEEDUPS |
| 182 | * Plain division of large operands is faster and more monotonous in operand |
| 183 | size. |
| 184 | |
| 185 | * Major speedup for ARM, in particular ARM Cortex-A15, thanks to improved |
| 186 | assembly. |
| 187 | |
| 188 | * Major speedup for SPARC T4/T5 and speedup also for T3, thanks to a lot of |
| 189 | new assembly. |
| 190 | |
| 191 | * Speedup for Intel Sandy Bridge, Ivy Bridge, Haswell, thanks to rewritten |
| 192 | and vastly expanded assembly support. Speedup also for the older Core 2 |
| 193 | and Nehalem. |
| 194 | |
| 195 | * Faster mixed arithmetic between mpq_class and double. |
| 196 | |
| 197 | * With g++, optimise more operations when one argument is a simple constant. |
| 198 | |
| 199 | FEATURES |
| 200 | * Support for new Intel and AMD CPUs. |
| 201 | |
| 202 | * Support for ARM64 alias Aarch64 alias ARMv8. |
| 203 | |
| 204 | * New public functions mpn_sec_mul and mpn_sec_sqr, implementing side-channel |
| 205 | silent multiplication and squaring. |
| 206 | |
| 207 | * New public functions mpn_sec_div_qr and mpn_sec_div_r, implementing |
| 208 | side-channel silent division. |
| 209 | |
| 210 | * New public functions mpn_cnd_add_n and mpn_cnd_sub_n. Side-channel silent |
| 211 | conditional addition and subtraction. |
| 212 | |
| 213 | * New public function mpn_sec_powm, implementing side-channel silent modexp. |
| 214 | |
| 215 | * New public function mpn_sec_invert, implementing side-channel silent |
| 216 | modular inversion. |
| 217 | |
| 218 | * Better support for applications which use the mpz_t type, but nevertheless |
| 219 | need to call some of the lower-level mpn functions. See the documentation |
| 220 | for mpz_limbs_read and related functions. |
| 221 | |
| 222 | MISC |
| 223 | * This release will not work on NetBSD 5.x, FreeBSD 7.x, 8.x or 9 series |
| 224 | before 9.3. The reason is that the m4 command is not correctly |
| 225 | implemented. (Workaround: Use an older GMP release, or install GNU m4 from |
| 226 | /usr/ports and tell GMP to use it.) |
| 227 | |
| 228 | * This release will not build properly on FreeBSD/amd64 before version 10 |
| 229 | using the 32-bit ABI (once a working m4 is installed). The reason is |
| 230 | broken limits.h. (Workaround: Use an older GMP release if using the 32-bit |
| 231 | ABI on these FreeBSD releases is important.) |
| 232 | |
| 233 | * This release will not work reliably on FreeBSD 10.0 for i386 or amd64 using |
| 234 | the 32-bit ABI. The reason is bugs in the compiler 'clang'. Depending on |
| 235 | CPU-dependent compiler flags, GMP may or may not be miscompiled in a |
| 236 | particular build. (Workaround: Compiling gcc from /usr/ports should work, |
| 237 | except that gcc circularly depends on GMP; we have not been able to test |
| 238 | that workaround due to FreeBSD 10.0 bugs affecting its ability to run under |
| 239 | KVM and Xen.) |
| 240 | |
| 241 | * This release will not compile on FreeBSD before version 10 for i386, |
| 242 | targeting any modern AMD processor. The reason is bugs in the old gcc |
| 243 | bundled with FreeBSD. (Workaround: install a less obsolete gcc from |
| 244 | /usr/ports and tell GMP to use it, or override the -march=amdfam10 |
| 245 | GMP configure command line argument.) |
| 246 | |
| 247 | |
| 248 | Changes between GMP version 5.1.2 and 5.1.3 |
| 249 | |
| 250 | BUGS FIXED |
| 251 | * The internal functions mpn_sbpi1_div_qr_sec mpn_sbpi1_div_r_sec could |
| 252 | compute garbage with a low probability. They are now rewritten, and the |
| 253 | test code has been improved. |
| 254 | |
| 255 | * A bug in the ia64 implementation of mpn_divrem_2, clobbering some |
| 256 | callee-save registers, has been fixed. This is an internal |
| 257 | function, with the bug manifesting itself as miscomputation in, |
| 258 | e.g., mpn_sqrtrem. |
| 259 | |
| 260 | * The documentation now correctly says 'const' for input arguments. |
| 261 | |
| 262 | SPEEDUPS |
| 263 | * None. |
| 264 | |
| 265 | FEATURES |
| 266 | * None. |
| 267 | |
| 268 | MISC |
| 269 | * None. |
| 270 | |
| 271 | |
| 272 | Changes between GMP version 5.1.1 and 5.1.2 |
| 273 | |
| 274 | BUGS FIXED |
| 275 | * A bug in mpz_powm_ui triggered by base arguments of at least 15000 decimal |
| 276 | digits or mod arguments of at least 7500 decimal digits has been fixed. |
| 277 | |
| 278 | * An AMD Bulldozer specific bug affecting the 64-bit Windows ABI has been |
| 279 | fixed. This bug was in a key function (mpn_mul_1) and made both Bulldozer |
| 280 | specific builds and fat builds run on Bulldozer completely non-functional. |
| 281 | |
| 282 | SPEEDUPS |
| 283 | * None. |
| 284 | |
| 285 | FEATURES |
| 286 | * None. |
| 287 | |
| 288 | MISC |
| 289 | * Fixes and generalisations to the test suite. |
| 290 | |
| 291 | * Minor portability enhancements. |
| 292 | |
| 293 | |
| 294 | Changes between GMP version 5.1.0 and 5.1.1 |
| 295 | |
| 296 | BUGS FIXED |
| 297 | * On Windows 64-bit, an error causing link errors about |
| 298 | __gmp_binvert_limb_table has been fixed. |
| 299 | |
| 300 | * Aarch64 alias ARM64 support now works. |
| 301 | |
| 302 | * A possible buffer overrun in mpz_ior has been fixed. |
| 303 | |
| 304 | * A rare sign flip in mpz_remove has been fixed. |
| 305 | |
| 306 | * A bug causing problems with mpf numbers with absolute value >= 2^31 has |
| 307 | been fixed. |
| 308 | |
| 309 | * Several bugs in mini-gmp have been fixed. |
| 310 | |
| 311 | * A bug caused by automake, related to the 'distcheck' target, has been fixed |
| 312 | by upgrading the automake used for GMP release engineering. |
| 313 | |
| 314 | SPEEDUPS |
| 315 | * None. |
| 316 | |
| 317 | FEATURES |
| 318 | * Preliminary support for the x32 ABI under x86-64. |
| 319 | |
| 320 | MISC |
| 321 | * The mini-gmp testsuite now tests the entire set of functions. |
| 322 | |
| 323 | * Various improvements of the GMP testsuite. |
| 324 | |
| 325 | |
| 326 | Changes between GMP version 5.0.* and 5.1.0 |
| 327 | |
| 328 | BUGS FIXED |
| 329 | * When reading a C++ number (like mpz_class) in an istream reaches the end |
| 330 | of the stream, the eofbit is now set. |
| 331 | |
| 332 | * The result sign of mpz_rootrem's remainder is now always correct. |
| 333 | |
| 334 | * The mpz_remove function now handles negative divisors. |
| 335 | |
| 336 | * Contains all fixes from release 5.0.5. |
| 337 | |
| 338 | SPEEDUPS |
| 339 | * The n-factorial and n-over-k functions have been reimplemented for great |
| 340 | speedups for small and large operands. |
| 341 | |
| 342 | * New subquadratic algorithm for the Kronecker/Jacobi/Legendre symbol. |
| 343 | |
| 344 | * Major speedup for ARM, in particular ARM Cortex-A9 and A15, thanks to broad |
| 345 | assembly support. |
| 346 | |
| 347 | * Significant speedup for POWER6 and POWER7 thanks to improved assembly. |
| 348 | |
| 349 | * The performance under M$ Windows' 64-bit ABI has been greatly improved |
| 350 | thanks to complete assembly support. |
| 351 | |
| 352 | * Minor speed improvements of many functions and for many platforms. |
| 353 | |
| 354 | FEATURES |
| 355 | * Many new CPUs recognised. |
| 356 | |
| 357 | * New functions for multi-factorials, and primorial: mpz_2fac_ui, |
| 358 | mpz_mfac_uiui and mpz_primorial_ui. |
| 359 | |
| 360 | * The mpz_powm_sec function now uses side-channel silent division for |
| 361 | converting into Montgomery residues. |
| 362 | |
| 363 | * The fat binary mechanism is now more robust in its CPU recognition. |
| 364 | |
| 365 | MISC |
| 366 | * Inclusion of assembly code is now controlled by the configure options |
| 367 | --enable-assembly and --disable-assembly. The "none" CPU target is gone. |
| 368 | |
| 369 | * In C++, the conversions mpq_class->mpz_class, mpf_class->mpz_class and |
| 370 | mpf_class->mpq_class are now explicit. |
| 371 | |
| 372 | * Includes "mini-gmp", a small, portable, but less efficient, implementation |
| 373 | of a subset of GMP's mpn and mpz interfaces. Used in GMP bootstrap, but it |
| 374 | can also be bundled with applications as a fallback when the real GMP |
| 375 | library is unavailable. |
| 376 | |
| 377 | * The ABIs under AIX are no longer called aix32 and aix64, but mode64 and 32. |
| 378 | This is more consistent with other powerpc systems. |
| 379 | |
| 380 | * The coverage of the testsuite has been improved, using the lcov tool. See |
| 381 | also https://gmplib.org/devel/lcov/. |
| 382 | |
| 383 | * It is now possible to compile GMP using a C++ compiler. |
| 384 | |
| 385 | * K&R C compilers are no longer supported. |
| 386 | |
| 387 | * The BSD MP compatibility functions have been removed. |
| 388 | |
| 389 | |
| 390 | Changes between GMP version 5.0.4 and 5.0.5 |
| 391 | |
| 392 | BUGS FIXED |
| 393 | * A bug causing AMD 11h processors to be treated like AMD 10h has been fixed. |
| 394 | The 11h processors do not correctly handle all 10h (aka K10) instructions, |
| 395 | and GMP's use of these instructions results in major miscomputations (not |
| 396 | as one would have hoped CPU traps of some 'illegal instruction' sort). |
| 397 | |
| 398 | * A bug affecting recent Intel Sandy Bridge CPUs resulting in configuration |
| 399 | failures has been fixed. |
| 400 | |
| 401 | SPEEDUPS |
| 402 | * None. |
| 403 | |
| 404 | FEATURES |
| 405 | * A couple of tests added to the self-check suite. |
| 406 | |
| 407 | MISC |
| 408 | * None. |
| 409 | |
| 410 | |
| 411 | Changes between GMP version 5.0.3 and 5.0.4 |
| 412 | |
| 413 | BUGS FIXED |
| 414 | * Thresholds in mpn_powm_sec for both fat and non-fat builds are now used |
| 415 | safely, plugging a one-word buffer overrun introduced in the 5.0.3 release |
| 416 | (for non-fat) and a multi-word buffer overrun that existed since 5.0 (for |
| 417 | fat). (We have not been able to provoke malign stack smashing in any of |
| 418 | the ~100 configurations explored by the GMP nightly builds, but the bug |
| 419 | should be assumed to be exploitable.) |
| 420 | |
| 421 | * Two bugs in multiplication code causing incorrect computation with |
| 422 | extremely low probability have been fixed. |
| 423 | |
| 424 | * A bug in the test suite causing buffer overruns during "make check", |
| 425 | sometimes leading to subsequent malloc crashes, has been fixed. |
| 426 | |
| 427 | * Two bugs in the gcd code have been fixed. They could lead to incorrect |
| 428 | results, but for uniformly distributed random operands, the likelihood for |
| 429 | that is infinitesimally small. (There was also a third bug, but that was |
| 430 | an incorrect ASSERT, which furthermore was not enabled by default.) |
| 431 | |
| 432 | * A bug affecting 32-bit PowerPC division has been fixed. The bug caused |
| 433 | miscomputation for certain divisors in the range 2^32 ... 2^64-1 (about 1 |
| 434 | in 2^30 of these). |
| 435 | |
| 436 | SPEEDUPS |
| 437 | * None, except indirectly through recognition of new CPUs, and through better |
| 438 | tuning parameters. |
| 439 | |
| 440 | FEATURES |
| 441 | * Some more tests added to the self-check suite. |
| 442 | |
| 443 | * The AMD "Bulldozer" CPU is now recognised. |
| 444 | |
| 445 | MISC |
| 446 | * None. |
| 447 | |
| 448 | |
| 449 | Changes between GMP version 5.0.2 and 5.0.3 |
| 450 | |
| 451 | BUGS FIXED |
| 452 | * A few minor bugs related to portability fixed. |
| 453 | |
| 454 | * A slight timing leak of the powm_sec functions have been sealed. (This |
| 455 | leak could possibly be used to extract the most significant few bits of the |
| 456 | exponent. "Few" here means at most 10.) |
| 457 | |
| 458 | * The mpz_nextprime function now runs a safer number of pseudo-random prime |
| 459 | tests. |
| 460 | |
| 461 | * A bug in division code possibly causing incorrect computation was fixed. |
| 462 | |
| 463 | SPEEDUPS |
| 464 | * None, except indirectly through recognition of new CPUs, and through better |
| 465 | tuning parameters. |
| 466 | |
| 467 | FEATURES |
| 468 | * New CPUs recognised. |
| 469 | |
| 470 | * IBM S/390 are now supported in both 31/32-bit and 64-bit mode. (We have |
| 471 | not been able to fully test this on any multilib machine, since IBM expired |
| 472 | our guest account a few days before our release.) |
| 473 | |
| 474 | MISC |
| 475 | * None. |
| 476 | |
| 477 | |
| 478 | Changes between GMP version 5.0.1 and 5.0.2 |
| 479 | |
| 480 | BUGS FIXED |
| 481 | * Many minor bugs related to portability fixed. |
| 482 | |
| 483 | * The support for HPPA 2.0N now works, after an assembly bug fix. |
| 484 | |
| 485 | * A test case type error has been fixed. The symptom of this bug was |
| 486 | spurious 'make check' failures. |
| 487 | |
| 488 | SPEEDUPS |
| 489 | * None, except indirectly through recognition of new CPUs. |
| 490 | |
| 491 | FEATURES |
| 492 | * Fat builds are now supported for 64-bit x86 processors also under Darwin. |
| 493 | |
| 494 | MISC |
| 495 | * None. |
| 496 | |
| 497 | |
| 498 | Changes between GMP version 5.0.0 and 5.0.1 |
| 499 | |
| 500 | BUGS FIXED |
| 501 | * Fat builds fixed. |
| 502 | |
| 503 | * Fixed crash for huge multiplies when old FFT_TABLE2 type of parameter |
| 504 | selection tables' sentinel was smaller than multiplied operands. |
| 505 | |
| 506 | * The solib numbers now reflect the removal of the documented but preliminary |
| 507 | mpn_bdivmod function; we correctly flag incompatibility with GMP 4.3. GMP |
| 508 | 5.0.0 has this wrong, and should perhaps be uninstalled to avoid confusion. |
| 509 | |
| 510 | SPEEDUPS |
| 511 | * Multiplication of large numbers has indirectly been sped up through better |
| 512 | FFT tuning and processor recognition. Since many operations depend on |
| 513 | multiplication, there will be a general speedup. |
| 514 | |
| 515 | FEATURES |
| 516 | * More Core i3, i5 an Core i7 processor models are recognised. |
| 517 | |
| 518 | * Fixes and workarounds for Mac OS quirks should make this GMP version build |
| 519 | using many of the different versions of "Xcode". |
| 520 | |
| 521 | MISC |
| 522 | * The amount of scratch memory needed for multiplication of huge numbers has |
| 523 | been reduced substantially (but is still larger than in GMP 4.3.) |
| 524 | |
| 525 | * Likewise, the amount of scratch memory needed for division of large numbers |
| 526 | has been reduced substantially. |
| 527 | |
| 528 | * The FFT tuning code of tune/tuneup.c has been completely rewritten, and |
| 529 | new, large FFT parameter selection tables are provided for many machines. |
| 530 | |
| 531 | * Upgraded to the latest autoconf, automake, libtool. |
| 532 | |
| 533 | |
| 534 | Changes between GMP version 4.3.X and 5.0.0 |
| 535 | |
| 536 | BUGS FIXED |
| 537 | * None (contains the same fixes as release 4.3.2). |
| 538 | |
| 539 | SPEEDUPS |
| 540 | * Multiplication has been overhauled: |
| 541 | (1) Multiplication of larger same size operands has been improved with |
| 542 | the addition of two new Toom functions and a new internal function |
| 543 | mpn_mulmod_bnm1 (computing U * V mod (B^n-1), B being the word base. |
| 544 | This latter function is used for the largest products, waiting for a |
| 545 | better Schoenhage-Strassen U * V mod (B^n+1) implementation. |
| 546 | (2) Likewise for squaring. |
| 547 | (3) Multiplication of different size operands has been improved with the |
| 548 | addition of many new Toom function, and by selecting underlying |
| 549 | functions better from the main multiply functions. |
| 550 | |
| 551 | * Division and mod have been overhauled: |
| 552 | (1) Plain "schoolbook" division is reimplemented using faster quotient |
| 553 | approximation. |
| 554 | (2) Division Q = N/D, R = N mod D where both the quotient and remainder |
| 555 | are needed now runs in time O(M(log(N))). This is an improvement of |
| 556 | a factor log(log(N)) |
| 557 | (3) Division where just the quotient is needed is now O(M(log(Q))) on |
| 558 | average. |
| 559 | (4) Modulo operations using Montgomery REDC form now take time O(M(n)). |
| 560 | (5) Exact division Q = N/D by means of mpz_divexact has been improved |
| 561 | for all sizes, and now runs in time O(M(log(N))). |
| 562 | |
| 563 | * The function mpz_powm is now faster for all sizes. Its complexity has |
| 564 | gone from O(M(n)log(n)m) to O(M(n)m) where n is the size of the modulo |
| 565 | argument and m is the size of the exponent. It is also radically |
| 566 | faster for even modulus, since it now partially factors such modulus |
| 567 | and performs two smaller modexp operations, then uses CRT. |
| 568 | |
| 569 | * The internal support for multiplication yielding just the lower n limbs |
| 570 | has been improved by using Mulders' algorithm. |
| 571 | |
| 572 | * Computation of inverses, both plain 1/N and 1/N mod B^n have been |
| 573 | improved by using well-tuned Newton iterations, and wrap-around |
| 574 | multiplication using mpn_mulmod_bnm1. |
| 575 | |
| 576 | * A new algorithm makes mpz_perfect_power_p asymptotically faster. |
| 577 | |
| 578 | * The function mpz_remove uses a much faster algorithm, is better tuned, |
| 579 | and also benefits from the division improvements. |
| 580 | |
| 581 | * Intel Atom and VIA Nano specific optimisations. |
| 582 | |
| 583 | * Plus hundreds of smaller improvements and tweaks! |
| 584 | |
| 585 | FEATURES |
| 586 | * New mpz function: mpz_powm_sec for side-channel quiet modexp |
| 587 | computations. |
| 588 | |
| 589 | * New mpn functions: mpn_sqr, mpn_and_n, mpn_ior_n, mpn_xor_n, mpn_nand_n, |
| 590 | mpn_nior_n, mpn_xnor_n, mpn_andn_n, mpn_iorn_n, mpn_com, mpn_neg, |
| 591 | mpn_copyi, mpn_copyd, mpn_zero. |
| 592 | |
| 593 | * The function mpn_tdiv_qr now allows certain argument overlap. |
| 594 | |
| 595 | * Support for fat binaries for 64-bit x86 processors has been added. |
| 596 | |
| 597 | * A new type, mp_bitcnt_t for bignum bit counts, has been introduced. |
| 598 | |
| 599 | * Support for Windows64 through mingw64 has been added. |
| 600 | |
| 601 | * The cofactors of mpz_gcdext and mpn_gcdext are now more strictly |
| 602 | normalised, returning to how GMP 4.2 worked. (Note that also release |
| 603 | 4.3.2 has this change.) |
| 604 | |
| 605 | MISC |
| 606 | * The mpn_mul function should no longer be used for squaring, |
| 607 | instead use the new mpn_sqr. |
| 608 | |
| 609 | * The algorithm selection has been improved, the number of thresholds have |
| 610 | more than doubled, and the tuning and use of existing thresholds have |
| 611 | been improved. |
| 612 | |
| 613 | * The tune/speed program can measure many of new functions. |
| 614 | |
| 615 | * The mpn_bdivmod function has been removed. We do not consider this an |
| 616 | incompatible change, since the function was marked as preliminary. |
| 617 | |
| 618 | * The testsuite has been enhanced in various ways. |
| 619 | |
| 620 | |
| 621 | Changes between GMP version 4.3.1 and 4.3.2 |
| 622 | |
| 623 | Bugs: |
| 624 | * Fixed bug in mpf_eq. |
| 625 | * Fixed overflow issues in mpz_set_str, mpz_inp_str, mpf_set_str, and |
| 626 | mpf_get_str. |
| 627 | * Avoid unbounded stack allocation for unbalanced multiplication. |
| 628 | * Fixed bug in FFT multiplication. |
| 629 | |
| 630 | Speedups: |
| 631 | * None, except that proper processor recognition helps affected processors. |
| 632 | |
| 633 | Features: |
| 634 | * Recognise more "Core 2" processor variants. |
| 635 | * The cofactors of mpz_gcdext and mpn_gcdext are now more strictly |
| 636 | normalised, returning to how GMP 4.2 worked. |
| 637 | |
| 638 | |
| 639 | Changes between GMP version 4.3.0 and 4.3.1 |
| 640 | |
| 641 | Bugs: |
| 642 | * Fixed bug in mpn_gcdext, affecting also mpz_gcdext and mpz_invert. |
| 643 | The bug could cause a cofactor to have a leading zero limb, which |
| 644 | could lead to crashes or miscomputation later on. |
| 645 | * Fixed some minor documentation issues. |
| 646 | |
| 647 | Speedups: |
| 648 | * None. |
| 649 | |
| 650 | Features: |
| 651 | * Workarounds for various issues with Mac OS X's build tools. |
| 652 | * Recognise more IBM "POWER" processor variants. |
| 653 | |
| 654 | |
| 655 | Changes between GMP version 4.2.X and 4.3.0 |
| 656 | |
| 657 | Bugs: |
| 658 | * Fixed bug in mpz_perfect_power_p with recognition of negative perfect |
| 659 | powers that can be written both as an even and odd power. |
| 660 | * We might accidentally have added bugs since there is a large amount of |
| 661 | new code in this release. |
| 662 | |
| 663 | Speedups: |
| 664 | * Vastly improved assembly code for x86-64 processors from AMD and Intel. |
| 665 | * Major improvements also for many other processor families, such as |
| 666 | Alpha, PowerPC, and Itanium. |
| 667 | * New sub-quadratic mpn_gcd and mpn_gcdext, as well as improved basecase |
| 668 | gcd code. |
| 669 | * The multiply FFT code has been slightly improved. |
| 670 | * Balanced multiplication now uses 4-way Toom in addition to schoolbook, |
| 671 | Karatsuba, 3-way Toom, and FFT. |
| 672 | * Unbalanced multiplication has been vastly improved. |
| 673 | * Improved schoolbook division by means of faster quotient approximation. |
| 674 | * Several new algorithms for division and mod by single limbs, giving |
| 675 | many-fold speedups. |
| 676 | * Improved nth root computations. |
| 677 | * The mpz_nextprime function uses sieving and is much faster. |
| 678 | * Countless minor tweaks. |
| 679 | |
| 680 | Features: |
| 681 | * Updated support for fat binaries for x86_32 include current processors |
| 682 | * Lots of new mpn internal interfaces. Some of them will become public |
| 683 | in a future GMP release. |
| 684 | * Support for the 32-bit ABI under x86-apple-darwin. |
| 685 | * x86 CPU recognition code should now default better for future |
| 686 | processors. |
| 687 | * The experimental nails feature does not work in this release, but |
| 688 | it might be re-enabled in the future. |
| 689 | |
| 690 | Misc: |
| 691 | * The gmp_version variable now always contains three parts. For this |
| 692 | release, it is "4.3.0". |
| 693 | |
| 694 | |
| 695 | Changes between GMP version 4.2.3 and 4.2.4 |
| 696 | |
| 697 | Bugs: |
| 698 | * Fix bug with parsing exponent '+' sign in mpf. |
| 699 | * Fix an allocation bug in mpf_set_str, also affecting mpf_init_set_str, and |
| 700 | mpf_inp_str. |
| 701 | |
| 702 | Speedups: |
| 703 | * None, except that proper processor recognition helps affected processors. |
| 704 | |
| 705 | Features: |
| 706 | * Recognize new AMD processors. |
| 707 | |
| 708 | |
| 709 | Changes between GMP version 4.2.2 and 4.2.3 |
| 710 | |
| 711 | Bugs: |
| 712 | * Fix x86 CPU recognition code to properly identify recent AMD and Intel |
| 713 | 64-bit processors. |
| 714 | * The >> operator of the C++ wrapper gmpxx.h now does floor rounding, not |
| 715 | truncation. |
| 716 | * Inline semantics now follow the C99 standard, and works with recent GCC |
| 717 | releases. |
| 718 | * C++ bitwise logical operations work for more types. |
| 719 | * For C++, gmp.h now includes cstdio, improving compiler compatibility. |
| 720 | * Bases > 36 now work properly in mpf_set_str. |
| 721 | |
| 722 | Speedups: |
| 723 | * None, except that proper processor recognition helps affected processors. |
| 724 | |
| 725 | Features: |
| 726 | * The allocation functions now detect overflow of the mpz_t type. This means |
| 727 | that overflow will now cause an abort, except when the allocation |
| 728 | computation itself overflows. (Such overflow can probably only happen in |
| 729 | powering functions; we will detect powering overflow in the future.) |
| 730 | |
| 731 | |
| 732 | Changes between GMP version 4.2.1 and 4.2.2 |
| 733 | |
| 734 | * License is now LGPL version 3. |
| 735 | |
| 736 | Bugs: |
| 737 | * Shared library numbers corrected for libcxx. |
| 738 | * Fixed serious bug in gmpxx.h where a=a+b*c would generate garbage. |
| 739 | Note that this only affects C++ programs. |
| 740 | * Fix crash in mpz_set_d for arguments with large negative exponent. |
| 741 | * Fix 32-bit ABI bug with Itanium assembly for popcount and hamdist. |
| 742 | * Fix assembly syntax problem for powerpc-ibm-aix with AIX native assembler. |
| 743 | * Fix problems with x86 --enable-fat, where the compiler where told to |
| 744 | generate code for the build machine, not plain i386 code as it should. |
| 745 | * Improved recognition of powerpc systems wrt Altivec/VMX capability. |
| 746 | * Misc minor fixes, mainly workarounds for compiler/assembler bugs. |
| 747 | |
| 748 | Speedups: |
| 749 | * "Core 2" and Pentium 4 processors, running in 64-bit mode will get a |
| 750 | slight boost as they are now specifically recognized. |
| 751 | |
| 752 | Features: |
| 753 | * New support for x86_64-solaris |
| 754 | * New, rudimentary support for x86-apple-darwin and x86_64-apple-darwin. |
| 755 | (Please see https://gmplib.org/macos.html for more information.) |
| 756 | |
| 757 | |
| 758 | Changes between GMP version 4.2 and 4.2.1 |
| 759 | |
| 760 | Bugs: |
| 761 | * Shared library numbers corrected. |
| 762 | * Broken support for 32-bit AIX fixed. |
| 763 | * Misc minor fixes. |
| 764 | |
| 765 | Speedups: |
| 766 | * Exact division (mpz_divexact) now falls back to plain division for large |
| 767 | operands. |
| 768 | |
| 769 | Features: |
| 770 | * Support for some new systems. |
| 771 | |
| 772 | |
| 773 | Changes between GMP version 4.1.4 and 4.2 |
| 774 | |
| 775 | Bugs: |
| 776 | * Minor bug fixes and code generalizations. |
| 777 | * Expanded and improved test suite. |
| 778 | |
| 779 | Speedups: |
| 780 | * Many minor optimizations, too many to mention here. |
| 781 | * Division now always subquadratic. |
| 782 | * Computation of n-factorial much faster. |
| 783 | * Added basic x86-64 assembly code. |
| 784 | * Floating-point output is now subquadratic for all bases. |
| 785 | * FFT multiply code now about 25% faster. |
| 786 | * Toom3 multiply code faster. |
| 787 | |
| 788 | Features: |
| 789 | * Much improved configure. |
| 790 | * Workarounds for many more compiler bugs. |
| 791 | * Temporary allocations are now made on the stack only if small. |
| 792 | * New systems supported: HPPA-2.0 gcc, IA-64 HP-UX, PowerPC-64 Darwin, |
| 793 | Sparc64 GNU/Linux. |
| 794 | * New i386 fat binaries, selecting optimised code at runtime (--enable-fat). |
| 795 | * New build option: --enable-profiling=instrument. |
| 796 | * New memory function: mp_get_memory_functions. |
| 797 | * New Mersenne Twister random numbers: gmp_randinit_mt, also now used for |
| 798 | gmp_randinit_default. |
| 799 | * New random functions: gmp_randinit_set, gmp_urandomb_ui, gmp_urandomm_ui. |
| 800 | * New integer functions: mpz_combit, mpz_rootrem. |
| 801 | * gmp_printf etc new type "M" for mp_limb_t. |
| 802 | * gmp_scanf and friends now accept C99 hex floats. |
| 803 | * Numeric input and output can now be in bases up to 62. |
| 804 | * Comparisons mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d recognise infinities. |
| 805 | * Conversions mpz_get_d, mpq_get_d, mpf_get_d truncate towards zero, |
| 806 | previously their behaviour was unspecified. |
| 807 | * Fixes for overflow issues with operands >= 2^31 bits. |
| 808 | |
| 809 | Caveats: |
| 810 | * mpfr is gone, and will from now on be released only separately. Please see |
| 811 | www.mpfr.org. |
| 812 | |
| 813 | |
| 814 | Changes between GMP version 4.1.3 and 4.1.4 |
| 815 | |
| 816 | * Bug fix to FFT multiplication code (crash for huge operands). |
| 817 | * Bug fix to mpf_sub (miscomputation). |
| 818 | * Support for powerpc64-gnu-linux. |
| 819 | * Better support for AMD64 in 32-bit mode. |
| 820 | * Upwardly binary compatible with 4.1.3, 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, |
| 821 | and 3.x versions. |
| 822 | |
| 823 | |
| 824 | Changes between GMP version 4.1.2 and 4.1.3 |
| 825 | |
| 826 | * Bug fix for FFT multiplication code (miscomputation). |
| 827 | * Bug fix to K6 assembly code for gcd. |
| 828 | * Bug fix to IA-64 assembly code for population count. |
| 829 | * Portability improvements, most notably functional AMD64 support. |
| 830 | * mpz_export allows NULL for countp parameter. |
| 831 | * Many minor bug fixes. |
| 832 | * mpz_export allows NULL for countp parameter. |
| 833 | * Upwardly binary compatible with 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, and 3.x |
| 834 | versions. |
| 835 | |
| 836 | |
| 837 | Changes between GMP version 4.1.1 and 4.1.2 |
| 838 | |
| 839 | * Bug fixes. |
| 840 | |
| 841 | |
| 842 | Changes between GMP version 4.1 and 4.1.1 |
| 843 | |
| 844 | * Bug fixes. |
| 845 | * New systems supported: NetBSD and OpenBSD sparc64. |
| 846 | |
| 847 | |
| 848 | Changes between GMP version 4.0.1 and 4.1 |
| 849 | |
| 850 | * Bug fixes. |
| 851 | * Speed improvements. |
| 852 | * Upwardly binary compatible with 4.0, 4.0.1, and 3.x versions. |
| 853 | * Asymptotically fast conversion to/from strings (mpz, mpq, mpn levels), but |
| 854 | also major speed improvements for tiny operands. |
| 855 | * mpn_get_str parameter restrictions relaxed. |
| 856 | * Major speed improvements for HPPA 2.0 systems. |
| 857 | * Major speed improvements for UltraSPARC systems. |
| 858 | * Major speed improvements for IA-64 systems (but still sub-optimal code). |
| 859 | * Extended test suite. |
| 860 | * mpfr is back, with many bug fixes and portability improvements. |
| 861 | * New function: mpz_ui_sub. |
| 862 | * New functions: mpz_export, mpz_import. |
| 863 | * Optimization for nth root functions (mpz_root, mpz_perfect_power_p). |
| 864 | * Optimization for extended gcd (mpz_gcdext, mpz_invert, mpn_gcdext). |
| 865 | * Generalized low-level number format, reserving a `nails' part of each |
| 866 | limb. (Please note that this is really experimental; some functions |
| 867 | are likely to compute garbage when nails are enabled.) |
| 868 | * Nails-enabled Alpha 21264 assembly code, allowing up to 75% better |
| 869 | performance. (Use --enable-nails=4 to enable it.) |
| 870 | |
| 871 | |
| 872 | Changes between GMP version 4.0 and 4.0.1 |
| 873 | |
| 874 | * Bug fixes. |
| 875 | |
| 876 | |
| 877 | Changes between GMP version 3.1.1 and 4.0 |
| 878 | |
| 879 | * Bug fixes. |
| 880 | * Speed improvements. |
| 881 | * Upwardly binary compatible with 3.x versions. |
| 882 | * New CPU support: IA-64, Pentium 4. |
| 883 | * Improved CPU support: 21264, Cray vector systems. |
| 884 | * Support for all MIPS ABIs: o32, n32, 64. |
| 885 | * New systems supported: Darwin, SCO, Windows DLLs. |
| 886 | * New divide-and-conquer square root algorithm. |
| 887 | * New algorithms chapter in the manual. |
| 888 | * New malloc reentrant temporary memory method. |
| 889 | * New C++ class interface by Gerardo Ballabio (beta). |
| 890 | * Revamped configure, featuring ABI selection. |
| 891 | * Speed improvements for mpz_powm and mpz_powm_ui (mainly affecting small |
| 892 | operands). |
| 893 | * mpz_perfect_power_p now properly recognizes 0, 1, and negative perfect |
| 894 | powers. |
| 895 | * mpz_hamdist now supports negative operands. |
| 896 | * mpz_jacobi now accepts non-positive denominators. |
| 897 | * mpz_powm now supports negative exponents. |
| 898 | * mpn_mul_1 operand overlap requirements relaxed. |
| 899 | * Float input and output uses locale specific decimal point where available. |
| 900 | * New gmp_printf, gmp_scanf and related functions. |
| 901 | * New division functions: mpz_cdiv_q_2exp, mpz_cdiv_r_2exp, mpz_divexact_ui. |
| 902 | * New divisibility tests: mpz_divisible_p, mpz_divisible_ui_p, |
| 903 | mpz_divisible_2exp_p, mpz_congruent_p, mpz_congruent_ui_p, |
| 904 | mpz_congruent_2exp_p. |
| 905 | * New Fibonacci function: mpz_fib2_ui. |
| 906 | * New Lucas number functions: mpz_lucnum_ui, mpz_lucnum2_ui. |
| 907 | * Other new integer functions: mpz_cmp_d, mpz_cmpabs_d, mpz_get_d_2exp, |
| 908 | mpz_init2, mpz_kronecker, mpz_lcm_ui, mpz_realloc2. |
| 909 | * New rational I/O: mpq_get_str, mpq_inp_str, mpq_out_str, mpq_set_str. |
| 910 | * Other new rational functions: mpq_abs, mpq_cmp_si, mpq_div_2exp, |
| 911 | mpq_mul_2exp, mpq_set_f. |
| 912 | * New float tests: mpf_integer_p, mpf_fits_sint_p, mpf_fits_slong_p, |
| 913 | mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, mpf_fits_ushort_p. |
| 914 | * Other new float functions: mpf_cmp_d, mpf_get_default_prec, mpf_get_si, |
| 915 | mpf_get_ui, mpf_get_d_2exp. |
| 916 | * New random functions: gmp_randinit_default, gmp_randinit_lc_2exp_size. |
| 917 | * New demo expression string parser (see demos/expr). |
| 918 | * New preliminary perl interface (see demos/perl). |
| 919 | * Tuned algorithm thresholds for many more CPUs. |
| 920 | |
| 921 | |
| 922 | Changes between GMP version 3.1 and 3.1.1 |
| 923 | |
| 924 | * Bug fixes for division (rare), mpf_get_str, FFT, and miscellaneous minor |
| 925 | things. |
| 926 | |
| 927 | |
| 928 | Changes between GMP version 3.0 and 3.1 |
| 929 | |
| 930 | * Bug fixes. |
| 931 | * Improved `make check' running more tests. |
| 932 | * Tuned algorithm cutoff points for many machines. This will improve speed for |
| 933 | a lot of operations, in some cases by a large amount. |
| 934 | * Major speed improvements: Alpha 21264. |
| 935 | * Some speed improvements: Cray vector computers, AMD K6 and Athlon, Intel P5 |
| 936 | and Pentium Pro/II/III. |
| 937 | * The mpf_get_prec function now works as it did in GMP 2. |
| 938 | * New utilities for auto-tuning and speed measuring. |
| 939 | * Multiplication now optionally uses FFT for very large operands. (To enable |
| 940 | it, pass --enable-fft to configure.) |
| 941 | * Support for new systems: Solaris running on x86, FreeBSD 5, HP-UX 11, Cray |
| 942 | vector computers, Rhapsody, Nextstep/Openstep, MacOS. |
| 943 | * Support for shared libraries on 32-bit HPPA. |
| 944 | * New integer functions: mpz_mul_si, mpz_odd_p, mpz_even_p. |
| 945 | * New Kronecker symbol functions: mpz_kronecker_si, mpz_kronecker_ui, |
| 946 | mpz_si_kronecker, mpz_ui_kronecker. |
| 947 | * New rational functions: mpq_out_str, mpq_swap. |
| 948 | * New float functions: mpf_swap. |
| 949 | * New mpn functions: mpn_divexact_by3c, mpn_tdiv_qr. |
| 950 | * New EXPERIMENTAL function layer for accurate floating-point arithmetic, mpfr. |
| 951 | To try it, pass --enable-mpfr to configure. See the mpfr subdirectory for |
| 952 | more information; it is not documented in the main GMP manual. |
| 953 | |
| 954 | |
| 955 | Changes between GMP version 3.0 and 3.0.1 |
| 956 | |
| 957 | * Memory leaks in gmp_randinit and mpz_probab_prime_p fixed. |
| 958 | * Documentation for gmp_randinit fixed. Misc documentation errors fixed. |
| 959 | |
| 960 | |
| 961 | Changes between GMP version 2.0 and 3.0 |
| 962 | |
| 963 | * Source level compatibility with past releases (except mpn_gcd). |
| 964 | * Bug fixes. |
| 965 | * Much improved speed thanks to both host independent and host dependent |
| 966 | optimizations. |
| 967 | * Switch to autoconf/automake/libtool. |
| 968 | * Support for building libgmp as a shared library. |
| 969 | * Multiplication and squaring using 3-way Toom-Cook. |
| 970 | * Division using the Burnikel-Ziegler method. |
| 971 | * New functions computing binomial coefficients: mpz_bin_ui, mpz_bin_uiui. |
| 972 | * New function computing Fibonacci numbers: mpz_fib_ui. |
| 973 | * New random number generators: mpf_urandomb, mpz_rrandomb, mpz_urandomb, |
| 974 | mpz_urandomm, gmp_randclear, gmp_randinit, gmp_randinit_lc_2exp, |
| 975 | gmp_randseed, gmp_randseed_ui. |
| 976 | * New function for quickly extracting limbs: mpz_getlimbn. |
| 977 | * New functions performing integer size tests: mpz_fits_sint_p, |
| 978 | mpz_fits_slong_p, mpz_fits_sshort_p, mpz_fits_uint_p, mpz_fits_ulong_p, |
| 979 | mpz_fits_ushort_p. |
| 980 | * New mpf functions: mpf_ceil, mpf_floor, mpf_pow_ui, mpf_trunc. |
| 981 | * New mpq function: mpq_set_d. |
| 982 | * New mpz functions: mpz_addmul_ui, mpz_cmpabs, mpz_cmpabs_ui, mpz_lcm, |
| 983 | mpz_nextprime, mpz_perfect_power_p, mpz_remove, mpz_root, mpz_swap, |
| 984 | mpz_tdiv_ui, mpz_tstbit, mpz_xor. |
| 985 | * New mpn function: mpn_divexact_by3. |
| 986 | * New CPU support: DEC Alpha 21264, AMD K6 and Athlon, HPPA 2.0 and 64, |
| 987 | Intel Pentium Pro and Pentium-II/III, Sparc 64, PowerPC 64. |
| 988 | * Almost 10 times faster mpz_invert and mpn_gcdext. |
| 989 | * The interface of mpn_gcd has changed. |
| 990 | * Better support for MIPS R4x000 and R5000 under Irix 6. |
| 991 | * Improved support for SPARCv8 and SPARCv9 processors. |
| 992 | |
| 993 | |
| 994 | Changes between GMP version 2.0 and 2.0.2 |
| 995 | |
| 996 | * Many bug fixes. |
| 997 | |
| 998 | |
| 999 | Changes between GMP version 1.3.2 and 2.0 |
| 1000 | |
| 1001 | * Division routines in the mpz class have changed. There are three classes of |
| 1002 | functions, that rounds the quotient to -infinity, 0, and +infinity, |
| 1003 | respectively. The first class of functions have names that begin with |
| 1004 | mpz_fdiv (f is short for floor), the second class' names begin with mpz_tdiv |
| 1005 | (t is short for trunc), and the third class' names begin with mpz_cdiv (c is |
| 1006 | short for ceil). |
| 1007 | |
| 1008 | The old division routines beginning with mpz_m are similar to the new |
| 1009 | mpz_fdiv, with the exception that some of the new functions return useful |
| 1010 | values. |
| 1011 | |
| 1012 | The old function names can still be used. All the old functions names will |
| 1013 | now do floor division, not trunc division as some of them used to. This was |
| 1014 | changed to make the functions more compatible with common mathematical |
| 1015 | practice. |
| 1016 | |
| 1017 | The mpz_mod and mpz_mod_ui functions now compute the mathematical mod |
| 1018 | function. I.e., the sign of the 2nd argument is ignored. |
| 1019 | |
| 1020 | * The mpq assignment functions do not canonicalize their results. A new |
| 1021 | function, mpq_canonicalize must be called by the user if the result is not |
| 1022 | known to be canonical. |
| 1023 | * The mpn functions are now documented. These functions are intended for |
| 1024 | very time critical applications, or applications that need full control over |
| 1025 | memory allocation. Note that the mpn interface is irregular and hard to |
| 1026 | use. |
| 1027 | * New functions for arbitrary precision floating point arithmetic. Names |
| 1028 | begin with `mpf_'. Associated type mpf_t. |
| 1029 | * New and improved mpz functions, including much faster GCD, fast exact |
| 1030 | division (mpz_divexact), bit scan (mpz_scan0 and mpz_scan1), and number |
| 1031 | theoretical functions like Jacobi (mpz_jacobi) and multiplicative inverse |
| 1032 | (mpz_invert). |
| 1033 | * New variable types (mpz_t and mpq_t) are available that makes syntax of |
| 1034 | mpz and mpq calls nicer (no need for & before variables). The MP_INT and |
| 1035 | MP_RAT types are still available for compatibility. |
| 1036 | * Uses GNU configure. This makes it possible to choose target architecture |
| 1037 | and CPU variant, and to compile into a separate object directory. |
| 1038 | * Carefully optimized assembly for important inner loops. Support for DEC |
| 1039 | Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, Intel |
| 1040 | i960, Motorola MC68000, MC68020, MC88100, and MC88110, Motorola/IBM |
| 1041 | PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7, |
| 1042 | SuperSPARC, generic SPARCv8, and DEC VAX. Some support also for ARM, |
| 1043 | Clipper, IBM ROMP (RT), and Pyramid AP/XP. |
| 1044 | * Faster. Thanks to the assembler code, new algorithms, and general tuning. |
| 1045 | In particular, the speed on machines without GCC is improved. |
| 1046 | * Support for machines without alloca. |
| 1047 | * Now under the LGPL. |
| 1048 | |
| 1049 | INCOMPATIBILITIES BETWEEN GMP 1 AND GMP 2 |
| 1050 | |
| 1051 | * mpq assignment functions do not canonicalize their results. |
| 1052 | * mpz division functions round differently. |
| 1053 | * mpz mod functions now really compute mod. |
| 1054 | * mpz_powm and mpz_powm_ui now really use mod for reduction. |