Appendix A Contributors

Torbjörn Granlund wrote the original GMP library and is still the main developer. Code not explicitly attributed to others was contributed by Torbjörn. Several other individuals and organizations have contributed GMP. Here is a list in chronological order on first contribution:

Gunnar Sjödin and Hans Riesel helped with mathematical problems in early versions of the library.

Richard Stallman helped with the interface design and revised the first version of this manual.

Brian Beuning and Doug Lea helped with testing of early versions of the library and made creative suggestions.

John Amanatides of York University in Canada contributed the function mpz_probab_prime_p.

Paul Zimmermann wrote the REDC-based mpz_powm code, the Schönhage-Strassen FFT multiply code, and the Karatsuba square root code. He also improved the Toom3 code for GMP 4.2. Paul sparked the development of GMP 2, with his comparisons between bignum packages. The ECMNET project Paul is organizing was a driving force behind many of the optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth root code (with Torbjörn).

Ken Weber (Kent State University, Universidade Federal do Rio Grande do Sul) contributed now defunct versions of mpz_gcd, mpz_divexact, mpn_gcd, and mpn_bdivmod, partially supported by CNPq (Brazil) grant 301314194-2.

Per Bothner of Cygnus Support helped to set up GMP to use Cygnus’ configure. He has also made valuable suggestions and tested numerous intermediary releases.

Joachim Hollman was involved in the design of the mpf interface, and in the mpz design revisions for version 2.

Bennet Yee contributed the initial versions of mpz_jacobi and mpz_legendre.

Andreas Schwab contributed the files mpn/m68k/lshift.S and mpn/m68k/rshift.S (now in .asm form).

Robert Harley of Inria, France and David Seal of ARM, England, suggested clever improvements for population count. Robert also wrote highly optimized Karatsuba and 3-way Toom multiplication functions for GMP 3, and contributed the ARM assembly code.

Torsten Ekedahl of the Mathematical Department of Stockholm University provided significant inspiration during several phases of the GMP development. His mathematical expertise helped improve several algorithms.

Linus Nordberg wrote the new configure system based on autoconf and implemented the new random functions.

Kevin Ryde worked on a large number of things: optimized x86 code, m4 asm macros, parameter tuning, speed measuring, the configure system, function inlining, divisibility tests, bit scanning, Jacobi symbols, Fibonacci and Lucas number functions, printf and scanf functions, perl interface, demo expression parser, the algorithms chapter in the manual, gmpasm-mode.el, and various miscellaneous improvements elsewhere.

Kent Boortz made the Mac OS 9 port.

Steve Root helped write the optimized alpha 21264 assembly code.

Gerardo Ballabio wrote the gmpxx.h C++ class interface and the C++ istream input routines.

Jason Moxham rewrote mpz_fac_ui.

Pedro Gimeno implemented the Mersenne Twister and made other random number improvements.

Niels Möller wrote the sub-quadratic GCD, extended GCD and Jacobi code, the quadratic Hensel division code, and (with Torbjörn) the new divide and conquer division code for GMP 4.3. Niels also helped implement the new Toom multiply code for GMP 4.3 and implemented helper functions to simplify Toom evaluations for GMP 5.0. He wrote the original version of mpn_mulmod_bnm1, and he is the main author of the mini-gmp package used for gmp bootstrapping.

Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply strategy, and found the optimal strategies for evaluation and interpolation in Toom multiplication.

Marco Bodrato helped implement the new Toom multiply code for GMP 4.3 and implemented most of the new Toom multiply and squaring code for 5.0. He is the main author of the current mpn_mulmod_bnm1, mpn_mullo_n, and mpn_sqrlo. Marco also wrote the functions mpn_invert and mpn_invertappr, and improved the speed of integer root extraction. He is the author of mini-mpq, an additional layer to mini-gmp; of most of the combinatorial functions and the BPSW primality testing implementation, for both the main library and the mini-gmp package.

David Harvey suggested the internal function mpn_bdiv_dbm1, implementing division relevant to Toom multiplication. He also worked on fast assembly sequences, in particular on a fast AMD64 mpn_mul_basecase. He wrote the internal middle product functions mpn_mulmid_basecase, mpn_toom42_mulmid, mpn_mulmid_n and related helper routines.

Martin Boij wrote mpn_perfect_power_p.

Marc Glisse improved gmpxx.h: use fewer temporaries (faster), specializations of numeric_limits and common_type, C++11 features (move constructors, explicit bool conversion, UDL), make the conversion from mpq_class to mpz_class explicit, optimize operations where one argument is a small compile-time constant, replace some heap allocations by stack allocations. He also fixed the eofbit handling of C++ streams, and removed one division from mpq/aors.c.

David S Miller wrote assembly code for SPARC T3 and T4.

Mark Sofroniou cleaned up the types of mul_fft.c, letting it work for huge operands.

Ulrich Weigand ported GMP to the powerpc64le ABI.

(This list is chronological, not ordered after significance. If you have contributed to GMP but are not listed above, please tell about the omission!)

The development of floating point functions of GNU MP 2 was supported in part by the ESPRIT-BRA (Basic Research Activities) 6846 project POSSO (POlynomial System SOlving).

The development of GMP 2, 3, and 4.0 was supported in part by the IDA Center for Computing Sciences.

The development of GMP 4.3, 5.0, and 5.1 was supported in part by the Swedish Foundation for Strategic Research.

Thanks go to Hans Thorsen for donating an SGI system for the GMP test system environment.