From 1cf7f992d7d9895108aa700d18f924cb9fc783ca Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 27 Aug 2010 12:41:40 +0200 Subject: [PATCH] now also with libgmp here (so we can statically link) --- misc/builddeps/dp.linux64/bin/blind_id | Bin 22874 -> 22874 bytes misc/builddeps/dp.linux64/include/gmp.h | 2280 ++++++ .../builddeps/dp.linux64/lib/libd0_blind_id.a | Bin 180796 -> 180828 bytes .../dp.linux64/lib/libd0_blind_id.la | 2 +- .../dp.linux64/lib/libd0_blind_id.so.0.0.0 | Bin 120037 -> 120085 bytes .../builddeps/dp.linux64/lib/libd0_rijndael.a | Bin 54854 -> 54854 bytes .../dp.linux64/lib/libd0_rijndael.la | 2 +- .../dp.linux64/lib/libd0_rijndael.so.0.0.0 | Bin 44751 -> 44799 bytes misc/builddeps/dp.linux64/lib/libgmp.a | Bin 0 -> 1171784 bytes misc/builddeps/dp.linux64/lib/libgmp.la | 41 + misc/builddeps/dp.linux64/lib/libgmp.so | 1 + misc/builddeps/dp.linux64/lib/libgmp.so.10 | 1 + .../builddeps/dp.linux64/lib/libgmp.so.10.0.1 | Bin 0 -> 511459 bytes misc/builddeps/dp.linux64/share/info/gmp.info | 178 + .../dp.linux64/share/info/gmp.info-1 | 7084 +++++++++++++++++ .../dp.linux64/share/info/gmp.info-2 | 3489 ++++++++ 16 files changed, 13076 insertions(+), 2 deletions(-) create mode 100644 misc/builddeps/dp.linux64/include/gmp.h create mode 100644 misc/builddeps/dp.linux64/lib/libgmp.a create mode 100755 misc/builddeps/dp.linux64/lib/libgmp.la create mode 120000 misc/builddeps/dp.linux64/lib/libgmp.so create mode 120000 misc/builddeps/dp.linux64/lib/libgmp.so.10 create mode 100755 misc/builddeps/dp.linux64/lib/libgmp.so.10.0.1 create mode 100644 misc/builddeps/dp.linux64/share/info/gmp.info create mode 100644 misc/builddeps/dp.linux64/share/info/gmp.info-1 create mode 100644 misc/builddeps/dp.linux64/share/info/gmp.info-2 diff --git a/misc/builddeps/dp.linux64/bin/blind_id b/misc/builddeps/dp.linux64/bin/blind_id index e6cca4ee1c5231d9f0a6a6bb1ab5ac776cc841cc..f235f08610727c173b216be4968cd6e423e94272 100755 GIT binary patch delta 269 zcmcb$iSgDZ#tjpg89gUYWOkS2XJ%j!VnBdHj1V^S(a%?Y2$BK;eh9^oF*#8opK;>k riwgT0vo=puTrLmfSUT!+W^p-ym1J!$bezt?m^E3^OLViGmkmDv&Py== delta 270 zcmcb$iSgDZ#tjpg89gRXWOkS2V`g9wVnBdHj1V@{%S)Ppfe{FQFoCo}K&ezFCj$c$L(AriT=k-YASn>whfoaZlM@y487EA> rsIZ?gWAjAC /* for std::istream, std::ostream, std::string */ +#include +#endif + + +/* Instantiated by configure. */ +#if ! defined (__GMP_WITHIN_CONFIGURE) +#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 +#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 +#define GMP_LIMB_BITS 64 +#define GMP_NAIL_BITS 0 +#endif +#define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) +#define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) +#define GMP_NUMB_MAX GMP_NUMB_MASK +#define GMP_NAIL_MASK (~ GMP_NUMB_MASK) + + +/* The following (everything under ifndef __GNU_MP__) must be identical in + gmp.h and mp.h to allow both to be included in an application or during + the library build. */ +#ifndef __GNU_MP__ +#define __GNU_MP__ 5 + +#define __need_size_t /* tell gcc stddef.h we only want size_t */ +#if defined (__cplusplus) +#include /* for size_t */ +#else +#include /* for size_t */ +#endif +#undef __need_size_t + +/* Instantiated by configure. */ +#if ! defined (__GMP_WITHIN_CONFIGURE) +/* #undef _LONG_LONG_LIMB */ +#define __GMP_LIBGMP_DLL 0 +#endif + + +/* __STDC__ - some ANSI compilers define this only to 0, hence the use of + "defined" and not "__STDC__-0". In particular Sun workshop C 5.0 + sets __STDC__ to 0, but requires "##" for token pasting. + + _AIX - gnu ansidecl.h asserts that all known AIX compilers are ANSI but + don't always define __STDC__. + + __DECC - current versions of DEC C (5.9 for instance) for alpha are ANSI, + but don't define __STDC__ in their default mode. Don't know if old + versions might have been K&R, but let's not worry about that unless + someone is still using one. + + _mips - gnu ansidecl.h says the RISC/OS MIPS compiler is ANSI in SVR4 + mode, but doesn't define __STDC__. + + _MSC_VER - Microsoft C is ANSI, but __STDC__ is undefined unless the /Za + option is given (in which case it's 1). + + _WIN32 - tested for by gnu ansidecl.h, no doubt on the assumption that + all w32 compilers are ansi. + + Note: This same set of tests is used by gen-psqr.c and + demos/expr/expr-impl.h, so if anything needs adding, then be sure to + update those too. */ + +#if defined (__STDC__) \ + || defined (__cplusplus) \ + || defined (_AIX) \ + || defined (__DECC) \ + || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ + || defined (_MSC_VER) \ + || defined (_WIN32) +#define __GMP_HAVE_CONST 1 +#define __GMP_HAVE_PROTOTYPES 1 +#define __GMP_HAVE_TOKEN_PASTE 1 +#else +#define __GMP_HAVE_CONST 0 +#define __GMP_HAVE_PROTOTYPES 0 +#define __GMP_HAVE_TOKEN_PASTE 0 +#endif + + +#if __GMP_HAVE_CONST +#define __gmp_const const +#define __gmp_signed signed +#else +#define __gmp_const +#define __gmp_signed +#endif + + +/* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in + all other circumstances. + + When compiling objects for libgmp, __GMP_DECLSPEC is an export directive, + or when compiling for an application it's an import directive. The two + cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles + (and not defined from an application). + + __GMP_DECLSPEC_XX is similarly used for libgmpxx. __GMP_WITHIN_GMPXX + indicates when building libgmpxx, and in that case libgmpxx functions are + exports, but libgmp functions which might get called are imports. + + libmp.la uses __GMP_DECLSPEC, just as if it were libgmp.la. libgmp and + libmp don't call each other, so there's no conflict or confusion. + + Libtool DLL_EXPORT define is not used. + + There's no attempt to support GMP built both static and DLL. Doing so + would mean applications would have to tell us which of the two is going + to be used when linking, and that seems very tedious and error prone if + using GMP by hand, and equally tedious from a package since autoconf and + automake don't give much help. + + __GMP_DECLSPEC is required on all documented global functions and + variables, the various internals in gmp-impl.h etc can be left unadorned. + But internals used by the test programs or speed measuring programs + should have __GMP_DECLSPEC, and certainly constants or variables must + have it or the wrong address will be resolved. + + In gcc __declspec can go at either the start or end of a prototype. + + In Microsoft C __declspec must go at the start, or after the type like + void __declspec(...) *foo()". There's no __dllexport or anything to + guard against someone foolish #defining dllexport. _export used to be + available, but no longer. + + In Borland C _export still exists, but needs to go after the type, like + "void _export foo();". Would have to change the __GMP_DECLSPEC syntax to + make use of that. Probably more trouble than it's worth. */ + +#if defined (__GNUC__) +#define __GMP_DECLSPEC_EXPORT __declspec(__dllexport__) +#define __GMP_DECLSPEC_IMPORT __declspec(__dllimport__) +#endif +#if defined (_MSC_VER) || defined (__BORLANDC__) +#define __GMP_DECLSPEC_EXPORT __declspec(dllexport) +#define __GMP_DECLSPEC_IMPORT __declspec(dllimport) +#endif +#ifdef __WATCOMC__ +#define __GMP_DECLSPEC_EXPORT __export +#define __GMP_DECLSPEC_IMPORT __import +#endif +#ifdef __IBMC__ +#define __GMP_DECLSPEC_EXPORT _Export +#define __GMP_DECLSPEC_IMPORT _Import +#endif + +#if __GMP_LIBGMP_DLL +#if __GMP_WITHIN_GMP +/* compiling to go into a DLL libgmp */ +#define __GMP_DECLSPEC __GMP_DECLSPEC_EXPORT +#else +/* compiling to go into an application which will link to a DLL libgmp */ +#define __GMP_DECLSPEC __GMP_DECLSPEC_IMPORT +#endif +#else +/* all other cases */ +#define __GMP_DECLSPEC +#endif + + +#ifdef __GMP_SHORT_LIMB +typedef unsigned int mp_limb_t; +typedef int mp_limb_signed_t; +#else +#ifdef _LONG_LONG_LIMB +typedef unsigned long long int mp_limb_t; +typedef long long int mp_limb_signed_t; +#else +typedef unsigned long int mp_limb_t; +typedef long int mp_limb_signed_t; +#endif +#endif +typedef unsigned long int mp_bitcnt_t; + +/* For reference, note that the name __mpz_struct gets into C++ mangled + function names, which means although the "__" suggests an internal, we + must leave this name for binary compatibility. */ +typedef struct +{ + int _mp_alloc; /* Number of *limbs* allocated and pointed + to by the _mp_d field. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpz_struct; + +#endif /* __GNU_MP__ */ + + +typedef __mpz_struct MP_INT; /* gmp 1 source compatibility */ +typedef __mpz_struct mpz_t[1]; + +typedef mp_limb_t * mp_ptr; +typedef __gmp_const mp_limb_t * mp_srcptr; +#if defined (_CRAY) && ! defined (_CRAYMPP) +/* plain `int' is much faster (48 bits) */ +#define __GMP_MP_SIZE_T_INT 1 +typedef int mp_size_t; +typedef int mp_exp_t; +#else +#define __GMP_MP_SIZE_T_INT 0 +typedef long int mp_size_t; +typedef long int mp_exp_t; +#endif + +typedef struct +{ + __mpz_struct _mp_num; + __mpz_struct _mp_den; +} __mpq_struct; + +typedef __mpq_struct MP_RAT; /* gmp 1 source compatibility */ +typedef __mpq_struct mpq_t[1]; + +typedef struct +{ + int _mp_prec; /* Max precision, in number of `mp_limb_t's. + Set by mpf_init and modified by + mpf_set_prec. The area pointed to by the + _mp_d field contains `prec' + 1 limbs. */ + int _mp_size; /* abs(_mp_size) is the number of limbs the + last field points to. If _mp_size is + negative this is a negative number. */ + mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ + mp_limb_t *_mp_d; /* Pointer to the limbs. */ +} __mpf_struct; + +/* typedef __mpf_struct MP_FLOAT; */ +typedef __mpf_struct mpf_t[1]; + +/* Available random number generation algorithms. */ +typedef enum +{ + GMP_RAND_ALG_DEFAULT = 0, + GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */ +} gmp_randalg_t; + +/* Random state struct. */ +typedef struct +{ + mpz_t _mp_seed; /* _mp_d member points to state of the generator. */ + gmp_randalg_t _mp_alg; /* Currently unused. */ + union { + void *_mp_lc; /* Pointer to function pointers structure. */ + } _mp_algdata; +} __gmp_randstate_struct; +typedef __gmp_randstate_struct gmp_randstate_t[1]; + +/* Types for function declarations in gmp files. */ +/* ??? Should not pollute user name space with these ??? */ +typedef __gmp_const __mpz_struct *mpz_srcptr; +typedef __mpz_struct *mpz_ptr; +typedef __gmp_const __mpf_struct *mpf_srcptr; +typedef __mpf_struct *mpf_ptr; +typedef __gmp_const __mpq_struct *mpq_srcptr; +typedef __mpq_struct *mpq_ptr; + + +/* This is not wanted in mp.h, so put it outside the __GNU_MP__ common + section. */ +#if __GMP_LIBGMP_DLL +#if __GMP_WITHIN_GMPXX +/* compiling to go into a DLL libgmpxx */ +#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_EXPORT +#else +/* compiling to go into a application which will link to a DLL libgmpxx */ +#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_IMPORT +#endif +#else +/* all other cases */ +#define __GMP_DECLSPEC_XX +#endif + + +#if __GMP_HAVE_PROTOTYPES +#define __GMP_PROTO(x) x +#else +#define __GMP_PROTO(x) () +#endif + +#ifndef __MPN +#if __GMP_HAVE_TOKEN_PASTE +#define __MPN(x) __gmpn_##x +#else +#define __MPN(x) __gmpn_/**/x +#endif +#endif + +/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, + defines EOF but not FILE. */ +#if defined (FILE) \ + || defined (H_STDIO) \ + || defined (_H_STDIO) /* AIX */ \ + || defined (_STDIO_H) /* glibc, Sun, SCO */ \ + || defined (_STDIO_H_) /* BSD, OSF */ \ + || defined (__STDIO_H) /* Borland */ \ + || defined (__STDIO_H__) /* IRIX */ \ + || defined (_STDIO_INCLUDED) /* HPUX */ \ + || defined (__dj_include_stdio_h_) /* DJGPP */ \ + || defined (_FILE_DEFINED) /* Microsoft */ \ + || defined (__STDIO__) /* Apple MPW MrC */ \ + || defined (_MSL_STDIO_H) /* Metrowerks */ \ + || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ + || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ +#define _GMP_H_HAVE_FILE 1 +#endif + +/* In ISO C, if a prototype involving "struct obstack *" is given without + that structure defined, then the struct is scoped down to just the + prototype, causing a conflict if it's subsequently defined for real. So + only give prototypes if we've got obstack.h. */ +#if defined (_OBSTACK_H) /* glibc */ +#define _GMP_H_HAVE_OBSTACK 1 +#endif + +/* The prototypes for gmp_vprintf etc are provided only if va_list is + available, via an application having included or . + Usually va_list is a typedef so can't be tested directly, but C99 + specifies that va_start is a macro (and it was normally a macro on past + systems too), so look for that. + + will define some sort of va_list for vprintf and vfprintf, but + let's not bother trying to use that since it's not standard and since + application uses for gmp_vprintf etc will almost certainly require the + whole or anyway. */ + +#ifdef va_start +#define _GMP_H_HAVE_VA_LIST 1 +#endif + +/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ +#if defined (__GNUC__) && defined (__GNUC_MINOR__) +#define __GMP_GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +#else +#define __GMP_GNUC_PREREQ(maj, min) 0 +#endif + +/* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes". Basically + it means a function does nothing but examine its arguments and memory + (global or via arguments) to generate a return value, but changes nothing + and has no side-effects. __GMP_NO_ATTRIBUTE_CONST_PURE lets + tune/common.c etc turn this off when trying to write timing loops. */ +#if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) +#define __GMP_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +#define __GMP_ATTRIBUTE_PURE +#endif + + +/* __GMP_CAST allows us to use static_cast in C++, so our macros are clean + to "g++ -Wold-style-cast". + + Casts in "extern inline" code within an extern "C" block don't induce + these warnings, so __GMP_CAST only needs to be used on documented + macros. */ + +#ifdef __cplusplus +#define __GMP_CAST(type, expr) (static_cast (expr)) +#else +#define __GMP_CAST(type, expr) ((type) (expr)) +#endif + + +/* An empty "throw ()" means the function doesn't throw any C++ exceptions, + this can save some stack frame info in applications. + + Currently it's given only on functions which never divide-by-zero etc, + don't allocate memory, and are expected to never need to allocate memory. + This leaves open the possibility of a C++ throw from a future GMP + exceptions scheme. + + mpz_set_ui etc are omitted to leave open the lazy allocation scheme + described in doc/tasks.html. mpz_get_d etc are omitted to leave open + exceptions for float overflows. + + Note that __GMP_NOTHROW must be given on any inlines the same as on their + prototypes (for g++ at least, where they're used together). Note also + that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like + __GMP_ATTRIBUTE_PURE. */ + +#if defined (__cplusplus) +#define __GMP_NOTHROW throw () +#else +#define __GMP_NOTHROW +#endif + + +/* PORTME: What other compilers have a useful "extern inline"? "static + inline" would be an acceptable substitute if the compiler (or linker) + discards unused statics. */ + + /* gcc has __inline__ in all modes, including strict ansi. Give a prototype + for an inline too, so as to correctly specify "dllimport" on windows, in + case the function is called rather than inlined. + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. */ +#ifdef __GNUC__ +#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) +#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__)) +#else +#define __GMP_EXTERN_INLINE extern __inline__ +#endif +#define __GMP_INLINE_PROTOTYPES 1 +#endif + +/* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1 + strict ANSI mode. Inlining is done even when not optimizing (ie. -O0 + mode, which is the default), but an unnecessary local copy of foo is + emitted unless -O is used. "extern __inline" is accepted, but the + "extern" appears to be ignored, ie. it becomes a plain global function + but which is inlined within its file. Don't know if all old versions of + DEC C supported __inline, but as a start let's do the right thing for + current versions. */ +#ifdef __DECC +#define __GMP_EXTERN_INLINE static __inline +#endif + +/* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict + ANSI mode (__STDC__ is 1 in that mode). Inlining only actually takes + place under -O. Without -O "foo" seems to be emitted whether it's used + or not, which is wasteful. "extern inline foo()" isn't useful, the + "extern" is apparently ignored, so foo is inlined if possible but also + emitted as a global, which causes multiple definition errors when + building a shared libgmp. */ +#ifdef __SCO_VERSION__ +#if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE static inline +#endif +#endif + +/* Microsoft's C compiler accepts __inline */ +#ifdef _MSC_VER +#define __GMP_EXTERN_INLINE __inline +#endif + +/* Recent enough Sun C compilers want "inline" */ +#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE inline +#endif + +/* Somewhat older Sun C compilers want "static inline" */ +#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \ + && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE static inline +#endif + + +/* C++ always has "inline" and since it's a normal feature the linker should + discard duplicate non-inlined copies, or if it doesn't then that's a + problem for everyone, not just GMP. */ +#if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE) +#define __GMP_EXTERN_INLINE inline +#endif + +/* Don't do any inlining within a configure run, since if the compiler ends + up emitting copies of the code into the object file it can end up + demanding the various support routines (like mpn_popcount) for linking, + making the "alloca" test and perhaps others fail. And on hppa ia64 a + pre-release gcc 3.2 was seen not respecting the "extern" in "extern + __inline__", triggering this problem too. */ +#if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE +#undef __GMP_EXTERN_INLINE +#endif + +/* By default, don't give a prototype when there's going to be an inline + version. Note in particular that Cray C++ objects to the combination of + prototype and inline. */ +#ifdef __GMP_EXTERN_INLINE +#ifndef __GMP_INLINE_PROTOTYPES +#define __GMP_INLINE_PROTOTYPES 0 +#endif +#else +#define __GMP_INLINE_PROTOTYPES 1 +#endif + + +#define __GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) +#define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i)) + +/* __GMP_USHRT_MAX is not "~ (unsigned short) 0" because short is promoted + to int by "~". */ +#define __GMP_UINT_MAX (~ (unsigned) 0) +#define __GMP_ULONG_MAX (~ (unsigned long) 0) +#define __GMP_USHRT_MAX ((unsigned short) ~0) + + +/* __builtin_expect is in gcc 3.0, and not in 2.95. */ +#if __GMP_GNUC_PREREQ (3,0) +#define __GMP_LIKELY(cond) __builtin_expect ((cond) != 0, 1) +#define __GMP_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0) +#else +#define __GMP_LIKELY(cond) (cond) +#define __GMP_UNLIKELY(cond) (cond) +#endif + +#ifdef _CRAY +#define __GMP_CRAY_Pragma(str) _Pragma (str) +#else +#define __GMP_CRAY_Pragma(str) +#endif + + +/* Allow direct user access to numerator and denominator of a mpq_t object. */ +#define mpq_numref(Q) (&((Q)->_mp_num)) +#define mpq_denref(Q) (&((Q)->_mp_den)) + + +#if defined (__cplusplus) +extern "C" { +using std::FILE; +#endif + +#define mp_set_memory_functions __gmp_set_memory_functions +__GMP_DECLSPEC void mp_set_memory_functions __GMP_PROTO ((void *(*) (size_t), + void *(*) (void *, size_t, size_t), + void (*) (void *, size_t))) __GMP_NOTHROW; + +#define mp_get_memory_functions __gmp_get_memory_functions +__GMP_DECLSPEC void mp_get_memory_functions __GMP_PROTO ((void *(**) (size_t), + void *(**) (void *, size_t, size_t), + void (**) (void *, size_t))) __GMP_NOTHROW; + +#define mp_bits_per_limb __gmp_bits_per_limb +__GMP_DECLSPEC extern __gmp_const int mp_bits_per_limb; + +#define gmp_errno __gmp_errno +__GMP_DECLSPEC extern int gmp_errno; + +#define gmp_version __gmp_version +__GMP_DECLSPEC extern __gmp_const char * __gmp_const gmp_version; + + +/**************** Random number routines. ****************/ + +/* obsolete */ +#define gmp_randinit __gmp_randinit +__GMP_DECLSPEC void gmp_randinit __GMP_PROTO ((gmp_randstate_t, gmp_randalg_t, ...)); + +#define gmp_randinit_default __gmp_randinit_default +__GMP_DECLSPEC void gmp_randinit_default __GMP_PROTO ((gmp_randstate_t)); + +#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp +__GMP_DECLSPEC void gmp_randinit_lc_2exp __GMP_PROTO ((gmp_randstate_t, + mpz_srcptr, unsigned long int, + mp_bitcnt_t)); + +#define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size +__GMP_DECLSPEC int gmp_randinit_lc_2exp_size __GMP_PROTO ((gmp_randstate_t, mp_bitcnt_t)); + +#define gmp_randinit_mt __gmp_randinit_mt +__GMP_DECLSPEC void gmp_randinit_mt __GMP_PROTO ((gmp_randstate_t)); + +#define gmp_randinit_set __gmp_randinit_set +__GMP_DECLSPEC void gmp_randinit_set __GMP_PROTO ((gmp_randstate_t, __gmp_const __gmp_randstate_struct *)); + +#define gmp_randseed __gmp_randseed +__GMP_DECLSPEC void gmp_randseed __GMP_PROTO ((gmp_randstate_t, mpz_srcptr)); + +#define gmp_randseed_ui __gmp_randseed_ui +__GMP_DECLSPEC void gmp_randseed_ui __GMP_PROTO ((gmp_randstate_t, unsigned long int)); + +#define gmp_randclear __gmp_randclear +__GMP_DECLSPEC void gmp_randclear __GMP_PROTO ((gmp_randstate_t)); + +#define gmp_urandomb_ui __gmp_urandomb_ui +__GMP_DECLSPEC unsigned long gmp_urandomb_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); + +#define gmp_urandomm_ui __gmp_urandomm_ui +__GMP_DECLSPEC unsigned long gmp_urandomm_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); + + +/**************** Formatted output routines. ****************/ + +#define gmp_asprintf __gmp_asprintf +__GMP_DECLSPEC int gmp_asprintf __GMP_PROTO ((char **, __gmp_const char *, ...)); + +#define gmp_fprintf __gmp_fprintf +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC int gmp_fprintf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); +#endif + +#define gmp_obstack_printf __gmp_obstack_printf +#if defined (_GMP_H_HAVE_OBSTACK) +__GMP_DECLSPEC int gmp_obstack_printf __GMP_PROTO ((struct obstack *, __gmp_const char *, ...)); +#endif + +#define gmp_obstack_vprintf __gmp_obstack_vprintf +#if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_obstack_vprintf __GMP_PROTO ((struct obstack *, __gmp_const char *, va_list)); +#endif + +#define gmp_printf __gmp_printf +__GMP_DECLSPEC int gmp_printf __GMP_PROTO ((__gmp_const char *, ...)); + +#define gmp_snprintf __gmp_snprintf +__GMP_DECLSPEC int gmp_snprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, ...)); + +#define gmp_sprintf __gmp_sprintf +__GMP_DECLSPEC int gmp_sprintf __GMP_PROTO ((char *, __gmp_const char *, ...)); + +#define gmp_vasprintf __gmp_vasprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vasprintf __GMP_PROTO ((char **, __gmp_const char *, va_list)); +#endif + +#define gmp_vfprintf __gmp_vfprintf +#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vfprintf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); +#endif + +#define gmp_vprintf __gmp_vprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vprintf __GMP_PROTO ((__gmp_const char *, va_list)); +#endif + +#define gmp_vsnprintf __gmp_vsnprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsnprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, va_list)); +#endif + +#define gmp_vsprintf __gmp_vsprintf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsprintf __GMP_PROTO ((char *, __gmp_const char *, va_list)); +#endif + + +/**************** Formatted input routines. ****************/ + +#define gmp_fscanf __gmp_fscanf +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC int gmp_fscanf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); +#endif + +#define gmp_scanf __gmp_scanf +__GMP_DECLSPEC int gmp_scanf __GMP_PROTO ((__gmp_const char *, ...)); + +#define gmp_sscanf __gmp_sscanf +__GMP_DECLSPEC int gmp_sscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, ...)); + +#define gmp_vfscanf __gmp_vfscanf +#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vfscanf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); +#endif + +#define gmp_vscanf __gmp_vscanf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vscanf __GMP_PROTO ((__gmp_const char *, va_list)); +#endif + +#define gmp_vsscanf __gmp_vsscanf +#if defined (_GMP_H_HAVE_VA_LIST) +__GMP_DECLSPEC int gmp_vsscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, va_list)); +#endif + + +/**************** Integer (i.e. Z) routines. ****************/ + +#define _mpz_realloc __gmpz_realloc +#define mpz_realloc __gmpz_realloc +__GMP_DECLSPEC void *_mpz_realloc __GMP_PROTO ((mpz_ptr, mp_size_t)); + +#define mpz_abs __gmpz_abs +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs) +__GMP_DECLSPEC void mpz_abs __GMP_PROTO ((mpz_ptr, mpz_srcptr)); +#endif + +#define mpz_add __gmpz_add +__GMP_DECLSPEC void mpz_add __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_add_ui __gmpz_add_ui +__GMP_DECLSPEC void mpz_add_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_addmul __gmpz_addmul +__GMP_DECLSPEC void mpz_addmul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_addmul_ui __gmpz_addmul_ui +__GMP_DECLSPEC void mpz_addmul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_and __gmpz_and +__GMP_DECLSPEC void mpz_and __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_array_init __gmpz_array_init +__GMP_DECLSPEC void mpz_array_init __GMP_PROTO ((mpz_ptr, mp_size_t, mp_size_t)); + +#define mpz_bin_ui __gmpz_bin_ui +__GMP_DECLSPEC void mpz_bin_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_bin_uiui __gmpz_bin_uiui +__GMP_DECLSPEC void mpz_bin_uiui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); + +#define mpz_cdiv_q __gmpz_cdiv_q +__GMP_DECLSPEC void mpz_cdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp +__GMP_DECLSPEC void mpz_cdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); + +#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_cdiv_qr __gmpz_cdiv_qr +__GMP_DECLSPEC void mpz_cdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_cdiv_r __gmpz_cdiv_r +__GMP_DECLSPEC void mpz_cdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp +__GMP_DECLSPEC void mpz_cdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_cdiv_ui __gmpz_cdiv_ui +__GMP_DECLSPEC unsigned long int mpz_cdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; + +#define mpz_clear __gmpz_clear +__GMP_DECLSPEC void mpz_clear __GMP_PROTO ((mpz_ptr)); + +#define mpz_clears __gmpz_clears +__GMP_DECLSPEC void mpz_clears __GMP_PROTO ((mpz_ptr, ...)); + +#define mpz_clrbit __gmpz_clrbit +__GMP_DECLSPEC void mpz_clrbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); + +#define mpz_cmp __gmpz_cmp +__GMP_DECLSPEC int mpz_cmp __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmp_d __gmpz_cmp_d +__GMP_DECLSPEC int mpz_cmp_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; + +#define _mpz_cmp_si __gmpz_cmp_si +__GMP_DECLSPEC int _mpz_cmp_si __GMP_PROTO ((mpz_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define _mpz_cmp_ui __gmpz_cmp_ui +__GMP_DECLSPEC int _mpz_cmp_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs __gmpz_cmpabs +__GMP_DECLSPEC int mpz_cmpabs __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs_d __gmpz_cmpabs_d +__GMP_DECLSPEC int mpz_cmpabs_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; + +#define mpz_cmpabs_ui __gmpz_cmpabs_ui +__GMP_DECLSPEC int mpz_cmpabs_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_com __gmpz_com +__GMP_DECLSPEC void mpz_com __GMP_PROTO ((mpz_ptr, mpz_srcptr)); + +#define mpz_combit __gmpz_combit +__GMP_DECLSPEC void mpz_combit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); + +#define mpz_congruent_p __gmpz_congruent_p +__GMP_DECLSPEC int mpz_congruent_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_congruent_2exp_p __gmpz_congruent_2exp_p +__GMP_DECLSPEC int mpz_congruent_2exp_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_congruent_ui_p __gmpz_congruent_ui_p +__GMP_DECLSPEC int mpz_congruent_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long, unsigned long)) __GMP_ATTRIBUTE_PURE; + +#define mpz_divexact __gmpz_divexact +__GMP_DECLSPEC void mpz_divexact __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_divexact_ui __gmpz_divexact_ui +__GMP_DECLSPEC void mpz_divexact_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); + +#define mpz_divisible_p __gmpz_divisible_p +__GMP_DECLSPEC int mpz_divisible_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_divisible_ui_p __gmpz_divisible_ui_p +__GMP_DECLSPEC int mpz_divisible_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; + +#define mpz_divisible_2exp_p __gmpz_divisible_2exp_p +__GMP_DECLSPEC int mpz_divisible_2exp_p __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_dump __gmpz_dump +__GMP_DECLSPEC void mpz_dump __GMP_PROTO ((mpz_srcptr)); + +#define mpz_export __gmpz_export +__GMP_DECLSPEC void *mpz_export __GMP_PROTO ((void *, size_t *, int, size_t, int, size_t, mpz_srcptr)); + +#define mpz_fac_ui __gmpz_fac_ui +__GMP_DECLSPEC void mpz_fac_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); + +#define mpz_fdiv_q __gmpz_fdiv_q +__GMP_DECLSPEC void mpz_fdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp +__GMP_DECLSPEC void mpz_fdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_fdiv_qr __gmpz_fdiv_qr +__GMP_DECLSPEC void mpz_fdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_fdiv_r __gmpz_fdiv_r +__GMP_DECLSPEC void mpz_fdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp +__GMP_DECLSPEC void mpz_fdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_fdiv_ui __gmpz_fdiv_ui +__GMP_DECLSPEC unsigned long int mpz_fdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; + +#define mpz_fib_ui __gmpz_fib_ui +__GMP_DECLSPEC void mpz_fib_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); + +#define mpz_fib2_ui __gmpz_fib2_ui +__GMP_DECLSPEC void mpz_fib2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); + +#define mpz_fits_sint_p __gmpz_fits_sint_p +__GMP_DECLSPEC int mpz_fits_sint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_slong_p __gmpz_fits_slong_p +__GMP_DECLSPEC int mpz_fits_slong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_sshort_p __gmpz_fits_sshort_p +__GMP_DECLSPEC int mpz_fits_sshort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_fits_uint_p __gmpz_fits_uint_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p) +__GMP_DECLSPEC int mpz_fits_uint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_fits_ulong_p __gmpz_fits_ulong_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p) +__GMP_DECLSPEC int mpz_fits_ulong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_fits_ushort_p __gmpz_fits_ushort_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p) +__GMP_DECLSPEC int mpz_fits_ushort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_gcd __gmpz_gcd +__GMP_DECLSPEC void mpz_gcd __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_gcd_ui __gmpz_gcd_ui +__GMP_DECLSPEC unsigned long int mpz_gcd_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_gcdext __gmpz_gcdext +__GMP_DECLSPEC void mpz_gcdext __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_get_d __gmpz_get_d +__GMP_DECLSPEC double mpz_get_d __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_get_d_2exp __gmpz_get_d_2exp +__GMP_DECLSPEC double mpz_get_d_2exp __GMP_PROTO ((signed long int *, mpz_srcptr)); + +#define mpz_get_si __gmpz_get_si +__GMP_DECLSPEC /* signed */ long int mpz_get_si __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_get_str __gmpz_get_str +__GMP_DECLSPEC char *mpz_get_str __GMP_PROTO ((char *, int, mpz_srcptr)); + +#define mpz_get_ui __gmpz_get_ui +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui) +__GMP_DECLSPEC unsigned long int mpz_get_ui __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_getlimbn __gmpz_getlimbn +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn) +__GMP_DECLSPEC mp_limb_t mpz_getlimbn __GMP_PROTO ((mpz_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_hamdist __gmpz_hamdist +__GMP_DECLSPEC mp_bitcnt_t mpz_hamdist __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_import __gmpz_import +__GMP_DECLSPEC void mpz_import __GMP_PROTO ((mpz_ptr, size_t, int, size_t, int, size_t, __gmp_const void *)); + +#define mpz_init __gmpz_init +__GMP_DECLSPEC void mpz_init __GMP_PROTO ((mpz_ptr)); + +#define mpz_init2 __gmpz_init2 +__GMP_DECLSPEC void mpz_init2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); + +#define mpz_inits __gmpz_inits +__GMP_DECLSPEC void mpz_inits __GMP_PROTO ((mpz_ptr, ...)); + +#define mpz_init_set __gmpz_init_set +__GMP_DECLSPEC void mpz_init_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); + +#define mpz_init_set_d __gmpz_init_set_d +__GMP_DECLSPEC void mpz_init_set_d __GMP_PROTO ((mpz_ptr, double)); + +#define mpz_init_set_si __gmpz_init_set_si +__GMP_DECLSPEC void mpz_init_set_si __GMP_PROTO ((mpz_ptr, signed long int)); + +#define mpz_init_set_str __gmpz_init_set_str +__GMP_DECLSPEC int mpz_init_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); + +#define mpz_init_set_ui __gmpz_init_set_ui +__GMP_DECLSPEC void mpz_init_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); + +#define mpz_inp_raw __gmpz_inp_raw +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_inp_raw __GMP_PROTO ((mpz_ptr, FILE *)); +#endif + +#define mpz_inp_str __gmpz_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_inp_str __GMP_PROTO ((mpz_ptr, FILE *, int)); +#endif + +#define mpz_invert __gmpz_invert +__GMP_DECLSPEC int mpz_invert __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_ior __gmpz_ior +__GMP_DECLSPEC void mpz_ior __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_jacobi __gmpz_jacobi +__GMP_DECLSPEC int mpz_jacobi __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_kronecker mpz_jacobi /* alias */ + +#define mpz_kronecker_si __gmpz_kronecker_si +__GMP_DECLSPEC int mpz_kronecker_si __GMP_PROTO ((mpz_srcptr, long)) __GMP_ATTRIBUTE_PURE; + +#define mpz_kronecker_ui __gmpz_kronecker_ui +__GMP_DECLSPEC int mpz_kronecker_ui __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; + +#define mpz_si_kronecker __gmpz_si_kronecker +__GMP_DECLSPEC int mpz_si_kronecker __GMP_PROTO ((long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_ui_kronecker __gmpz_ui_kronecker +__GMP_DECLSPEC int mpz_ui_kronecker __GMP_PROTO ((unsigned long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_lcm __gmpz_lcm +__GMP_DECLSPEC void mpz_lcm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_lcm_ui __gmpz_lcm_ui +__GMP_DECLSPEC void mpz_lcm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); + +#define mpz_legendre mpz_jacobi /* alias */ + +#define mpz_lucnum_ui __gmpz_lucnum_ui +__GMP_DECLSPEC void mpz_lucnum_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); + +#define mpz_lucnum2_ui __gmpz_lucnum2_ui +__GMP_DECLSPEC void mpz_lucnum2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); + +#define mpz_millerrabin __gmpz_millerrabin +__GMP_DECLSPEC int mpz_millerrabin __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; + +#define mpz_mod __gmpz_mod +__GMP_DECLSPEC void mpz_mod __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */ + +#define mpz_mul __gmpz_mul +__GMP_DECLSPEC void mpz_mul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_mul_2exp __gmpz_mul_2exp +__GMP_DECLSPEC void mpz_mul_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_mul_si __gmpz_mul_si +__GMP_DECLSPEC void mpz_mul_si __GMP_PROTO ((mpz_ptr, mpz_srcptr, long int)); + +#define mpz_mul_ui __gmpz_mul_ui +__GMP_DECLSPEC void mpz_mul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_neg __gmpz_neg +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg) +__GMP_DECLSPEC void mpz_neg __GMP_PROTO ((mpz_ptr, mpz_srcptr)); +#endif + +#define mpz_nextprime __gmpz_nextprime +__GMP_DECLSPEC void mpz_nextprime __GMP_PROTO ((mpz_ptr, mpz_srcptr)); + +#define mpz_out_raw __gmpz_out_raw +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_out_raw __GMP_PROTO ((FILE *, mpz_srcptr)); +#endif + +#define mpz_out_str __gmpz_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpz_out_str __GMP_PROTO ((FILE *, int, mpz_srcptr)); +#endif + +#define mpz_perfect_power_p __gmpz_perfect_power_p +__GMP_DECLSPEC int mpz_perfect_power_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpz_perfect_square_p __gmpz_perfect_square_p +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p) +__GMP_DECLSPEC int mpz_perfect_square_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_popcount __gmpz_popcount +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount) +__GMP_DECLSPEC mp_bitcnt_t mpz_popcount __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_pow_ui __gmpz_pow_ui +__GMP_DECLSPEC void mpz_pow_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_powm __gmpz_powm +__GMP_DECLSPEC void mpz_powm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_powm_sec __gmpz_powm_sec +__GMP_DECLSPEC void mpz_powm_sec __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_powm_ui __gmpz_powm_ui +__GMP_DECLSPEC void mpz_powm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); + +#define mpz_probab_prime_p __gmpz_probab_prime_p +__GMP_DECLSPEC int mpz_probab_prime_p __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; + +#define mpz_random __gmpz_random +__GMP_DECLSPEC void mpz_random __GMP_PROTO ((mpz_ptr, mp_size_t)); + +#define mpz_random2 __gmpz_random2 +__GMP_DECLSPEC void mpz_random2 __GMP_PROTO ((mpz_ptr, mp_size_t)); + +#define mpz_realloc2 __gmpz_realloc2 +__GMP_DECLSPEC void mpz_realloc2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); + +#define mpz_remove __gmpz_remove +__GMP_DECLSPEC unsigned long int mpz_remove __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_root __gmpz_root +__GMP_DECLSPEC int mpz_root __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_rootrem __gmpz_rootrem +__GMP_DECLSPEC void mpz_rootrem __GMP_PROTO ((mpz_ptr,mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_rrandomb __gmpz_rrandomb +__GMP_DECLSPEC void mpz_rrandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); + +#define mpz_scan0 __gmpz_scan0 +__GMP_DECLSPEC mp_bitcnt_t mpz_scan0 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_scan1 __gmpz_scan1 +__GMP_DECLSPEC mp_bitcnt_t mpz_scan1 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_set __gmpz_set +__GMP_DECLSPEC void mpz_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); + +#define mpz_set_d __gmpz_set_d +__GMP_DECLSPEC void mpz_set_d __GMP_PROTO ((mpz_ptr, double)); + +#define mpz_set_f __gmpz_set_f +__GMP_DECLSPEC void mpz_set_f __GMP_PROTO ((mpz_ptr, mpf_srcptr)); + +#define mpz_set_q __gmpz_set_q +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q) +__GMP_DECLSPEC void mpz_set_q __GMP_PROTO ((mpz_ptr, mpq_srcptr)); +#endif + +#define mpz_set_si __gmpz_set_si +__GMP_DECLSPEC void mpz_set_si __GMP_PROTO ((mpz_ptr, signed long int)); + +#define mpz_set_str __gmpz_set_str +__GMP_DECLSPEC int mpz_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); + +#define mpz_set_ui __gmpz_set_ui +__GMP_DECLSPEC void mpz_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); + +#define mpz_setbit __gmpz_setbit +__GMP_DECLSPEC void mpz_setbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); + +#define mpz_size __gmpz_size +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size) +__GMP_DECLSPEC size_t mpz_size __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpz_sizeinbase __gmpz_sizeinbase +__GMP_DECLSPEC size_t mpz_sizeinbase __GMP_PROTO ((mpz_srcptr, int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_sqrt __gmpz_sqrt +__GMP_DECLSPEC void mpz_sqrt __GMP_PROTO ((mpz_ptr, mpz_srcptr)); + +#define mpz_sqrtrem __gmpz_sqrtrem +__GMP_DECLSPEC void mpz_sqrtrem __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); + +#define mpz_sub __gmpz_sub +__GMP_DECLSPEC void mpz_sub __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_sub_ui __gmpz_sub_ui +__GMP_DECLSPEC void mpz_sub_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_ui_sub __gmpz_ui_sub +__GMP_DECLSPEC void mpz_ui_sub __GMP_PROTO ((mpz_ptr, unsigned long int, mpz_srcptr)); + +#define mpz_submul __gmpz_submul +__GMP_DECLSPEC void mpz_submul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_submul_ui __gmpz_submul_ui +__GMP_DECLSPEC void mpz_submul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_swap __gmpz_swap +__GMP_DECLSPEC void mpz_swap __GMP_PROTO ((mpz_ptr, mpz_ptr)) __GMP_NOTHROW; + +#define mpz_tdiv_ui __gmpz_tdiv_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; + +#define mpz_tdiv_q __gmpz_tdiv_q +__GMP_DECLSPEC void mpz_tdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp +__GMP_DECLSPEC void mpz_tdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_tdiv_qr __gmpz_tdiv_qr +__GMP_DECLSPEC void mpz_tdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_tdiv_r __gmpz_tdiv_r +__GMP_DECLSPEC void mpz_tdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + +#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp +__GMP_DECLSPEC void mpz_tdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); + +#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui +__GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); + +#define mpz_tstbit __gmpz_tstbit +__GMP_DECLSPEC int mpz_tstbit __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpz_ui_pow_ui __gmpz_ui_pow_ui +__GMP_DECLSPEC void mpz_ui_pow_ui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); + +#define mpz_urandomb __gmpz_urandomb +__GMP_DECLSPEC void mpz_urandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); + +#define mpz_urandomm __gmpz_urandomm +__GMP_DECLSPEC void mpz_urandomm __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mpz_srcptr)); + +#define mpz_xor __gmpz_xor +#define mpz_eor __gmpz_xor +__GMP_DECLSPEC void mpz_xor __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); + + +/**************** Rational (i.e. Q) routines. ****************/ + +#define mpq_abs __gmpq_abs +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs) +__GMP_DECLSPEC void mpq_abs __GMP_PROTO ((mpq_ptr, mpq_srcptr)); +#endif + +#define mpq_add __gmpq_add +__GMP_DECLSPEC void mpq_add __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); + +#define mpq_canonicalize __gmpq_canonicalize +__GMP_DECLSPEC void mpq_canonicalize __GMP_PROTO ((mpq_ptr)); + +#define mpq_clear __gmpq_clear +__GMP_DECLSPEC void mpq_clear __GMP_PROTO ((mpq_ptr)); + +#define mpq_clears __gmpq_clears +__GMP_DECLSPEC void mpq_clears __GMP_PROTO ((mpq_ptr, ...)); + +#define mpq_cmp __gmpq_cmp +__GMP_DECLSPEC int mpq_cmp __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define _mpq_cmp_si __gmpq_cmp_si +__GMP_DECLSPEC int _mpq_cmp_si __GMP_PROTO ((mpq_srcptr, long, unsigned long)) __GMP_ATTRIBUTE_PURE; + +#define _mpq_cmp_ui __gmpq_cmp_ui +__GMP_DECLSPEC int _mpq_cmp_ui __GMP_PROTO ((mpq_srcptr, unsigned long int, unsigned long int)) __GMP_ATTRIBUTE_PURE; + +#define mpq_div __gmpq_div +__GMP_DECLSPEC void mpq_div __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); + +#define mpq_div_2exp __gmpq_div_2exp +__GMP_DECLSPEC void mpq_div_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); + +#define mpq_equal __gmpq_equal +__GMP_DECLSPEC int mpq_equal __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpq_get_num __gmpq_get_num +__GMP_DECLSPEC void mpq_get_num __GMP_PROTO ((mpz_ptr, mpq_srcptr)); + +#define mpq_get_den __gmpq_get_den +__GMP_DECLSPEC void mpq_get_den __GMP_PROTO ((mpz_ptr, mpq_srcptr)); + +#define mpq_get_d __gmpq_get_d +__GMP_DECLSPEC double mpq_get_d __GMP_PROTO ((mpq_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpq_get_str __gmpq_get_str +__GMP_DECLSPEC char *mpq_get_str __GMP_PROTO ((char *, int, mpq_srcptr)); + +#define mpq_init __gmpq_init +__GMP_DECLSPEC void mpq_init __GMP_PROTO ((mpq_ptr)); + +#define mpq_inits __gmpq_inits +__GMP_DECLSPEC void mpq_inits __GMP_PROTO ((mpq_ptr, ...)); + +#define mpq_inp_str __gmpq_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpq_inp_str __GMP_PROTO ((mpq_ptr, FILE *, int)); +#endif + +#define mpq_inv __gmpq_inv +__GMP_DECLSPEC void mpq_inv __GMP_PROTO ((mpq_ptr, mpq_srcptr)); + +#define mpq_mul __gmpq_mul +__GMP_DECLSPEC void mpq_mul __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); + +#define mpq_mul_2exp __gmpq_mul_2exp +__GMP_DECLSPEC void mpq_mul_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); + +#define mpq_neg __gmpq_neg +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg) +__GMP_DECLSPEC void mpq_neg __GMP_PROTO ((mpq_ptr, mpq_srcptr)); +#endif + +#define mpq_out_str __gmpq_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpq_out_str __GMP_PROTO ((FILE *, int, mpq_srcptr)); +#endif + +#define mpq_set __gmpq_set +__GMP_DECLSPEC void mpq_set __GMP_PROTO ((mpq_ptr, mpq_srcptr)); + +#define mpq_set_d __gmpq_set_d +__GMP_DECLSPEC void mpq_set_d __GMP_PROTO ((mpq_ptr, double)); + +#define mpq_set_den __gmpq_set_den +__GMP_DECLSPEC void mpq_set_den __GMP_PROTO ((mpq_ptr, mpz_srcptr)); + +#define mpq_set_f __gmpq_set_f +__GMP_DECLSPEC void mpq_set_f __GMP_PROTO ((mpq_ptr, mpf_srcptr)); + +#define mpq_set_num __gmpq_set_num +__GMP_DECLSPEC void mpq_set_num __GMP_PROTO ((mpq_ptr, mpz_srcptr)); + +#define mpq_set_si __gmpq_set_si +__GMP_DECLSPEC void mpq_set_si __GMP_PROTO ((mpq_ptr, signed long int, unsigned long int)); + +#define mpq_set_str __gmpq_set_str +__GMP_DECLSPEC int mpq_set_str __GMP_PROTO ((mpq_ptr, __gmp_const char *, int)); + +#define mpq_set_ui __gmpq_set_ui +__GMP_DECLSPEC void mpq_set_ui __GMP_PROTO ((mpq_ptr, unsigned long int, unsigned long int)); + +#define mpq_set_z __gmpq_set_z +__GMP_DECLSPEC void mpq_set_z __GMP_PROTO ((mpq_ptr, mpz_srcptr)); + +#define mpq_sub __gmpq_sub +__GMP_DECLSPEC void mpq_sub __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); + +#define mpq_swap __gmpq_swap +__GMP_DECLSPEC void mpq_swap __GMP_PROTO ((mpq_ptr, mpq_ptr)) __GMP_NOTHROW; + + +/**************** Float (i.e. F) routines. ****************/ + +#define mpf_abs __gmpf_abs +__GMP_DECLSPEC void mpf_abs __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_add __gmpf_add +__GMP_DECLSPEC void mpf_add __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); + +#define mpf_add_ui __gmpf_add_ui +__GMP_DECLSPEC void mpf_add_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); +#define mpf_ceil __gmpf_ceil +__GMP_DECLSPEC void mpf_ceil __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_clear __gmpf_clear +__GMP_DECLSPEC void mpf_clear __GMP_PROTO ((mpf_ptr)); + +#define mpf_clears __gmpf_clears +__GMP_DECLSPEC void mpf_clears __GMP_PROTO ((mpf_ptr, ...)); + +#define mpf_cmp __gmpf_cmp +__GMP_DECLSPEC int mpf_cmp __GMP_PROTO ((mpf_srcptr, mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_d __gmpf_cmp_d +__GMP_DECLSPEC int mpf_cmp_d __GMP_PROTO ((mpf_srcptr, double)) __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_si __gmpf_cmp_si +__GMP_DECLSPEC int mpf_cmp_si __GMP_PROTO ((mpf_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_cmp_ui __gmpf_cmp_ui +__GMP_DECLSPEC int mpf_cmp_ui __GMP_PROTO ((mpf_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_div __gmpf_div +__GMP_DECLSPEC void mpf_div __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); + +#define mpf_div_2exp __gmpf_div_2exp +__GMP_DECLSPEC void mpf_div_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); + +#define mpf_div_ui __gmpf_div_ui +__GMP_DECLSPEC void mpf_div_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); + +#define mpf_dump __gmpf_dump +__GMP_DECLSPEC void mpf_dump __GMP_PROTO ((mpf_srcptr)); + +#define mpf_eq __gmpf_eq +__GMP_DECLSPEC int mpf_eq __GMP_PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_sint_p __gmpf_fits_sint_p +__GMP_DECLSPEC int mpf_fits_sint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_slong_p __gmpf_fits_slong_p +__GMP_DECLSPEC int mpf_fits_slong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_sshort_p __gmpf_fits_sshort_p +__GMP_DECLSPEC int mpf_fits_sshort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_uint_p __gmpf_fits_uint_p +__GMP_DECLSPEC int mpf_fits_uint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_ulong_p __gmpf_fits_ulong_p +__GMP_DECLSPEC int mpf_fits_ulong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_fits_ushort_p __gmpf_fits_ushort_p +__GMP_DECLSPEC int mpf_fits_ushort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_floor __gmpf_floor +__GMP_DECLSPEC void mpf_floor __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_get_d __gmpf_get_d +__GMP_DECLSPEC double mpf_get_d __GMP_PROTO ((mpf_srcptr)) __GMP_ATTRIBUTE_PURE; + +#define mpf_get_d_2exp __gmpf_get_d_2exp +__GMP_DECLSPEC double mpf_get_d_2exp __GMP_PROTO ((signed long int *, mpf_srcptr)); + +#define mpf_get_default_prec __gmpf_get_default_prec +__GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec __GMP_PROTO ((void)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_prec __gmpf_get_prec +__GMP_DECLSPEC mp_bitcnt_t mpf_get_prec __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_si __gmpf_get_si +__GMP_DECLSPEC long mpf_get_si __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_get_str __gmpf_get_str +__GMP_DECLSPEC char *mpf_get_str __GMP_PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); + +#define mpf_get_ui __gmpf_get_ui +__GMP_DECLSPEC unsigned long mpf_get_ui __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_init __gmpf_init +__GMP_DECLSPEC void mpf_init __GMP_PROTO ((mpf_ptr)); + +#define mpf_init2 __gmpf_init2 +__GMP_DECLSPEC void mpf_init2 __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); + +#define mpf_inits __gmpf_inits +__GMP_DECLSPEC void mpf_inits __GMP_PROTO ((mpf_ptr, ...)); + +#define mpf_init_set __gmpf_init_set +__GMP_DECLSPEC void mpf_init_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_init_set_d __gmpf_init_set_d +__GMP_DECLSPEC void mpf_init_set_d __GMP_PROTO ((mpf_ptr, double)); + +#define mpf_init_set_si __gmpf_init_set_si +__GMP_DECLSPEC void mpf_init_set_si __GMP_PROTO ((mpf_ptr, signed long int)); + +#define mpf_init_set_str __gmpf_init_set_str +__GMP_DECLSPEC int mpf_init_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); + +#define mpf_init_set_ui __gmpf_init_set_ui +__GMP_DECLSPEC void mpf_init_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); + +#define mpf_inp_str __gmpf_inp_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpf_inp_str __GMP_PROTO ((mpf_ptr, FILE *, int)); +#endif + +#define mpf_integer_p __gmpf_integer_p +__GMP_DECLSPEC int mpf_integer_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_mul __gmpf_mul +__GMP_DECLSPEC void mpf_mul __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); + +#define mpf_mul_2exp __gmpf_mul_2exp +__GMP_DECLSPEC void mpf_mul_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); + +#define mpf_mul_ui __gmpf_mul_ui +__GMP_DECLSPEC void mpf_mul_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); + +#define mpf_neg __gmpf_neg +__GMP_DECLSPEC void mpf_neg __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_out_str __gmpf_out_str +#ifdef _GMP_H_HAVE_FILE +__GMP_DECLSPEC size_t mpf_out_str __GMP_PROTO ((FILE *, int, size_t, mpf_srcptr)); +#endif + +#define mpf_pow_ui __gmpf_pow_ui +__GMP_DECLSPEC void mpf_pow_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); + +#define mpf_random2 __gmpf_random2 +__GMP_DECLSPEC void mpf_random2 __GMP_PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); + +#define mpf_reldiff __gmpf_reldiff +__GMP_DECLSPEC void mpf_reldiff __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); + +#define mpf_set __gmpf_set +__GMP_DECLSPEC void mpf_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_set_d __gmpf_set_d +__GMP_DECLSPEC void mpf_set_d __GMP_PROTO ((mpf_ptr, double)); + +#define mpf_set_default_prec __gmpf_set_default_prec +__GMP_DECLSPEC void mpf_set_default_prec __GMP_PROTO ((mp_bitcnt_t)) __GMP_NOTHROW; + +#define mpf_set_prec __gmpf_set_prec +__GMP_DECLSPEC void mpf_set_prec __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); + +#define mpf_set_prec_raw __gmpf_set_prec_raw +__GMP_DECLSPEC void mpf_set_prec_raw __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)) __GMP_NOTHROW; + +#define mpf_set_q __gmpf_set_q +__GMP_DECLSPEC void mpf_set_q __GMP_PROTO ((mpf_ptr, mpq_srcptr)); + +#define mpf_set_si __gmpf_set_si +__GMP_DECLSPEC void mpf_set_si __GMP_PROTO ((mpf_ptr, signed long int)); + +#define mpf_set_str __gmpf_set_str +__GMP_DECLSPEC int mpf_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); + +#define mpf_set_ui __gmpf_set_ui +__GMP_DECLSPEC void mpf_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); + +#define mpf_set_z __gmpf_set_z +__GMP_DECLSPEC void mpf_set_z __GMP_PROTO ((mpf_ptr, mpz_srcptr)); + +#define mpf_size __gmpf_size +__GMP_DECLSPEC size_t mpf_size __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpf_sqrt __gmpf_sqrt +__GMP_DECLSPEC void mpf_sqrt __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_sqrt_ui __gmpf_sqrt_ui +__GMP_DECLSPEC void mpf_sqrt_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); + +#define mpf_sub __gmpf_sub +__GMP_DECLSPEC void mpf_sub __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); + +#define mpf_sub_ui __gmpf_sub_ui +__GMP_DECLSPEC void mpf_sub_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); + +#define mpf_swap __gmpf_swap +__GMP_DECLSPEC void mpf_swap __GMP_PROTO ((mpf_ptr, mpf_ptr)) __GMP_NOTHROW; + +#define mpf_trunc __gmpf_trunc +__GMP_DECLSPEC void mpf_trunc __GMP_PROTO ((mpf_ptr, mpf_srcptr)); + +#define mpf_ui_div __gmpf_ui_div +__GMP_DECLSPEC void mpf_ui_div __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); + +#define mpf_ui_sub __gmpf_ui_sub +__GMP_DECLSPEC void mpf_ui_sub __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); + +#define mpf_urandomb __gmpf_urandomb +__GMP_DECLSPEC void mpf_urandomb __GMP_PROTO ((mpf_t, gmp_randstate_t, mp_bitcnt_t)); + + +/************ Low level positive-integer (i.e. N) routines. ************/ + +/* This is ugly, but we need to make user calls reach the prefixed function. */ + +#define mpn_add __MPN(add) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add) +__GMP_DECLSPEC mp_limb_t mpn_add __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); +#endif + +#define mpn_add_1 __MPN(add_1) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1) +__GMP_DECLSPEC mp_limb_t mpn_add_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; +#endif + +#define mpn_add_n __MPN(add_n) +__GMP_DECLSPEC mp_limb_t mpn_add_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); + +#define mpn_addmul_1 __MPN(addmul_1) +__GMP_DECLSPEC mp_limb_t mpn_addmul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); + +#define mpn_cmp __MPN(cmp) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp) +__GMP_DECLSPEC int mpn_cmp __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; +#endif + +#define mpn_divexact_by3(dst,src,size) \ + mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0)) + +#define mpn_divexact_by3c __MPN(divexact_by3c) +__GMP_DECLSPEC mp_limb_t mpn_divexact_by3c __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); + +#define mpn_divmod_1(qp,np,nsize,dlimb) \ + mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb) + +#define mpn_divrem __MPN(divrem) +__GMP_DECLSPEC mp_limb_t mpn_divrem __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); + +#define mpn_divrem_1 __MPN(divrem_1) +__GMP_DECLSPEC mp_limb_t mpn_divrem_1 __GMP_PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); + +#define mpn_divrem_2 __MPN(divrem_2) +__GMP_DECLSPEC mp_limb_t mpn_divrem_2 __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr)); + +#define mpn_gcd __MPN(gcd) +__GMP_DECLSPEC mp_size_t mpn_gcd __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); + +#define mpn_gcd_1 __MPN(gcd_1) +__GMP_DECLSPEC mp_limb_t mpn_gcd_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_gcdext_1 __MPN(gcdext_1) +__GMP_DECLSPEC mp_limb_t mpn_gcdext_1 __GMP_PROTO ((mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t)); + +#define mpn_gcdext __MPN(gcdext) +__GMP_DECLSPEC mp_size_t mpn_gcdext __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); + +#define mpn_get_str __MPN(get_str) +__GMP_DECLSPEC size_t mpn_get_str __GMP_PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); + +#define mpn_hamdist __MPN(hamdist) +__GMP_DECLSPEC mp_bitcnt_t mpn_hamdist __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpn_lshift __MPN(lshift) +__GMP_DECLSPEC mp_limb_t mpn_lshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); + +#define mpn_mod_1 __MPN(mod_1) +__GMP_DECLSPEC mp_limb_t mpn_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_mul __MPN(mul) +__GMP_DECLSPEC mp_limb_t mpn_mul __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); + +#define mpn_mul_1 __MPN(mul_1) +__GMP_DECLSPEC mp_limb_t mpn_mul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); + +#define mpn_mul_n __MPN(mul_n) +__GMP_DECLSPEC void mpn_mul_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); + +#define mpn_sqr __MPN(sqr) +__GMP_DECLSPEC void mpn_sqr __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); + +#define mpn_neg __MPN(neg) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg) +__GMP_DECLSPEC mp_limb_t mpn_neg __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); +#endif + +#define mpn_com __MPN(com) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_com) +__GMP_DECLSPEC void mpn_com __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); +#endif + +#define mpn_perfect_square_p __MPN(perfect_square_p) +__GMP_DECLSPEC int mpn_perfect_square_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_perfect_power_p __MPN(perfect_power_p) +__GMP_DECLSPEC int mpn_perfect_power_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_popcount __MPN(popcount) +__GMP_DECLSPEC mp_bitcnt_t mpn_popcount __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; + +#define mpn_pow_1 __MPN(pow_1) +__GMP_DECLSPEC mp_size_t mpn_pow_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr)); + +/* undocumented now, but retained here for upward compatibility */ +#define mpn_preinv_mod_1 __MPN(preinv_mod_1) +__GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_random __MPN(random) +__GMP_DECLSPEC void mpn_random __GMP_PROTO ((mp_ptr, mp_size_t)); + +#define mpn_random2 __MPN(random2) +__GMP_DECLSPEC void mpn_random2 __GMP_PROTO ((mp_ptr, mp_size_t)); + +#define mpn_rshift __MPN(rshift) +__GMP_DECLSPEC mp_limb_t mpn_rshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); + +#define mpn_scan0 __MPN(scan0) +__GMP_DECLSPEC mp_bitcnt_t mpn_scan0 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_scan1 __MPN(scan1) +__GMP_DECLSPEC mp_bitcnt_t mpn_scan1 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; + +#define mpn_set_str __MPN(set_str) +__GMP_DECLSPEC mp_size_t mpn_set_str __GMP_PROTO ((mp_ptr, __gmp_const unsigned char *, size_t, int)); + +#define mpn_sqrtrem __MPN(sqrtrem) +__GMP_DECLSPEC mp_size_t mpn_sqrtrem __GMP_PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); + +#define mpn_sub __MPN(sub) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub) +__GMP_DECLSPEC mp_limb_t mpn_sub __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); +#endif + +#define mpn_sub_1 __MPN(sub_1) +#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1) +__GMP_DECLSPEC mp_limb_t mpn_sub_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; +#endif + +#define mpn_sub_n __MPN(sub_n) +__GMP_DECLSPEC mp_limb_t mpn_sub_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); + +#define mpn_submul_1 __MPN(submul_1) +__GMP_DECLSPEC mp_limb_t mpn_submul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); + +#define mpn_tdiv_qr __MPN(tdiv_qr) +__GMP_DECLSPEC void mpn_tdiv_qr __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); + +#define mpn_and_n __MPN(and_n) +__GMP_DECLSPEC void mpn_and_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_andn_n __MPN(andn_n) +__GMP_DECLSPEC void mpn_andn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_nand_n __MPN(nand_n) +__GMP_DECLSPEC void mpn_nand_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_ior_n __MPN(ior_n) +__GMP_DECLSPEC void mpn_ior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_iorn_n __MPN(iorn_n) +__GMP_DECLSPEC void mpn_iorn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_nior_n __MPN(nior_n) +__GMP_DECLSPEC void mpn_nior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_xor_n __MPN(xor_n) +__GMP_DECLSPEC void mpn_xor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); +#define mpn_xnor_n __MPN(xnor_n) +__GMP_DECLSPEC void mpn_xnor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); + +#define mpn_copyi __MPN(copyi) +__GMP_DECLSPEC void mpn_copyi __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); +#define mpn_copyd __MPN(copyd) +__GMP_DECLSPEC void mpn_copyd __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); +#define mpn_zero __MPN(zero) +__GMP_DECLSPEC void mpn_zero __GMP_PROTO ((mp_ptr, mp_size_t)); + +/**************** mpz inlines ****************/ + +/* The following are provided as inlines where possible, but always exist as + library functions too, for binary compatibility. + + Within gmp itself this inlining generally isn't relied on, since it + doesn't get done for all compilers, whereas if something is worth + inlining then it's worth arranging always. + + There are two styles of inlining here. When the same bit of code is + wanted for the inline as for the library version, then __GMP_FORCE_foo + arranges for that code to be emitted and the __GMP_EXTERN_INLINE + directive suppressed, eg. mpz_fits_uint_p. When a different bit of code + is wanted for the inline than for the library version, then + __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs. */ + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs) +__GMP_EXTERN_INLINE void +mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpz_set (__gmp_w, __gmp_u); + __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size); +} +#endif + +#if GMP_NAIL_BITS == 0 +#define __GMPZ_FITS_UTYPE_P(z,maxval) \ + mp_size_t __gmp_n = z->_mp_size; \ + mp_ptr __gmp_p = z->_mp_d; \ + return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)); +#else +#define __GMPZ_FITS_UTYPE_P(z,maxval) \ + mp_size_t __gmp_n = z->_mp_size; \ + mp_ptr __gmp_p = z->_mp_d; \ + return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval) \ + || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS))); +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p) +#if ! defined (__GMP_FORCE_mpz_fits_uint_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_UINT_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p) +#if ! defined (__GMP_FORCE_mpz_fits_ulong_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_ULONG_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p) +#if ! defined (__GMP_FORCE_mpz_fits_ushort_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_USHRT_MAX); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui) +#if ! defined (__GMP_FORCE_mpz_get_ui) +__GMP_EXTERN_INLINE +#endif +unsigned long +mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + mp_ptr __gmp_p = __gmp_z->_mp_d; + mp_size_t __gmp_n = __gmp_z->_mp_size; + mp_limb_t __gmp_l = __gmp_p[0]; + /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings + about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland + C++ 6.0 warnings about condition always true for something like + "__GMP_ULONG_MAX < GMP_NUMB_MASK". */ +#if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB) + /* limb==long and no nails, or limb==longlong, one limb is enough */ + return (__gmp_n != 0 ? __gmp_l : 0); +#else + /* limb==long and nails, need two limbs when available */ + __gmp_n = __GMP_ABS (__gmp_n); + if (__gmp_n <= 1) + return (__gmp_n != 0 ? __gmp_l : 0); + else + return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS); +#endif +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn) +#if ! defined (__GMP_FORCE_mpz_getlimbn) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_result = 0; + if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size))) + __gmp_result = __gmp_z->_mp_d[__gmp_n]; + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg) +__GMP_EXTERN_INLINE void +mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpz_set (__gmp_w, __gmp_u); + __gmp_w->_mp_size = - __gmp_w->_mp_size; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p) +#if ! defined (__GMP_FORCE_mpz_perfect_square_p) +__GMP_EXTERN_INLINE +#endif +int +mpz_perfect_square_p (mpz_srcptr __gmp_a) +{ + mp_size_t __gmp_asize; + int __gmp_result; + + __gmp_asize = __gmp_a->_mp_size; + __gmp_result = (__gmp_asize >= 0); /* zero is a square, negatives are not */ + if (__GMP_LIKELY (__gmp_asize > 0)) + __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount) +#if ! defined (__GMP_FORCE_mpz_popcount) +__GMP_EXTERN_INLINE +#endif +mp_bitcnt_t +mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW +{ + mp_size_t __gmp_usize; + mp_bitcnt_t __gmp_result; + + __gmp_usize = __gmp_u->_mp_size; + __gmp_result = (__gmp_usize < 0 ? __GMP_ULONG_MAX : 0); + if (__GMP_LIKELY (__gmp_usize > 0)) + __gmp_result = mpn_popcount (__gmp_u->_mp_d, __gmp_usize); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q) +#if ! defined (__GMP_FORCE_mpz_set_q) +__GMP_EXTERN_INLINE +#endif +void +mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u)); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size) +#if ! defined (__GMP_FORCE_mpz_size) +__GMP_EXTERN_INLINE +#endif +size_t +mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW +{ + return __GMP_ABS (__gmp_z->_mp_size); +} +#endif + + +/**************** mpq inlines ****************/ + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs) +__GMP_EXTERN_INLINE void +mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpq_set (__gmp_w, __gmp_u); + __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size); +} +#endif + +#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg) +__GMP_EXTERN_INLINE void +mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) +{ + if (__gmp_w != __gmp_u) + mpq_set (__gmp_w, __gmp_u); + __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; +} +#endif + + +/**************** mpn inlines ****************/ + +/* The comments with __GMPN_ADD_1 below apply here too. + + The test for FUNCTION returning 0 should predict well. If it's assumed + {yp,ysize} will usually have a random number of bits then the high limb + won't be full and a carry out will occur a good deal less than 50% of the + time. + + ysize==0 isn't a documented feature, but is used internally in a few + places. + + Producing cout last stops it using up a register during the main part of + the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))" + doesn't seem able to move the true and false legs of the conditional up + to the two places cout is generated. */ + +#define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x; \ + \ + /* ASSERT ((ysize) >= 0); */ \ + /* ASSERT ((xsize) >= (ysize)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */ \ + \ + __gmp_i = (ysize); \ + if (__gmp_i != 0) \ + { \ + if (FUNCTION (wp, xp, yp, __gmp_i)) \ + { \ + do \ + { \ + if (__gmp_i >= (xsize)) \ + { \ + (cout) = 1; \ + goto __gmp_done; \ + } \ + __gmp_x = (xp)[__gmp_i]; \ + } \ + while (TEST); \ + } \ + } \ + if ((wp) != (xp)) \ + __GMPN_COPY_REST (wp, xp, xsize, __gmp_i); \ + (cout) = 0; \ + __gmp_done: \ + ; \ + } while (0) + +#define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize) \ + __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n, \ + (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0)) +#define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize) \ + __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n, \ + (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0)) + + +/* The use of __gmp_i indexing is designed to ensure a compile time src==dst + remains nice and clear to the compiler, so that __GMPN_COPY_REST can + disappear, and the load/add/store gets a chance to become a + read-modify-write on CISC CPUs. + + Alternatives: + + Using a pair of pointers instead of indexing would be possible, but gcc + isn't able to recognise compile-time src==dst in that case, even when the + pointers are incremented more or less together. Other compilers would + very likely have similar difficulty. + + gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or + similar to detect a compile-time src==dst. This works nicely on gcc + 2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems + to be always false, for a pointer p. But the current code form seems + good enough for src==dst anyway. + + gcc on x86 as usual doesn't give particularly good flags handling for the + carry/borrow detection. It's tempting to want some multi instruction asm + blocks to help it, and this was tried, but in truth there's only a few + instructions to save and any gain is all too easily lost by register + juggling setting up for the asm. */ + +#if GMP_NAIL_BITS == 0 +#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_r; \ + \ + /* ASSERT ((n) >= 1); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ + \ + __gmp_x = (src)[0]; \ + __gmp_r = __gmp_x OP (v); \ + (dst)[0] = __gmp_r; \ + if (CB (__gmp_r, __gmp_x, (v))) \ + { \ + (cout) = 1; \ + for (__gmp_i = 1; __gmp_i < (n);) \ + { \ + __gmp_x = (src)[__gmp_i]; \ + __gmp_r = __gmp_x OP 1; \ + (dst)[__gmp_i] = __gmp_r; \ + ++__gmp_i; \ + if (!CB (__gmp_r, __gmp_x, 1)) \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, __gmp_i); \ + (cout) = 0; \ + break; \ + } \ + } \ + } \ + else \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, 1); \ + (cout) = 0; \ + } \ + } while (0) +#endif + +#if GMP_NAIL_BITS >= 1 +#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_r; \ + \ + /* ASSERT ((n) >= 1); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ + \ + __gmp_x = (src)[0]; \ + __gmp_r = __gmp_x OP (v); \ + (dst)[0] = __gmp_r & GMP_NUMB_MASK; \ + if (__gmp_r >> GMP_NUMB_BITS != 0) \ + { \ + (cout) = 1; \ + for (__gmp_i = 1; __gmp_i < (n);) \ + { \ + __gmp_x = (src)[__gmp_i]; \ + __gmp_r = __gmp_x OP 1; \ + (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK; \ + ++__gmp_i; \ + if (__gmp_r >> GMP_NUMB_BITS == 0) \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, __gmp_i); \ + (cout) = 0; \ + break; \ + } \ + } \ + } \ + else \ + { \ + if ((src) != (dst)) \ + __GMPN_COPY_REST (dst, src, n, 1); \ + (cout) = 0; \ + } \ + } while (0) +#endif + +#define __GMPN_ADDCB(r,x,y) ((r) < (y)) +#define __GMPN_SUBCB(r,x,y) ((x) < (y)) + +#define __GMPN_ADD_1(cout, dst, src, n, v) \ + __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB) +#define __GMPN_SUB_1(cout, dst, src, n, v) \ + __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB) + + +/* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or + negative. size==0 is allowed. On random data usually only one limb will + need to be examined to get a result, so it's worth having it inline. */ +#define __GMPN_CMP(result, xp, yp, size) \ + do { \ + mp_size_t __gmp_i; \ + mp_limb_t __gmp_x, __gmp_y; \ + \ + /* ASSERT ((size) >= 0); */ \ + \ + (result) = 0; \ + __gmp_i = (size); \ + while (--__gmp_i >= 0) \ + { \ + __gmp_x = (xp)[__gmp_i]; \ + __gmp_y = (yp)[__gmp_i]; \ + if (__gmp_x != __gmp_y) \ + { \ + /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */ \ + (result) = (__gmp_x > __gmp_y ? 1 : -1); \ + break; \ + } \ + } \ + } while (0) + + +#if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST) +#define __GMPN_COPY_REST(dst, src, size, start) \ + do { \ + /* ASSERT ((start) >= 0); */ \ + /* ASSERT ((start) <= (size)); */ \ + __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \ + } while (0) +#endif + +/* Copy {src,size} to {dst,size}, starting at "start". This is designed to + keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1, + __GMPN_ADD, etc. */ +#if ! defined (__GMPN_COPY_REST) +#define __GMPN_COPY_REST(dst, src, size, start) \ + do { \ + mp_size_t __gmp_j; \ + /* ASSERT ((size) >= 0); */ \ + /* ASSERT ((start) >= 0); */ \ + /* ASSERT ((start) <= (size)); */ \ + /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */ \ + __GMP_CRAY_Pragma ("_CRI ivdep"); \ + for (__gmp_j = (start); __gmp_j < (size); __gmp_j++) \ + (dst)[__gmp_j] = (src)[__gmp_j]; \ + } while (0) +#endif + +/* Enhancement: Use some of the smarter code from gmp-impl.h. Maybe use + mpn_copyi if there's a native version, and if we don't mind demanding + binary compatibility for it (on targets which use it). */ + +#if ! defined (__GMPN_COPY) +#define __GMPN_COPY(dst, src, size) __GMPN_COPY_REST (dst, src, size, 0) +#endif + + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add) +#if ! defined (__GMP_FORCE_mpn_add) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) +{ + mp_limb_t __gmp_c; + __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1) +#if ! defined (__GMP_FORCE_mpn_add_1) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_c; + __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp) +#if ! defined (__GMP_FORCE_mpn_cmp) +__GMP_EXTERN_INLINE +#endif +int +mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW +{ + int __gmp_result; + __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size); + return __gmp_result; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub) +#if ! defined (__GMP_FORCE_mpn_sub) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) +{ + mp_limb_t __gmp_c; + __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1) +#if ! defined (__GMP_FORCE_mpn_sub_1) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW +{ + mp_limb_t __gmp_c; + __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); + return __gmp_c; +} +#endif + +#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg) +#if ! defined (__GMP_FORCE_mpn_neg) +__GMP_EXTERN_INLINE +#endif +mp_limb_t +mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) +{ + mp_limb_t __gmp_ul, __gmp_cy; + __gmp_cy = 0; + do { + __gmp_ul = *__gmp_up++; + *__gmp_rp++ = -__gmp_ul - __gmp_cy; + __gmp_cy |= __gmp_ul != 0; + } while (--__gmp_n != 0); + return __gmp_cy; +} +#endif + +#if defined (__cplusplus) +} +#endif + + +/* Allow faster testing for negative, zero, and positive. */ +#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) +#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) +#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) + +/* When using GCC, optimize certain common comparisons. */ +#if defined (__GNUC__) && __GNUC__ >= 2 +#define mpz_cmp_ui(Z,UI) \ + (__builtin_constant_p (UI) && (UI) == 0 \ + ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI)) +#define mpz_cmp_si(Z,SI) \ + (__builtin_constant_p (SI) && (SI) == 0 ? mpz_sgn (Z) \ + : __builtin_constant_p (SI) && (SI) > 0 \ + ? _mpz_cmp_ui (Z, __GMP_CAST (unsigned long int, SI)) \ + : _mpz_cmp_si (Z,SI)) +#define mpq_cmp_ui(Q,NUI,DUI) \ + (__builtin_constant_p (NUI) && (NUI) == 0 \ + ? mpq_sgn (Q) : _mpq_cmp_ui (Q,NUI,DUI)) +#define mpq_cmp_si(q,n,d) \ + (__builtin_constant_p ((n) >= 0) && (n) >= 0 \ + ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d) \ + : _mpq_cmp_si (q, n, d)) +#else +#define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI) +#define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI) +#define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI) +#define mpq_cmp_si(q,n,d) _mpq_cmp_si(q,n,d) +#endif + + +/* Using "&" rather than "&&" means these can come out branch-free. Every + mpz_t has at least one limb allocated, so fetching the low limb is always + allowed. */ +#define mpz_odd_p(z) (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0])) +#define mpz_even_p(z) (! mpz_odd_p (z)) + + +/**************** C++ routines ****************/ + +#ifdef __cplusplus +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr); +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr); +__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr); +__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr); +#endif + + +/* Source-level compatibility with GMP 2 and earlier. */ +#define mpn_divmod(qp,np,nsize,dp,dsize) \ + mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize) + +/* Source-level compatibility with GMP 1. */ +#define mpz_mdiv mpz_fdiv_q +#define mpz_mdivmod mpz_fdiv_qr +#define mpz_mmod mpz_fdiv_r +#define mpz_mdiv_ui mpz_fdiv_q_ui +#define mpz_mdivmod_ui(q,r,n,d) \ + (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) +#define mpz_mmod_ui(r,n,d) \ + (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) + +/* Useful synonyms, but not quite compatible with GMP 1. */ +#define mpz_div mpz_fdiv_q +#define mpz_divmod mpz_fdiv_qr +#define mpz_div_ui mpz_fdiv_q_ui +#define mpz_divmod_ui mpz_fdiv_qr_ui +#define mpz_div_2exp mpz_fdiv_q_2exp +#define mpz_mod_2exp mpz_fdiv_r_2exp + +enum +{ + GMP_ERROR_NONE = 0, + GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, + GMP_ERROR_DIVISION_BY_ZERO = 2, + GMP_ERROR_SQRT_OF_NEGATIVE = 4, + GMP_ERROR_INVALID_ARGUMENT = 8 +}; + +/* Define CC and CFLAGS which were used to build this version of GMP */ +#define __GMP_CC "gcc -std=gnu99" +#define __GMP_CFLAGS "-O2 -pedantic -m64 -mtune=k8 -march=k8" + +/* Major version number is the value of __GNU_MP__ too, above and in mp.h. */ +#define __GNU_MP_VERSION 5 +#define __GNU_MP_VERSION_MINOR 0 +#define __GNU_MP_VERSION_PATCHLEVEL 1 +#define __GMP_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL) + +#define __GMP_H__ +#endif /* __GMP_H__ */ diff --git a/misc/builddeps/dp.linux64/lib/libd0_blind_id.a b/misc/builddeps/dp.linux64/lib/libd0_blind_id.a index cb437e5aeab3df461f2d8abc6b121e90e0b70a51..ee343d94d995c3e1018eaa71996c3d40abdda22c 100644 GIT binary patch delta 1061 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 diff --git a/misc/builddeps/dp.linux64/lib/libd0_rijndael.a b/misc/builddeps/dp.linux64/lib/libd0_rijndael.a index 7ed9e7ab53073894defdfe5886f33f6a32b71677..cfc0efcefa2e7419657ec55ddcaccb0cb5fc94c7 100644 GIT binary patch delta 31 jcmX@MhWXeU<_R)vmIkI~W=0#8SQx=fQ_Iadj8aztn}rC- delta 31 jcmX@MhWXeU<_R)v7M2!f7RDQuSQx=fQ}fL_j8aztocjph diff --git a/misc/builddeps/dp.linux64/lib/libd0_rijndael.la b/misc/builddeps/dp.linux64/lib/libd0_rijndael.la index dc6a5235..aaa2134f 100755 --- a/misc/builddeps/dp.linux64/lib/libd0_rijndael.la +++ b/misc/builddeps/dp.linux64/lib/libd0_rijndael.la @@ -14,7 +14,7 @@ library_names='libd0_rijndael.so.0.0.0 libd0_rijndael.so.0 libd0_rijndael.so' old_library='libd0_rijndael.a' # Libraries that this one depends upon. -dependency_libs=' /usr/lib/libgmp.la' +dependency_libs=' -L/home/xonotic/dp.linux64/lib /home/xonotic/dp.linux64/lib/libgmp.la' # Version information for libd0_rijndael. current=0 diff --git a/misc/builddeps/dp.linux64/lib/libd0_rijndael.so.0.0.0 b/misc/builddeps/dp.linux64/lib/libd0_rijndael.so.0.0.0 index df41cd986dc1dd26ea47dea8d126be7e1fe4c8f6..62f1ab53e0205dbec954f78cce2f3751584e06ee 100755 GIT binary patch delta 2527 zcmZ8jZ)_Ar6rY*v(eBaGJ4)H^iS{Z%0S&i@q<4HMy~aeAkjNQ84K6|$LBo!N2EQ{>fj`GVbfT& zKdo*sCCQW|lGiOS*hm&RDvRA~+F5|_u@(oIlNruSxu|f%La}x2Ei`)BY_6p};Lzmr z6Nx9Dz^@VxX`yb2TC>M?%jL*=6bspW=Jh!G-*RqV8&_C`jE-YvY_W|Ovn+6z>eu}a zzN^HM`)n(ED~8psj0ov)-xXdGOf|aM^rd$+-iu8cQtyRg;+dY;)hRc=OxDJ;KR4pd0g@{=J zrxu5qg3un%{s7A@E5>JOWfb2mJz-HE-pyfKCM?|w)5A$rjqcxzj6V03<^VH#t~ZI? zq|tq|=*y$jwxnwAqKz4c@6~O7y?KYxU30?Hn~IITnrm>tt??^x!d^rA|cSx^k3^N`|| zi(3gFcK)PL0v?C9)Gva?!0f81W^rfak}bIPi#G3C&G@lP_^P;=nQwWC@$YUsmIPet z(ju(!F+%y~ojT)h@c$gf@_bW>@e!_J_|UBmIjeIdpMl<2icJn9nr~Xe_+Ih0V=^Fi zaD`wknf8O9id7U&mxpg`t_kWJ1)dGg6g>Wp3s(i-DBKQ~1+yp0qnUJ%+g(P%_0M&g zfvZQt82Z^Gs_=Ti)Aw8nh0ky05PaV9EWFvLa6OakD=b|>V}Brrq9LoKo_*e#!uN1v z%uWd~2fZ4Nt4r35WZjo6cV>35LGVJ@K3WN>lU~J;IcLDY$*_`;S^}m}>y=tBXhUIz zvhxAd4~0E69V~={L)8k6r^6IdY3?Ryr@{)&Gz;~o!X75KjxC45Q`O2`U4<#6rew8E zfi@h5$zd;;!@6R$2JE%s9EZb7TxxNc8V>uYj#GWV4pr%(he}bP9k!*bm58h{5g170 z?4)MG6lzqW6QGUM;$f>FsTJN17#vy0Ct(VqS3w)C(~?)3qY-5lo+6$3F(`46-i5wliaRaQT>ue)(9rs}PTL2(<^ch6Nq^5%plo zT5>)!QK~$PdsY4v)(MJ~v(fg`h4m%|v&b%GDU>Rfj;gceE*~>csyuFMW$5WO)B@0j zwsIChsbcZ4G?gVXm(NymFvh)b_gnxS@Nre67}HoU;|s^zC=MaCrer#ib+>IrSFn9t z^*73Z7D;nAN`dznn+M0nS7FZIKo`2afXT&q+l4j2?6}H@K{>y^lgaImNz#ut2O}XX z0h1&AOn6ihCH^bn6gi3iM!25O|AX*|jdwB{;4d=7^E>=QxS5YzS0iUQ(L_F;Bb-(w zC*;B_%jO%8^OrJKXc@$8jxtu7+0!<@829zP3wUSBBS6-$>}5jw!g`I)8(EWRwLU9! z;1j`6UeQ6yMYLL=tzdiwW~Il!{aa9+-}$3;-7y}a!vk_LO2kDUlO zW~#rg@WvZV9@|&CBVR#L$x7LhaP&Xa-V7TT?6KU?idKc=O17G1f$OH< z@H^DLGDjY^S@c#4Tl5Uy3J-J(UMPCzAZMISASvC-*6lxt3u^4Hqq30NG=+lnr9{BC zkh@l)we`mI5211!JsU+l}Pqd1a!mz=$r%VXR4 zNa`{Si}R?)`hF>irCehO#`?cFqUGmfeK$+K9Hh3Zw`m?Z7E3O)?0l*FwOC)%ds08L zI+kks1cqHcJ_cD=wb_qoOMczWSjv--&bEE`&cZF%e)!e3f$N#dRr?QzWrSo~;|MmV zg|t}QZfC)V>4*qjJf%&Pa5uP$2`983gx49+F0c|A-gdUzCeOss_{ zFRIw2GQUB|5bQZ|qlV6d={Q)<0F@xPXv@hU55U_egB7J}rV?x>bN%EQE-1;mq50jn z+@viC$f8P_b{})3=Zsh?b=Gmijh-I`B~&*|_TJZW?J#)C+mP#UOv-lQr(U;n-xkK- z{}_it&+RT`wle7=M-j=UCJhQennNxevpKZi5g!jgzfH z3-n&EwL2D(Lh3oj-_%}rs8;Aby;;j0&0IbGnf5G&Q+M;W?xtX;R|76$vHJdnB5?{clB;QE)R%)sJ+g`uxWnc9+o=Tn=?D13gIGjQ+N({MH=xRE)R zDlV_5wL8@Jp(VM}vnm9i*FuS6AJC1Og8ff%+#m(sc*jvD3VEF_05H*Ew<+U?;6L5mq6E?Rxm^x$D7a2;(!*n4!7HD-R8sODH>_>~~K3tusP6nUEXA`Up- zA&syH*-k1Qir#Ot=m>_8jZ)|p+lNxa+bW0tYsFdH)?fj6h_;5hZIvmTv{|`M&7_G@ z-8R|UlRN6L+m+Gxwhe|yl?kTqpPvX<$DHs7gsU_p{Aa?0IFL>G`3;9$hTo|qJLHp4Ej6y%bqL$PBM?C%C!Fh9z?`! diff --git a/misc/builddeps/dp.linux64/lib/libgmp.a b/misc/builddeps/dp.linux64/lib/libgmp.a new file mode 100644 index 0000000000000000000000000000000000000000..aa13082eb7318bc080ee43e4917531a18bf0b260 GIT binary patch literal 1171784 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

3;p-D1YZGYa~33PHZRg7&6&%6LaOVM8aat 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 W=lSkG18q95sSiluoPijxY4{&-8&^gE literal 0 HcmV?d00001 diff --git a/misc/builddeps/dp.linux64/lib/libgmp.la b/misc/builddeps/dp.linux64/lib/libgmp.la new file mode 100755 index 00000000..1be710a1 --- /dev/null +++ b/misc/builddeps/dp.linux64/lib/libgmp.la @@ -0,0 +1,41 @@ +# libgmp.la - a libtool library file +# Generated by ltmain.sh (GNU libtool) 2.2.6b +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libgmp.so.10' + +# Names of this library. +library_names='libgmp.so.10.0.1 libgmp.so.10 libgmp.so' + +# The name of the static archive. +old_library='libgmp.a' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libgmp. +current=10 +age=0 +revision=1 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/xonotic/dp.linux64/lib' diff --git a/misc/builddeps/dp.linux64/lib/libgmp.so b/misc/builddeps/dp.linux64/lib/libgmp.so new file mode 120000 index 00000000..f27b16a2 --- /dev/null +++ b/misc/builddeps/dp.linux64/lib/libgmp.so @@ -0,0 +1 @@ +libgmp.so.10.0.1 \ No newline at end of file diff --git a/misc/builddeps/dp.linux64/lib/libgmp.so.10 b/misc/builddeps/dp.linux64/lib/libgmp.so.10 new file mode 120000 index 00000000..f27b16a2 --- /dev/null +++ b/misc/builddeps/dp.linux64/lib/libgmp.so.10 @@ -0,0 +1 @@ +libgmp.so.10.0.1 \ No newline at end of file diff --git a/misc/builddeps/dp.linux64/lib/libgmp.so.10.0.1 b/misc/builddeps/dp.linux64/lib/libgmp.so.10.0.1 new file mode 100755 index 0000000000000000000000000000000000000000..818c09e7c4ea7785fac9543f1771ac79b3184413 GIT binary patch literal 511459 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

#lZ^QehvUY+F=1Yz1Y* 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

Mwca$3V5^1J*S@kj5~B{gvja>#oQ1IZDb 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%0DRyzwUJ~ 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. See +*Note Reporting Bugs:: for information about reporting bugs. + + +1.1 How to use this Manual +========================== + +Everyone should read *Note GMP Basics::. If you need to install the +library yourself, then read *Note Installing GMP::. If you have a +system with multiple ABIs, then read *Note ABI and ISA::, for the +compiler options that must be used on applications. + + The rest of the manual can be used for later reference, although it +is probably a good idea to glance through it. + + +File: gmp.info, Node: Installing GMP, Next: GMP Basics, Prev: Introduction to GMP, Up: Top + +2 Installing GMP +**************** + +GMP has an autoconf/automake/libtool based configuration system. On a +Unix-like system a basic build can be done with + + ./configure + make + +Some self-tests can be run with + + make check + +And you can install (under `/usr/local' by default) with + + make install + + If you experience problems, please report them to +. See *Note Reporting Bugs::, for information on +what to include in useful bug reports. + +* Menu: + +* Build Options:: +* ABI and ISA:: +* Notes for Package Builds:: +* Notes for Particular Systems:: +* Known Build Problems:: +* Performance optimization:: + + +File: gmp.info, Node: Build Options, Next: ABI and ISA, Prev: Installing GMP, Up: Installing GMP + +2.1 Build Options +================= + +All the usual autoconf configure options are available, run `./configure +--help' for a summary. The file `INSTALL.autoconf' has some generic +installation information too. + +Tools + `configure' requires various Unix-like tools. See *Note Notes for + Particular Systems::, for some options on non-Unix systems. + + It might be possible to build without the help of `configure', + certainly all the code is there, but unfortunately you'll be on + your own. + +Build Directory + To compile in a separate build directory, `cd' to that directory, + and prefix the configure command with the path to the GMP source + directory. For example + + cd /my/build/dir + /my/sources/gmp-5.0.1/configure + + Not all `make' programs have the necessary features (`VPATH') to + support this. In particular, SunOS and Slowaris `make' have bugs + that make them unable to build in a separate directory. Use GNU + `make' instead. + +`--prefix' and `--exec-prefix' + The `--prefix' option can be used in the normal way to direct GMP + to install under a particular tree. The default is `/usr/local'. + + `--exec-prefix' can be used to direct architecture-dependent files + like `libgmp.a' to a different location. This can be used to share + architecture-independent parts like the documentation, but + separate the dependent parts. Note however that `gmp.h' and + `mp.h' are architecture-dependent since they encode certain + aspects of `libgmp', so it will be necessary to ensure both + `$prefix/include' and `$exec_prefix/include' are available to the + compiler. + +`--disable-shared', `--disable-static' + By default both shared and static libraries are built (where + possible), but one or other can be disabled. Shared libraries + result in smaller executables and permit code sharing between + separate running processes, but on some CPUs are slightly slower, + having a small cost on each function call. + +Native Compilation, `--build=CPU-VENDOR-OS' + For normal native compilation, the system can be specified with + `--build'. By default `./configure' uses the output from running + `./config.guess'. On some systems `./config.guess' can determine + the exact CPU type, on others it will be necessary to give it + explicitly. For example, + + ./configure --build=ultrasparc-sun-solaris2.7 + + In all cases the `OS' part is important, since it controls how + libtool generates shared libraries. Running `./config.guess' is + the simplest way to see what it should be, if you don't know + already. + +Cross Compilation, `--host=CPU-VENDOR-OS' + When cross-compiling, the system used for compiling is given by + `--build' and the system where the library will run is given by + `--host'. For example when using a FreeBSD Athlon system to build + GNU/Linux m68k binaries, + + ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu + + Compiler tools are sought first with the host system type as a + prefix. For example `m68k-mac-linux-gnu-ranlib' is tried, then + plain `ranlib'. This makes it possible for a set of + cross-compiling tools to co-exist with native tools. The prefix + is the argument to `--host', and this can be an alias, such as + `m68k-linux'. But note that tools don't have to be setup this + way, it's enough to just have a `PATH' with a suitable + cross-compiling `cc' etc. + + Compiling for a different CPU in the same family as the build + system is a form of cross-compilation, though very possibly this + would merely be special options on a native compiler. In any case + `./configure' avoids depending on being able to run code on the + build system, which is important when creating binaries for a + newer CPU since they very possibly won't run on the build system. + + In all cases the compiler must be able to produce an executable + (of whatever format) from a standard C `main'. Although only + object files will go to make up `libgmp', `./configure' uses + linking tests for various purposes, such as determining what + functions are available on the host system. + + Currently a warning is given unless an explicit `--build' is used + when cross-compiling, because it may not be possible to correctly + guess the build system type if the `PATH' has only a + cross-compiling `cc'. + + Note that the `--target' option is not appropriate for GMP. It's + for use when building compiler tools, with `--host' being where + they will run, and `--target' what they'll produce code for. + Ordinary programs or libraries like GMP are only interested in the + `--host' part, being where they'll run. (Some past versions of + GMP used `--target' incorrectly.) + +CPU types + In general, if you want a library that runs as fast as possible, + you should configure GMP for the exact CPU type your system uses. + However, this may mean the binaries won't run on older members of + the family, and might run slower on other members, older or newer. + The best idea is always to build GMP for the exact machine type + you intend to run it on. + + The following CPUs have specific support. See `configure.in' for + details of what code and compiler options they select. + + * Alpha: alpha, alphaev5, alphaev56, alphapca56, alphapca57, + alphaev6, alphaev67, alphaev68 alphaev7 + + * Cray: c90, j90, t90, sv1 + + * HPPA: hppa1.0, hppa1.1, hppa2.0, hppa2.0n, hppa2.0w, hppa64 + + * IA-64: ia64, itanium, itanium2 + + * MIPS: mips, mips3, mips64 + + * Motorola: m68k, m68000, m68010, m68020, m68030, m68040, + m68060, m68302, m68360, m88k, m88110 + + * POWER: power, power1, power2, power2sc + + * PowerPC: powerpc, powerpc64, powerpc401, powerpc403, + powerpc405, powerpc505, powerpc601, powerpc602, powerpc603, + powerpc603e, powerpc604, powerpc604e, powerpc620, powerpc630, + powerpc740, powerpc7400, powerpc7450, powerpc750, powerpc801, + powerpc821, powerpc823, powerpc860, powerpc970 + + * SPARC: sparc, sparcv8, microsparc, supersparc, sparcv9, + ultrasparc, ultrasparc2, ultrasparc2i, ultrasparc3, sparc64 + + * x86 family: i386, i486, i586, pentium, pentiummmx, pentiumpro, + pentium2, pentium3, pentium4, k6, k62, k63, athlon, amd64, + viac3, viac32 + + * Other: a29k, arm, clipper, i960, ns32k, pyramid, sh, sh2, vax, + z8k + + CPUs not listed will use generic C code. + +Generic C Build + If some of the assembly code causes problems, or if otherwise + desired, the generic C code can be selected with CPU `none'. For + example, + + ./configure --host=none-unknown-freebsd3.5 + + Note that this will run quite slowly, but it should be portable + and should at least make it possible to get something running if + all else fails. + +Fat binary, `--enable-fat' + Using `--enable-fat' selects a "fat binary" build on x86, where + optimized low level subroutines are chosen at runtime according to + the CPU detected. This means more code, but gives good + performance on all x86 chips. (This option might become available + for more architectures in the future.) + +`ABI' + On some systems GMP supports multiple ABIs (application binary + interfaces), meaning data type sizes and calling conventions. By + default GMP chooses the best ABI available, but a particular ABI + can be selected. For example + + ./configure --host=mips64-sgi-irix6 ABI=n32 + + See *Note ABI and ISA::, for the available choices on relevant + CPUs, and what applications need to do. + +`CC', `CFLAGS' + By default the C compiler used is chosen from among some likely + candidates, with `gcc' normally preferred if it's present. The + usual `CC=whatever' can be passed to `./configure' to choose + something different. + + For various systems, default compiler flags are set based on the + CPU and compiler. The usual `CFLAGS="-whatever"' can be passed to + `./configure' to use something different or to set good flags for + systems GMP doesn't otherwise know. + + The `CC' and `CFLAGS' used are printed during `./configure', and + can be found in each generated `Makefile'. This is the easiest way + to check the defaults when considering changing or adding + something. + + Note that when `CC' and `CFLAGS' are specified on a system + supporting multiple ABIs it's important to give an explicit + `ABI=whatever', since GMP can't determine the ABI just from the + flags and won't be able to select the correct assembly code. + + If just `CC' is selected then normal default `CFLAGS' for that + compiler will be used (if GMP recognises it). For example + `CC=gcc' can be used to force the use of GCC, with default flags + (and default ABI). + +`CPPFLAGS' + Any flags like `-D' defines or `-I' includes required by the + preprocessor should be set in `CPPFLAGS' rather than `CFLAGS'. + Compiling is done with both `CPPFLAGS' and `CFLAGS', but + preprocessing uses just `CPPFLAGS'. This distinction is because + most preprocessors won't accept all the flags the compiler does. + Preprocessing is done separately in some configure tests, and in + the `ansi2knr' support for K&R compilers. + +`CC_FOR_BUILD' + Some build-time programs are compiled and run to generate + host-specific data tables. `CC_FOR_BUILD' is the compiler used + for this. It doesn't need to be in any particular ABI or mode, it + merely needs to generate executables that can run. The default is + to try the selected `CC' and some likely candidates such as `cc' + and `gcc', looking for something that works. + + No flags are used with `CC_FOR_BUILD' because a simple invocation + like `cc foo.c' should be enough. If some particular options are + required they can be included as for instance `CC_FOR_BUILD="cc + -whatever"'. + +C++ Support, `--enable-cxx' + C++ support in GMP can be enabled with `--enable-cxx', in which + case a C++ compiler will be required. As a convenience + `--enable-cxx=detect' can be used to enable C++ support only if a + compiler can be found. The C++ support consists of a library + `libgmpxx.la' and header file `gmpxx.h' (*note Headers and + Libraries::). + + A separate `libgmpxx.la' has been adopted rather than having C++ + objects within `libgmp.la' in order to ensure dynamic linked C + programs aren't bloated by a dependency on the C++ standard + library, and to avoid any chance that the C++ compiler could be + required when linking plain C programs. + + `libgmpxx.la' will use certain internals from `libgmp.la' and can + only be expected to work with `libgmp.la' from the same GMP + version. Future changes to the relevant internals will be + accompanied by renaming, so a mismatch will cause unresolved + symbols rather than perhaps mysterious misbehaviour. + + In general `libgmpxx.la' will be usable only with the C++ compiler + that built it, since name mangling and runtime support are usually + incompatible between different compilers. + +`CXX', `CXXFLAGS' + When C++ support is enabled, the C++ compiler and its flags can be + set with variables `CXX' and `CXXFLAGS' in the usual way. The + default for `CXX' is the first compiler that works from a list of + likely candidates, with `g++' normally preferred when available. + The default for `CXXFLAGS' is to try `CFLAGS', `CFLAGS' without + `-g', then for `g++' either `-g -O2' or `-O2', or for other + compilers `-g' or nothing. Trying `CFLAGS' this way is convenient + when using `gcc' and `g++' together, since the flags for `gcc' will + usually suit `g++'. + + It's important that the C and C++ compilers match, meaning their + startup and runtime support routines are compatible and that they + generate code in the same ABI (if there's a choice of ABIs on the + system). `./configure' isn't currently able to check these things + very well itself, so for that reason `--disable-cxx' is the + default, to avoid a build failure due to a compiler mismatch. + Perhaps this will change in the future. + + Incidentally, it's normally not good enough to set `CXX' to the + same as `CC'. Although `gcc' for instance recognises `foo.cc' as + C++ code, only `g++' will invoke the linker the right way when + building an executable or shared library from C++ object files. + +Temporary Memory, `--enable-alloca=' + GMP allocates temporary workspace using one of the following three + methods, which can be selected with for instance + `--enable-alloca=malloc-reentrant'. + + * `alloca' - C library or compiler builtin. + + * `malloc-reentrant' - the heap, in a re-entrant fashion. + + * `malloc-notreentrant' - the heap, with global variables. + + For convenience, the following choices are also available. + `--disable-alloca' is the same as `no'. + + * `yes' - a synonym for `alloca'. + + * `no' - a synonym for `malloc-reentrant'. + + * `reentrant' - `alloca' if available, otherwise + `malloc-reentrant'. This is the default. + + * `notreentrant' - `alloca' if available, otherwise + `malloc-notreentrant'. + + `alloca' is reentrant and fast, and is recommended. It actually + allocates just small blocks on the stack; larger ones use + malloc-reentrant. + + `malloc-reentrant' is, as the name suggests, reentrant and thread + safe, but `malloc-notreentrant' is faster and should be used if + reentrancy is not required. + + The two malloc methods in fact use the memory allocation functions + selected by `mp_set_memory_functions', these being `malloc' and + friends by default. *Note Custom Allocation::. + + An additional choice `--enable-alloca=debug' is available, to help + when debugging memory related problems (*note Debugging::). + +FFT Multiplication, `--disable-fft' + By default multiplications are done using Karatsuba, 3-way Toom, + and Fermat FFT. The FFT is only used on large to very large + operands and can be disabled to save code size if desired. + +Berkeley MP, `--enable-mpbsd' + The Berkeley MP compatibility library (`libmp') and header file + (`mp.h') are built and installed only if `--enable-mpbsd' is used. + *Note BSD Compatible Functions::. + +Assertion Checking, `--enable-assert' + This option enables some consistency checking within the library. + This can be of use while debugging, *note Debugging::. + +Execution Profiling, `--enable-profiling=prof/gprof/instrument' + Enable profiling support, in one of various styles, *note + Profiling::. + +`MPN_PATH' + Various assembly versions of each mpn subroutines are provided. + For a given CPU, a search is made though a path to choose a + version of each. For example `sparcv8' has + + MPN_PATH="sparc32/v8 sparc32 generic" + + which means look first for v8 code, then plain sparc32 (which is + v7), and finally fall back on generic C. Knowledgeable users with + special requirements can specify a different path. Normally this + is completely unnecessary. + +Documentation + The source for the document you're now reading is `doc/gmp.texi', + in Texinfo format, see *Note Texinfo: (texinfo)Top. + + Info format `doc/gmp.info' is included in the distribution. The + usual automake targets are available to make PostScript, DVI, PDF + and HTML (these will require various TeX and Texinfo tools). + + DocBook and XML can be generated by the Texinfo `makeinfo' program + too, see *Note Options for `makeinfo': (texinfo)makeinfo options. + + Some supplementary notes can also be found in the `doc' + subdirectory. + + + +File: gmp.info, Node: ABI and ISA, Next: Notes for Package Builds, Prev: Build Options, Up: Installing GMP + +2.2 ABI and ISA +=============== + +ABI (Application Binary Interface) refers to the calling conventions +between functions, meaning what registers are used and what sizes the +various C data types are. ISA (Instruction Set Architecture) refers to +the instructions and registers a CPU has available. + + Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI +defined, the latter for compatibility with older CPUs in the family. +GMP supports some CPUs like this in both ABIs. In fact within GMP +`ABI' means a combination of chip ABI, plus how GMP chooses to use it. +For example in some 32-bit ABIs, GMP may support a limb as either a +32-bit `long' or a 64-bit `long long'. + + By default GMP chooses the best ABI available for a given system, +and this generally gives significantly greater speed. But an ABI can +be chosen explicitly to make GMP compatible with other libraries, or +particular application requirements. For example, + + ./configure ABI=32 + + In all cases it's vital that all object code used in a given program +is compiled for the same ABI. + + Usually a limb is implemented as a `long'. When a `long long' limb +is used this is encoded in the generated `gmp.h'. This is convenient +for applications, but it does mean that `gmp.h' will vary, and can't be +just copied around. `gmp.h' remains compiler independent though, since +all compilers for a particular ABI will be expected to use the same +limb type. + + Currently no attempt is made to follow whatever conventions a system +has for installing library or header files built for a particular ABI. +This will probably only matter when installing multiple builds of GMP, +and it might be as simple as configuring with a special `libdir', or it +might require more than that. Note that builds for different ABIs need +to done separately, with a fresh `./configure' and `make' each. + + +AMD64 (`x86_64') + On AMD64 systems supporting both 32-bit and 64-bit modes for + applications, the following ABI choices are available. + + `ABI=64' + The 64-bit ABI uses 64-bit limbs and pointers and makes full + use of the chip architecture. This is the default. + Applications will usually not need special compiler flags, + but for reference the option is + + gcc -m64 + + `ABI=32' + The 32-bit ABI is the usual i386 conventions. This will be + slower, and is not recommended except for inter-operating + with other code not yet 64-bit capable. Applications must be + compiled with + + gcc -m32 + + (In GCC 2.95 and earlier there's no `-m32' option, it's the + only mode.) + + +HPPA 2.0 (`hppa2.0*', `hppa64') + + `ABI=2.0w' + The 2.0w ABI uses 64-bit limbs and pointers and is available + on HP-UX 11 or up. Applications must be compiled with + + gcc [built for 2.0w] + cc +DD64 + + `ABI=2.0n' + The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal + calling conventions, but with 64-bit instructions permitted + within functions. GMP uses a 64-bit `long long' for a limb. + This ABI is available on hppa64 GNU/Linux and on HP-UX 10 or + higher. Applications must be compiled with + + gcc [built for 2.0n] + cc +DA2.0 +e + + Note that current versions of GCC (eg. 3.2) don't generate + 64-bit instructions for `long long' operations and so may be + slower than for 2.0w. (The GMP assembly code is the same + though.) + + `ABI=1.0' + HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit + HPPA 1.0 ABI. No special compiler options are needed for + applications. + + All three ABIs are available for CPU types `hppa2.0w', `hppa2.0' + and `hppa64', but for CPU type `hppa2.0n' only 2.0n or 1.0 are + considered. + + Note that GCC on HP-UX has no options to choose between 2.0n and + 2.0w modes, unlike HP `cc'. Instead it must be built for one or + the other ABI. GMP will detect how it was built, and skip to the + corresponding `ABI'. + + +IA-64 under HP-UX (`ia64*-*-hpux*', `itanium*-*-hpux*') + HP-UX supports two ABIs for IA-64. GMP performance is the same in + both. + + `ABI=32' + In the 32-bit ABI, pointers, `int's and `long's are 32 bits + and GMP uses a 64 bit `long long' for a limb. Applications + can be compiled without any special flags since this ABI is + the default in both HP C and GCC, but for reference the flags + are + + gcc -milp32 + cc +DD32 + + `ABI=64' + In the 64-bit ABI, `long's and pointers are 64 bits and GMP + uses a `long' for a limb. Applications must be compiled with + + gcc -mlp64 + cc +DD64 + + On other IA-64 systems, GNU/Linux for instance, `ABI=64' is the + only choice. + + +MIPS under IRIX 6 (`mips*-*-irix[6789]') + IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs + o32, n32, and 64. n32 or 64 are recommended, and GMP performance + will be the same in each. The default is n32. + + `ABI=o32' + The o32 ABI is 32-bit pointers and integers, and no 64-bit + operations. GMP will be slower than in n32 or 64, this + option only exists to support old compilers, eg. GCC 2.7.2. + Applications can be compiled with no special flags on an old + compiler, or on a newer compiler with + + gcc -mabi=32 + cc -32 + + `ABI=n32' + The n32 ABI is 32-bit pointers and integers, but with a + 64-bit limb using a `long long'. Applications must be + compiled with + + gcc -mabi=n32 + cc -n32 + + `ABI=64' + The 64-bit ABI is 64-bit pointers and integers. Applications + must be compiled with + + gcc -mabi=64 + cc -64 + + Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have + the necessary support for n32 or 64 and so only gets a 32-bit limb + and the MIPS 2 code. + + +PowerPC 64 (`powerpc64', `powerpc620', `powerpc630', `powerpc970', `power4', `power5') + + `ABI=aix64' + The AIX 64 ABI uses 64-bit limbs and pointers and is the + default on PowerPC 64 `*-*-aix*' systems. Applications must + be compiled with + + gcc -maix64 + xlc -q64 + + `ABI=mode64' + The `mode64' ABI uses 64-bit limbs and pointers, and is the + default on 64-bit GNU/Linux, BSD, and Mac OS X/Darwin + systems. Applications must be compiled with + + gcc -m64 + + `ABI=mode32' + The `mode32' ABI uses a 64-bit `long long' limb but with the + chip still in 32-bit mode and using 32-bit calling + conventions. This is the default on for systems where the + true 64-bit ABIs are unavailable. No special compiler + options are needed for applications. + + `ABI=32' + This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No + special compiler options are needed for applications. + + GMP speed is greatest in `aix64' and `mode32'. In `ABI=32' only + the 32-bit ISA is used and this doesn't make full use of a 64-bit + chip. On a suitable system we could perhaps use more of the ISA, + but there are no plans to do so. + + +Sparc V9 (`sparc64', `sparcv9', `ultrasparc*') + + `ABI=64' + The 64-bit V9 ABI is available on the various BSD sparc64 + ports, recent versions of Sparc64 GNU/Linux, and Solaris 2.7 + and up (when the kernel is in 64-bit mode). GCC 3.2 or + higher, or Sun `cc' is required. On GNU/Linux, depending on + the default `gcc' mode, applications must be compiled with + + gcc -m64 + + On Solaris applications must be compiled with + + gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 + cc -xarch=v9 + + On the BSD sparc64 systems no special options are required, + since 64-bits is the only ABI available. + + `ABI=32' + For the basic 32-bit ABI, GMP still uses as much of the V9 + ISA as it can. In the Sun documentation this combination is + known as "v8plus". On GNU/Linux, depending on the default + `gcc' mode, applications may need to be compiled with + + gcc -m32 + + On Solaris, no special compiler options are required for + applications, though using something like the following is + recommended. (`gcc' 2.8 and earlier only support `-mv8' + though.) + + gcc -mv8plus + cc -xarch=v8plus + + GMP speed is greatest in `ABI=64', so it's the default where + available. The speed is partly because there are extra registers + available and partly because 64-bits is considered the more + important case and has therefore had better code written for it. + + Don't be confused by the names of the `-m' and `-x' compiler + options, they're called `arch' but effectively control both ABI + and ISA. + + On Solaris 2.6 and earlier, only `ABI=32' is available since the + kernel doesn't save all registers. + + On Solaris 2.7 with the kernel in 32-bit mode, a normal native + build will reject `ABI=64' because the resulting executables won't + run. `ABI=64' can still be built if desired by making it look + like a cross-compile, for example + + ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 + + +File: gmp.info, Node: Notes for Package Builds, Next: Notes for Particular Systems, Prev: ABI and ISA, Up: Installing GMP + +2.3 Notes for Package Builds +============================ + +GMP should present no great difficulties for packaging in a binary +distribution. + + Libtool is used to build the library and `-version-info' is set +appropriately, having started from `3:0:0' in GMP 3.0 (*note Library +interface versions: (libtool)Versioning.). + + The GMP 4 series will be upwardly binary compatible in each release +and will be upwardly binary compatible with all of the GMP 3 series. +Additional function interfaces may be added in each release, so on +systems where libtool versioning is not fully checked by the loader an +auxiliary mechanism may be needed to express that a dynamic linked +application depends on a new enough GMP. + + An auxiliary mechanism may also be needed to express that +`libgmpxx.la' (from `--enable-cxx', *note Build Options::) requires +`libgmp.la' from the same GMP version, since this is not done by the +libtool versioning, nor otherwise. A mismatch will result in +unresolved symbols from the linker, or perhaps the loader. + + When building a package for a CPU family, care should be taken to use +`--host' (or `--build') to choose the least common denominator among +the CPUs which might use the package. For example this might mean plain +`sparc' (meaning V7) for SPARCs. + + For x86s, `--enable-fat' sets things up for a fat binary build, +making a runtime selection of optimized low level routines. This is a +good choice for packaging to run on a range of x86 chips. + + Users who care about speed will want GMP built for their exact CPU +type, to make best use of the available optimizations. Providing a way +to suitably rebuild a package may be useful. This could be as simple +as making it possible for a user to omit `--build' (and `--host') so +`./config.guess' will detect the CPU. But a way to manually specify a +`--build' will be wanted for systems where `./config.guess' is inexact. + + On systems with multiple ABIs, a packaged build will need to decide +which among the choices is to be provided, see *Note ABI and ISA::. A +given run of `./configure' etc will only build one ABI. If a second +ABI is also required then a second run of `./configure' etc must be +made, starting from a clean directory tree (`make distclean'). + + As noted under "ABI and ISA", currently no attempt is made to follow +system conventions for install locations that vary with ABI, such as +`/usr/lib/sparcv9' for `ABI=64' as opposed to `/usr/lib' for `ABI=32'. +A package build can override `libdir' and other standard variables as +necessary. + + Note that `gmp.h' is a generated file, and will be architecture and +ABI dependent. When attempting to install two ABIs simultaneously it +will be important that an application compile gets the correct `gmp.h' +for its desired ABI. If compiler include paths don't vary with ABI +options then it might be necessary to create a `/usr/include/gmp.h' +which tests preprocessor symbols and chooses the correct actual `gmp.h'. + + +File: gmp.info, Node: Notes for Particular Systems, Next: Known Build Problems, Prev: Notes for Package Builds, Up: Installing GMP + +2.4 Notes for Particular Systems +================================ + +AIX 3 and 4 + On systems `*-*-aix[34]*' shared libraries are disabled by + default, since some versions of the native `ar' fail on the + convenience libraries used. A shared build can be attempted with + + ./configure --enable-shared --disable-static + + Note that the `--disable-static' is necessary because in a shared + build libtool makes `libgmp.a' a symlink to `libgmp.so', + apparently for the benefit of old versions of `ld' which only + recognise `.a', but unfortunately this is done even if a fully + functional `ld' is available. + +ARM + On systems `arm*-*-*', versions of GCC up to and including 2.95.3 + have a bug in unsigned division, giving wrong results for some + operands. GMP `./configure' will demand GCC 2.95.4 or later. + +Compaq C++ + Compaq C++ on OSF 5.1 has two flavours of `iostream', a standard + one and an old pre-standard one (see `man iostream_intro'). GMP + can only use the standard one, which unfortunately is not the + default but must be selected by defining `__USE_STD_IOSTREAM'. + Configure with for instance + + ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM + +Floating Point Mode + On some systems, the hardware floating point has a control mode + which can set all operations to be done in a particular precision, + for instance single, double or extended on x86 systems (x87 + floating point). The GMP functions involving a `double' cannot be + expected to operate to their full precision when the hardware is + in single precision mode. Of course this affects all code, + including application code, not just GMP. + +MS-DOS and MS Windows + On an MS-DOS system DJGPP can be used to build GMP, and on an MS + Windows system Cygwin, DJGPP and MINGW can be used. All three are + excellent ports of GCC and the various GNU tools. + + `http://www.cygwin.com/' + `http://www.delorie.com/djgpp/' + `http://www.mingw.org/' + + Microsoft also publishes an Interix "Services for Unix" which can + be used to build GMP on Windows (with a normal `./configure'), but + it's not free software. + +MS Windows DLLs + On systems `*-*-cygwin*', `*-*-mingw*' and `*-*-pw32*' by default + GMP builds only a static library, but a DLL can be built instead + using + + ./configure --disable-static --enable-shared + + Static and DLL libraries can't both be built, since certain export + directives in `gmp.h' must be different. + + A MINGW DLL build of GMP can be used with Microsoft C. Libtool + doesn't install a `.lib' format import library, but it can be + created with MS `lib' as follows, and copied to the install + directory. Similarly for `libmp' and `libgmpxx'. + + cd .libs + lib /def:libgmp-3.dll.def /out:libgmp-3.lib + + MINGW uses the C runtime library `msvcrt.dll' for I/O, so + applications wanting to use the GMP I/O routines must be compiled + with `cl /MD' to do the same. If one of the other C runtime + library choices provided by MS C is desired then the suggestion is + to use the GMP string functions and confine I/O to the application. + +Motorola 68k CPU Types + `m68k' is taken to mean 68000. `m68020' or higher will give a + performance boost on applicable CPUs. `m68360' can be used for + CPU32 series chips. `m68302' can be used for "Dragonball" series + chips, though this is merely a synonym for `m68000'. + +OpenBSD 2.6 + `m4' in this release of OpenBSD has a bug in `eval' that makes it + unsuitable for `.asm' file processing. `./configure' will detect + the problem and either abort or choose another m4 in the `PATH'. + The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. + +Power CPU Types + In GMP, CPU types `power*' and `powerpc*' will each use + instructions not available on the other, so it's important to + choose the right one for the CPU that will be used. Currently GMP + has no assembly code support for using just the common instruction + subset. To get executables that run on both, the current + suggestion is to use the generic C code (CPU `none'), possibly + with appropriate compiler options (like `-mcpu=common' for `gcc'). + CPU `rs6000' (which is not a CPU but a family of workstations) is + accepted by `config.sub', but is currently equivalent to `none'. + +Sparc CPU Types + `sparcv8' or `supersparc' on relevant systems will give a + significant performance increase over the V7 code selected by plain + `sparc'. + +Sparc App Regs + The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the + "application registers" `g2', `g3' and `g4', the same way that the + GCC default `-mapp-regs' does (*note SPARC Options: (gcc)SPARC + Options.). + + This makes that code unsuitable for use with the special V9 + `-mcmodel=embmedany' (which uses `g4' as a data segment pointer), + and for applications wanting to use those registers for special + purposes. In these cases the only suggestion currently is to + build GMP with CPU `none' to avoid the assembly code. + +SunOS 4 + `/usr/bin/m4' lacks various features needed to process `.asm' + files, and instead `./configure' will automatically use + `/usr/5bin/m4', which we believe is always available (if not then + use GNU m4). + +x86 CPU Types + `i586', `pentium' or `pentiummmx' code is good for its intended P5 + Pentium chips, but quite slow when run on Intel P6 class chips + (PPro, P-II, P-III). `i386' is a better choice when making + binaries that must run on both. + +x86 MMX and SSE2 Code + If the CPU selected has MMX code but the assembler doesn't support + it, a warning is given and non-MMX code is used instead. This + will be an inferior build, since the MMX code that's present is + there because it's faster than the corresponding plain integer + code. The same applies to SSE2. + + Old versions of `gas' don't support MMX instructions, in particular + version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent + OpenBSD 3.1 doesn't. + + Solaris 2.6 and 2.7 `as' generate incorrect object code for + register to register `movq' instructions, and so can't be used for + MMX code. Install a recent `gas' if MMX code is wanted on these + systems. + + +File: gmp.info, Node: Known Build Problems, Next: Performance optimization, Prev: Notes for Particular Systems, Up: Installing GMP + +2.5 Known Build Problems +======================== + +You might find more up-to-date information at `http://gmplib.org/'. + +Compiler link options + The version of libtool currently in use rather aggressively strips + compiler options when linking a shared library. This will + hopefully be relaxed in the future, but for now if this is a + problem the suggestion is to create a little script to hide them, + and for instance configure with + + ./configure CC=gcc-with-my-options + +DJGPP (`*-*-msdosdjgpp*') + The DJGPP port of `bash' 2.03 is unable to run the `configure' + script, it exits silently, having died writing a preamble to + `config.log'. Use `bash' 2.04 or higher. + + `make all' was found to run out of memory during the final + `libgmp.la' link on one system tested, despite having 64Mb + available. Running `make libgmp.la' directly helped, perhaps + recursing into the various subdirectories uses up memory. + +GNU binutils `strip' prior to 2.12 + `strip' from GNU binutils 2.11 and earlier should not be used on + the static libraries `libgmp.a' and `libmp.a' since it will + discard all but the last of multiple archive members with the same + name, like the three versions of `init.o' in `libgmp.a'. Binutils + 2.12 or higher can be used successfully. + + The shared libraries `libgmp.so' and `libmp.so' are not affected by + this and any version of `strip' can be used on them. + +`make' syntax error + On certain versions of SCO OpenServer 5 and IRIX 6.5 the native + `make' is unable to handle the long dependencies list for + `libgmp.la'. The symptom is a "syntax error" on the following + line of the top-level `Makefile'. + + libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) + + Either use GNU Make, or as a workaround remove + `$(libgmp_la_DEPENDENCIES)' from that line (which will make the + initial build work, but if any recompiling is done `libgmp.la' + might not be rebuilt). + +MacOS X (`*-*-darwin*') + Libtool currently only knows how to create shared libraries on + MacOS X using the native `cc' (which is a modified GCC), not a + plain GCC. A static-only build should work though + (`--disable-shared'). + +NeXT prior to 3.3 + The system compiler on old versions of NeXT was a massacred and + old GCC, even if it called itself `cc'. This compiler cannot be + used to build GMP, you need to get a real GCC, and install that. + (NeXT may have fixed this in release 3.3 of their system.) + +POWER and PowerPC + Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP + on POWER or PowerPC. If you want to use GCC for these machines, + get GCC 2.7.2.1 (or later). + +Sequent Symmetry + Use the GNU assembler instead of the system assembler, since the + latter has serious bugs. + +Solaris 2.6 + The system `sed' prints an error "Output line too long" when + libtool builds `libgmp.la'. This doesn't seem to cause any + obvious ill effects, but GNU `sed' is recommended, to avoid any + doubt. + +Sparc Solaris 2.7 with gcc 2.95.2 in `ABI=32' + A shared library build of GMP seems to fail in this combination, + it builds but then fails the tests, apparently due to some + incorrect data relocations within `gmp_randinit_lc_2exp_size'. + The exact cause is unknown, `--disable-shared' is recommended. + + +File: gmp.info, Node: Performance optimization, Prev: Known Build Problems, Up: Installing GMP + +2.6 Performance optimization +============================ + +For optimal performance, build GMP for the exact CPU type of the target +computer, see *Note Build Options::. + + Unlike what is the case for most other programs, the compiler +typically doesn't matter much, since GMP uses assembly language for the +most critical operation. + + In particular for long-running GMP applications, and applications +demanding extremely large numbers, building and running the `tuneup' +program in the `tune' subdirectory, can be important. For example, + + cd tune + make tuneup + ./tuneup + + will generate better contents for the `gmp-mparam.h' parameter file. + + To use the results, put the output in the file file indicated in the +`Parameters for ...' header. Then recompile from scratch. + + The `tuneup' program takes one useful parameter, `-f NNN', which +instructs the program how long to check FFT multiply parameters. If +you're going to use GMP for extremely large numbers, you may want to +run `tuneup' with a large NNN value. + + +File: gmp.info, Node: GMP Basics, Next: Reporting Bugs, Prev: Installing GMP, Up: Top + +3 GMP Basics +************ + +*Using functions, macros, data types, etc. not documented in this +manual is strongly discouraged. If you do so your application is +guaranteed to be incompatible with future versions of GMP.* + +* Menu: + +* Headers and Libraries:: +* Nomenclature and Types:: +* Function Classes:: +* Variable Conventions:: +* Parameter Conventions:: +* Memory Management:: +* Reentrancy:: +* Useful Macros and Constants:: +* Compatibility with older versions:: +* Demonstration Programs:: +* Efficiency:: +* Debugging:: +* Profiling:: +* Autoconf:: +* Emacs:: + + +File: gmp.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: GMP Basics, Up: GMP Basics + +3.1 Headers and Libraries +========================= + +All declarations needed to use GMP are collected in the include file +`gmp.h'. It is designed to work with both C and C++ compilers. + + #include + + Note however that prototypes for GMP functions with `FILE *' +parameters are only provided if `' is included too. + + #include + #include + + Likewise `' (or `') is required for prototypes +with `va_list' parameters, such as `gmp_vprintf'. And `' +for prototypes with `struct obstack' parameters, such as +`gmp_obstack_printf', when available. + + All programs using GMP must link against the `libgmp' library. On a +typical Unix-like system this can be done with `-lgmp', for example + + gcc myprogram.c -lgmp + + GMP C++ functions are in a separate `libgmpxx' library. This is +built and installed if C++ support has been enabled (*note Build +Options::). For example, + + g++ mycxxprog.cc -lgmpxx -lgmp + + GMP is built using Libtool and an application can use that to link +if desired, *note GNU Libtool: (libtool)Top. + + If GMP has been installed to a non-standard location then it may be +necessary to use `-I' and `-L' compiler options to point to the right +directories, and some sort of run-time path for a shared library. + + +File: gmp.info, Node: Nomenclature and Types, Next: Function Classes, Prev: Headers and Libraries, Up: GMP Basics + +3.2 Nomenclature and Types +========================== + +In this manual, "integer" usually means a multiple precision integer, as +defined by the GMP library. The C data type for such integers is +`mpz_t'. Here are some examples of how to declare such integers: + + mpz_t sum; + + struct foo { mpz_t x, y; }; + + mpz_t vec[20]; + + "Rational number" means a multiple precision fraction. The C data +type for these fractions is `mpq_t'. For example: + + mpq_t quotient; + + "Floating point number" or "Float" for short, is an arbitrary +precision mantissa with a limited precision exponent. The C data type +for such objects is `mpf_t'. For example: + + mpf_t fp; + + The floating point functions accept and return exponents in the C +type `mp_exp_t'. Currently this is usually a `long', but on some +systems it's an `int' for efficiency. + + A "limb" means the part of a multi-precision number that fits in a +single machine word. (We chose this word because a limb of the human +body is analogous to a digit, only larger, and containing several +digits.) Normally a limb is 32 or 64 bits. The C data type for a limb +is `mp_limb_t'. + + Counts of limbs of a multi-precision number represented in the C type +`mp_size_t'. Currently this is normally a `long', but on some systems +it's an `int' for efficiency, and on some systems it will be `long +long' in the future. + + Counts of bits of a multi-precision number are represented in the C +type `mp_bitcnt_t'. Currently this is always an `unsigned long', but on +some systems it will be an `unsigned long long' in the future . + + "Random state" means an algorithm selection and current state data. +The C data type for such objects is `gmp_randstate_t'. For example: + + gmp_randstate_t rstate; + + Also, in general `mp_bitcnt_t' is used for bit counts and ranges, and +`size_t' is used for byte or character counts. + + +File: gmp.info, Node: Function Classes, Next: Variable Conventions, Prev: Nomenclature and Types, Up: GMP Basics + +3.3 Function Classes +==================== + +There are six classes of functions in the GMP library: + + 1. Functions for signed integer arithmetic, with names beginning with + `mpz_'. The associated type is `mpz_t'. There are about 150 + functions in this class. (*note Integer Functions::) + + 2. Functions for rational number arithmetic, with names beginning with + `mpq_'. The associated type is `mpq_t'. There are about 40 + functions in this class, but the integer functions can be used for + arithmetic on the numerator and denominator separately. (*note + Rational Number Functions::) + + 3. Functions for floating-point arithmetic, with names beginning with + `mpf_'. The associated type is `mpf_t'. There are about 60 + functions is this class. (*note Floating-point Functions::) + + 4. Functions compatible with Berkeley MP, such as `itom', `madd', and + `mult'. The associated type is `MINT'. (*note BSD Compatible + Functions::) + + 5. Fast low-level functions that operate on natural numbers. These + are used by the functions in the preceding groups, and you can + also call them directly from very time-critical user programs. + These functions' names begin with `mpn_'. The associated type is + array of `mp_limb_t'. There are about 30 (hard-to-use) functions + in this class. (*note Low-level Functions::) + + 6. Miscellaneous functions. Functions for setting up custom + allocation and functions for generating random numbers. (*note + Custom Allocation::, and *note Random Number Functions::) + + +File: gmp.info, Node: Variable Conventions, Next: Parameter Conventions, Prev: Function Classes, Up: GMP Basics + +3.4 Variable Conventions +======================== + +GMP functions generally have output arguments before input arguments. +This notation is by analogy with the assignment operator. The BSD MP +compatibility functions are exceptions, having the output arguments +last. + + GMP lets you use the same variable for both input and output in one +call. For example, the main function for integer multiplication, +`mpz_mul', can be used to square `x' and put the result back in `x' with + + mpz_mul (x, x, x); + + Before you can assign to a GMP variable, you need to initialize it +by calling one of the special initialization functions. When you're +done with a variable, you need to clear it out, using one of the +functions for that purpose. Which function to use depends on the type +of variable. See the chapters on integer functions, rational number +functions, and floating-point functions for details. + + A variable should only be initialized once, or at least cleared +between each initialization. After a variable has been initialized, it +may be assigned to any number of times. + + For efficiency reasons, avoid excessive initializing and clearing. +In general, initialize near the start of a function and clear near the +end. For example, + + void + foo (void) + { + mpz_t n; + int i; + mpz_init (n); + for (i = 1; i < 100; i++) + { + mpz_mul (n, ...); + mpz_fdiv_q (n, ...); + ... + } + mpz_clear (n); + } + + +File: gmp.info, Node: Parameter Conventions, Next: Memory Management, Prev: Variable Conventions, Up: GMP Basics + +3.5 Parameter Conventions +========================= + +When a GMP variable is used as a function parameter, it's effectively a +call-by-reference, meaning if the function stores a value there it will +change the original in the caller. Parameters which are input-only can +be designated `const' to provoke a compiler error or warning on +attempting to modify them. + + When a function is going to return a GMP result, it should designate +a parameter that it sets, like the library functions do. More than one +value can be returned by having more than one output parameter, again +like the library functions. A `return' of an `mpz_t' etc doesn't +return the object, only a pointer, and this is almost certainly not +what's wanted. + + Here's an example accepting an `mpz_t' parameter, doing a +calculation, and storing the result to the indicated parameter. + + void + foo (mpz_t result, const mpz_t param, unsigned long n) + { + unsigned long i; + mpz_mul_ui (result, param, n); + for (i = 1; i < n; i++) + mpz_add_ui (result, result, i*7); + } + + int + main (void) + { + mpz_t r, n; + mpz_init (r); + mpz_init_set_str (n, "123456", 0); + foo (r, n, 20L); + gmp_printf ("%Zd\n", r); + return 0; + } + + `foo' works even if the mainline passes the same variable for +`param' and `result', just like the library functions. But sometimes +it's tricky to make that work, and an application might not want to +bother supporting that sort of thing. + + For interest, the GMP types `mpz_t' etc are implemented as +one-element arrays of certain structures. This is why declaring a +variable creates an object with the fields GMP needs, but then using it +as a parameter passes a pointer to the object. Note that the actual +fields in each `mpz_t' etc are for internal use only and should not be +accessed directly by code that expects to be compatible with future GMP +releases. + + +File: gmp.info, Node: Memory Management, Next: Reentrancy, Prev: Parameter Conventions, Up: GMP Basics + +3.6 Memory Management +===================== + +The GMP types like `mpz_t' are small, containing only a couple of sizes, +and pointers to allocated data. Once a variable is initialized, GMP +takes care of all space allocation. Additional space is allocated +whenever a variable doesn't have enough. + + `mpz_t' and `mpq_t' variables never reduce their allocated space. +Normally this is the best policy, since it avoids frequent reallocation. +Applications that need to return memory to the heap at some particular +point can use `mpz_realloc2', or clear variables no longer needed. + + `mpf_t' variables, in the current implementation, use a fixed amount +of space, determined by the chosen precision and allocated at +initialization, so their size doesn't change. + + All memory is allocated using `malloc' and friends by default, but +this can be changed, see *Note Custom Allocation::. Temporary memory +on the stack is also used (via `alloca'), but this can be changed at +build-time if desired, see *Note Build Options::. + + +File: gmp.info, Node: Reentrancy, Next: Useful Macros and Constants, Prev: Memory Management, Up: GMP Basics + +3.7 Reentrancy +============== + +GMP is reentrant and thread-safe, with some exceptions: + + * If configured with `--enable-alloca=malloc-notreentrant' (or with + `--enable-alloca=notreentrant' when `alloca' is not available), + then naturally GMP is not reentrant. + + * `mpf_set_default_prec' and `mpf_init' use a global variable for the + selected precision. `mpf_init2' can be used instead, and in the + C++ interface an explicit precision to the `mpf_class' constructor. + + * `mpz_random' and the other old random number functions use a global + random state and are hence not reentrant. The newer random number + functions that accept a `gmp_randstate_t' parameter can be used + instead. + + * `gmp_randinit' (obsolete) returns an error indication through a + global variable, which is not thread safe. Applications are + advised to use `gmp_randinit_default' or `gmp_randinit_lc_2exp' + instead. + + * `mp_set_memory_functions' uses global variables to store the + selected memory allocation functions. + + * If the memory allocation functions set by a call to + `mp_set_memory_functions' (or `malloc' and friends by default) are + not reentrant, then GMP will not be reentrant either. + + * If the standard I/O functions such as `fwrite' are not reentrant + then the GMP I/O functions using them will not be reentrant either. + + * It's safe for two threads to read from the same GMP variable + simultaneously, but it's not safe for one to read while the + another might be writing, nor for two threads to write + simultaneously. It's not safe for two threads to generate a + random number from the same `gmp_randstate_t' simultaneously, + since this involves an update of that variable. + + +File: gmp.info, Node: Useful Macros and Constants, Next: Compatibility with older versions, Prev: Reentrancy, Up: GMP Basics + +3.8 Useful Macros and Constants +=============================== + + -- Global Constant: const int mp_bits_per_limb + The number of bits per limb. + + -- Macro: __GNU_MP_VERSION + -- Macro: __GNU_MP_VERSION_MINOR + -- Macro: __GNU_MP_VERSION_PATCHLEVEL + The major and minor GMP version, and patch level, respectively, as + integers. For GMP i.j, these numbers will be i, j, and 0, + respectively. For GMP i.j.k, these numbers will be i, j, and k, + respectively. + + -- Global Constant: const char * const gmp_version + The GMP version number, as a null-terminated string, in the form + "i.j.k". This release is "5.0.1". Note that the format "i.j" was + used when k was zero was used before version 4.3.0. + + -- Macro: __GMP_CC + -- Macro: __GMP_CFLAGS + The compiler and compiler flags, respectively, used when compiling + GMP, as strings. + + +File: gmp.info, Node: Compatibility with older versions, Next: Demonstration Programs, Prev: Useful Macros and Constants, Up: GMP Basics + +3.9 Compatibility with older versions +===================================== + +This version of GMP is upwardly binary compatible with all 4.x and 3.x +versions, and upwardly compatible at the source level with all 2.x +versions, with the following exceptions. + + * `mpn_gcd' had its source arguments swapped as of GMP 3.0, for + consistency with other `mpn' functions. + + * `mpf_get_prec' counted precision slightly differently in GMP 3.0 + and 3.0.1, but in 3.1 reverted to the 2.x style. + + There are a number of compatibility issues between GMP 1 and GMP 2 +that of course also apply when porting applications from GMP 1 to GMP +4. Please see the GMP 2 manual for details. + + The Berkeley MP compatibility library (*note BSD Compatible +Functions::) is source and binary compatible with the standard `libmp'. + + +File: gmp.info, Node: Demonstration Programs, Next: Efficiency, Prev: Compatibility with older versions, Up: GMP Basics + +3.10 Demonstration programs +=========================== + +The `demos' subdirectory has some sample programs using GMP. These +aren't built or installed, but there's a `Makefile' with rules for them. +For instance, + + make pexpr + ./pexpr 68^975+10 + +The following programs are provided + + * `pexpr' is an expression evaluator, the program used on the GMP + web page. + + * The `calc' subdirectory has a similar but simpler evaluator using + `lex' and `yacc'. + + * The `expr' subdirectory is yet another expression evaluator, a + library designed for ease of use within a C program. See + `demos/expr/README' for more information. + + * `factorize' is a Pollard-Rho factorization program. + + * `isprime' is a command-line interface to the `mpz_probab_prime_p' + function. + + * `primes' counts or lists primes in an interval, using a sieve. + + * `qcn' is an example use of `mpz_kronecker_ui' to estimate quadratic + class numbers. + + * The `perl' subdirectory is a comprehensive perl interface to GMP. + See `demos/perl/INSTALL' for more information. Documentation is + in POD format in `demos/perl/GMP.pm'. + + As an aside, consideration has been given at various times to some +sort of expression evaluation within the main GMP library. Going +beyond something minimal quickly leads to matters like user-defined +functions, looping, fixnums for control variables, etc, which are +considered outside the scope of GMP (much closer to language +interpreters or compilers, *Note Language Bindings::.) Something +simple for program input convenience may yet be a possibility, a +combination of the `expr' demo and the `pexpr' tree back-end perhaps. +But for now the above evaluators are offered as illustrations. + + +File: gmp.info, Node: Efficiency, Next: Debugging, Prev: Demonstration Programs, Up: GMP Basics + +3.11 Efficiency +=============== + +Small Operands + On small operands, the time for function call overheads and memory + allocation can be significant in comparison to actual calculation. + This is unavoidable in a general purpose variable precision + library, although GMP attempts to be as efficient as it can on + both large and small operands. + +Static Linking + On some CPUs, in particular the x86s, the static `libgmp.a' should + be used for maximum speed, since the PIC code in the shared + `libgmp.so' will have a small overhead on each function call and + global data address. For many programs this will be + insignificant, but for long calculations there's a gain to be had. + +Initializing and Clearing + Avoid excessive initializing and clearing of variables, since this + can be quite time consuming, especially in comparison to otherwise + fast operations like addition. + + A language interpreter might want to keep a free list or stack of + initialized variables ready for use. It should be possible to + integrate something like that with a garbage collector too. + +Reallocations + An `mpz_t' or `mpq_t' variable used to hold successively increasing + values will have its memory repeatedly `realloc'ed, which could be + quite slow or could fragment memory, depending on the C library. + If an application can estimate the final size then `mpz_init2' or + `mpz_realloc2' can be called to allocate the necessary space from + the beginning (*note Initializing Integers::). + + It doesn't matter if a size set with `mpz_init2' or `mpz_realloc2' + is too small, since all functions will do a further reallocation + if necessary. Badly overestimating memory required will waste + space though. + +`2exp' Functions + It's up to an application to call functions like `mpz_mul_2exp' + when appropriate. General purpose functions like `mpz_mul' make + no attempt to identify powers of two or other special forms, + because such inputs will usually be very rare and testing every + time would be wasteful. + +`ui' and `si' Functions + The `ui' functions and the small number of `si' functions exist for + convenience and should be used where applicable. But if for + example an `mpz_t' contains a value that fits in an `unsigned + long' there's no need extract it and call a `ui' function, just + use the regular `mpz' function. + +In-Place Operations + `mpz_abs', `mpq_abs', `mpf_abs', `mpz_neg', `mpq_neg' and + `mpf_neg' are fast when used for in-place operations like + `mpz_abs(x,x)', since in the current implementation only a single + field of `x' needs changing. On suitable compilers (GCC for + instance) this is inlined too. + + `mpz_add_ui', `mpz_sub_ui', `mpf_add_ui' and `mpf_sub_ui' benefit + from an in-place operation like `mpz_add_ui(x,x,y)', since usually + only one or two limbs of `x' will need to be changed. The same + applies to the full precision `mpz_add' etc if `y' is small. If + `y' is big then cache locality may be helped, but that's all. + + `mpz_mul' is currently the opposite, a separate destination is + slightly better. A call like `mpz_mul(x,x,y)' will, unless `y' is + only one limb, make a temporary copy of `x' before forming the + result. Normally that copying will only be a tiny fraction of the + time for the multiply, so this is not a particularly important + consideration. + + `mpz_set', `mpq_set', `mpq_set_num', `mpf_set', etc, make no + attempt to recognise a copy of something to itself, so a call like + `mpz_set(x,x)' will be wasteful. Naturally that would never be + written deliberately, but if it might arise from two pointers to + the same object then a test to avoid it might be desirable. + + if (x != y) + mpz_set (x, y); + + Note that it's never worth introducing extra `mpz_set' calls just + to get in-place operations. If a result should go to a particular + variable then just direct it there and let GMP take care of data + movement. + +Divisibility Testing (Small Integers) + `mpz_divisible_ui_p' and `mpz_congruent_ui_p' are the best + functions for testing whether an `mpz_t' is divisible by an + individual small integer. They use an algorithm which is faster + than `mpz_tdiv_ui', but which gives no useful information about + the actual remainder, only whether it's zero (or a particular + value). + + However when testing divisibility by several small integers, it's + best to take a remainder modulo their product, to save + multi-precision operations. For instance to test whether a number + is divisible by any of 23, 29 or 31 take a remainder modulo + 23*29*31 = 20677 and then test that. + + The division functions like `mpz_tdiv_q_ui' which give a quotient + as well as a remainder are generally a little slower than the + remainder-only functions like `mpz_tdiv_ui'. If the quotient is + only rarely wanted then it's probably best to just take a + remainder and then go back and calculate the quotient if and when + it's wanted (`mpz_divexact_ui' can be used if the remainder is + zero). + +Rational Arithmetic + The `mpq' functions operate on `mpq_t' values with no common + factors in the numerator and denominator. Common factors are + checked-for and cast out as necessary. In general, cancelling + factors every time is the best approach since it minimizes the + sizes for subsequent operations. + + However, applications that know something about the factorization + of the values they're working with might be able to avoid some of + the GCDs used for canonicalization, or swap them for divisions. + For example when multiplying by a prime it's enough to check for + factors of it in the denominator instead of doing a full GCD. Or + when forming a big product it might be known that very little + cancellation will be possible, and so canonicalization can be left + to the end. + + The `mpq_numref' and `mpq_denref' macros give access to the + numerator and denominator to do things outside the scope of the + supplied `mpq' functions. *Note Applying Integer Functions::. + + The canonical form for rationals allows mixed-type `mpq_t' and + integer additions or subtractions to be done directly with + multiples of the denominator. This will be somewhat faster than + `mpq_add'. For example, + + /* mpq increment */ + mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); + + /* mpq += unsigned long */ + mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); + + /* mpq -= mpz */ + mpz_submul (mpq_numref(q), mpq_denref(q), z); + +Number Sequences + Functions like `mpz_fac_ui', `mpz_fib_ui' and `mpz_bin_uiui' are + designed for calculating isolated values. If a range of values is + wanted it's probably best to call to get a starting point and + iterate from there. + +Text Input/Output + Hexadecimal or octal are suggested for input or output in text + form. Power-of-2 bases like these can be converted much more + efficiently than other bases, like decimal. For big numbers + there's usually nothing of particular interest to be seen in the + digits, so the base doesn't matter much. + + Maybe we can hope octal will one day become the normal base for + everyday use, as proposed by King Charles XII of Sweden and later + reformers. + + +File: gmp.info, Node: Debugging, Next: Profiling, Prev: Efficiency, Up: GMP Basics + +3.12 Debugging +============== + +Stack Overflow + Depending on the system, a segmentation violation or bus error + might be the only indication of stack overflow. See + `--enable-alloca' choices in *Note Build Options::, for how to + address this. + + In new enough versions of GCC, `-fstack-check' may be able to + ensure an overflow is recognised by the system before too much + damage is done, or `-fstack-limit-symbol' or + `-fstack-limit-register' may be able to add checking if the system + itself doesn't do any (*note Options for Code Generation: + (gcc)Code Gen Options.). These options must be added to the + `CFLAGS' used in the GMP build (*note Build Options::), adding + them just to an application will have no effect. Note also + they're a slowdown, adding overhead to each function call and each + stack allocation. + +Heap Problems + The most likely cause of application problems with GMP is heap + corruption. Failing to `init' GMP variables will have + unpredictable effects, and corruption arising elsewhere in a + program may well affect GMP. Initializing GMP variables more than + once or failing to clear them will cause memory leaks. + + In all such cases a `malloc' debugger is recommended. On a GNU or + BSD system the standard C library `malloc' has some diagnostic + facilities, see *Note Allocation Debugging: (libc)Allocation + Debugging, or `man 3 malloc'. Other possibilities, in no + particular order, include + + `http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/' + `http://dmalloc.com/' + `http://www.perens.com/FreeSoftware/' (electric fence) + `http://packages.debian.org/stable/devel/fda' + `http://www.gnupdate.org/components/leakbug/' + `http://people.redhat.com/~otaylor/memprof/' + `http://www.cbmamiga.demon.co.uk/mpatrol/' + + The GMP default allocation routines in `memory.c' also have a + simple sentinel scheme which can be enabled with `#define DEBUG' + in that file. This is mainly designed for detecting buffer + overruns during GMP development, but might find other uses. + +Stack Backtraces + On some systems the compiler options GMP uses by default can + interfere with debugging. In particular on x86 and 68k systems + `-fomit-frame-pointer' is used and this generally inhibits stack + backtracing. Recompiling without such options may help while + debugging, though the usual caveats about it potentially moving a + memory problem or hiding a compiler bug will apply. + +GDB, the GNU Debugger + A sample `.gdbinit' is included in the distribution, showing how + to call some undocumented dump functions to print GMP variables + from within GDB. Note that these functions shouldn't be used in + final application code since they're undocumented and may be + subject to incompatible changes in future versions of GMP. + +Source File Paths + GMP has multiple source files with the same name, in different + directories. For example `mpz', `mpq' and `mpf' each have an + `init.c'. If the debugger can't already determine the right one + it may help to build with absolute paths on each C file. One way + to do that is to use a separate object directory with an absolute + path to the source directory. + + cd /my/build/dir + /my/source/dir/gmp-5.0.1/configure + + This works via `VPATH', and might require GNU `make'. Alternately + it might be possible to change the `.c.lo' rules appropriately. + +Assertion Checking + The build option `--enable-assert' is available to add some + consistency checks to the library (see *Note Build Options::). + These are likely to be of limited value to most applications. + Assertion failures are just as likely to indicate memory + corruption as a library or compiler bug. + + Applications using the low-level `mpn' functions, however, will + benefit from `--enable-assert' since it adds checks on the + parameters of most such functions, many of which have subtle + restrictions on their usage. Note however that only the generic C + code has checks, not the assembly code, so CPU `none' should be + used for maximum checking. + +Temporary Memory Checking + The build option `--enable-alloca=debug' arranges that each block + of temporary memory in GMP is allocated with a separate call to + `malloc' (or the allocation function set with + `mp_set_memory_functions'). + + This can help a malloc debugger detect accesses outside the + intended bounds, or detect memory not released. In a normal + build, on the other hand, temporary memory is allocated in blocks + which GMP divides up for its own use, or may be allocated with a + compiler builtin `alloca' which will go nowhere near any malloc + debugger hooks. + +Maximum Debuggability + To summarize the above, a GMP build for maximum debuggability + would be + + ./configure --disable-shared --enable-assert \ + --enable-alloca=debug --host=none CFLAGS=-g + + For C++, add `--enable-cxx CXXFLAGS=-g'. + +Checker + The GCC checker (`http://savannah.nongnu.org/projects/checker/') + can be used with GMP. It contains a stub library which means GMP + applications compiled with checker can use a normal GMP build. + + A build of GMP with checking within GMP itself can be made. This + will run very very slowly. On GNU/Linux for example, + + ./configure --host=none-pc-linux-gnu CC=checkergcc + + `--host=none' must be used, since the GMP assembly code doesn't + support the checking scheme. The GMP C++ features cannot be used, + since current versions of checker (0.9.9.1) don't yet support the + standard C++ library. + +Valgrind + The valgrind program (`http://valgrind.org/') is a memory checker + for x86s. It translates and emulates machine instructions to do + strong checks for uninitialized data (at the level of individual + bits), memory accesses through bad pointers, and memory leaks. + + Recent versions of Valgrind are getting support for MMX and + SSE/SSE2 instructions, for past versions GMP will need to be + configured not to use those, ie. for an x86 without them (for + instance plain `i486'). + +Other Problems + Any suspected bug in GMP itself should be isolated to make sure + it's not an application problem, see *Note Reporting Bugs::. + + +File: gmp.info, Node: Profiling, Next: Autoconf, Prev: Debugging, Up: GMP Basics + +3.13 Profiling +============== + +Running a program under a profiler is a good way to find where it's +spending most time and where improvements can be best sought. The +profiling choices for a GMP build are as follows. + +`--disable-profiling' + The default is to add nothing special for profiling. + + It should be possible to just compile the mainline of a program + with `-p' and use `prof' to get a profile consisting of + timer-based sampling of the program counter. Most of the GMP + assembly code has the necessary symbol information. + + This approach has the advantage of minimizing interference with + normal program operation, but on most systems the resolution of + the sampling is quite low (10 milliseconds for instance), + requiring long runs to get accurate information. + +`--enable-profiling=prof' + Build with support for the system `prof', which means `-p' added + to the `CFLAGS'. + + This provides call counting in addition to program counter + sampling, which allows the most frequently called routines to be + identified, and an average time spent in each routine to be + determined. + + The x86 assembly code has support for this option, but on other + processors the assembly routines will be as if compiled without + `-p' and therefore won't appear in the call counts. + + On some systems, such as GNU/Linux, `-p' in fact means `-pg' and in + this case `--enable-profiling=gprof' described below should be used + instead. + +`--enable-profiling=gprof' + Build with support for `gprof', which means `-pg' added to the + `CFLAGS'. + + This provides call graph construction in addition to call counting + and program counter sampling, which makes it possible to count + calls coming from different locations. For example the number of + calls to `mpn_mul' from `mpz_mul' versus the number from + `mpf_mul'. The program counter sampling is still flat though, so + only a total time in `mpn_mul' would be accumulated, not a + separate amount for each call site. + + The x86 assembly code has support for this option, but on other + processors the assembly routines will be as if compiled without + `-pg' and therefore not be included in the call counts. + + On x86 and m68k systems `-pg' and `-fomit-frame-pointer' are + incompatible, so the latter is omitted from the default flags in + that case, which might result in poorer code generation. + + Incidentally, it should be possible to use the `gprof' program + with a plain `--enable-profiling=prof' build. But in that case + only the `gprof -p' flat profile and call counts can be expected + to be valid, not the `gprof -q' call graph. + +`--enable-profiling=instrument' + Build with the GCC option `-finstrument-functions' added to the + `CFLAGS' (*note Options for Code Generation: (gcc)Code Gen + Options.). + + This inserts special instrumenting calls at the start and end of + each function, allowing exact timing and full call graph + construction. + + This instrumenting is not normally a standard system feature and + will require support from an external library, such as + + `http://sourceforge.net/projects/fnccheck/' + + This should be included in `LIBS' during the GMP configure so that + test programs will link. For example, + + ./configure --enable-profiling=instrument LIBS=-lfc + + On a GNU system the C library provides dummy instrumenting + functions, so programs compiled with this option will link. In + this case it's only necessary to ensure the correct library is + added when linking an application. + + The x86 assembly code supports this option, but on other + processors the assembly routines will be as if compiled without + `-finstrument-functions' meaning time spent in them will + effectively be attributed to their caller. + + +File: gmp.info, Node: Autoconf, Next: Emacs, Prev: Profiling, Up: GMP Basics + +3.14 Autoconf +============= + +Autoconf based applications can easily check whether GMP is installed. +The only thing to be noted is that GMP library symbols from version 3 +onwards have prefixes like `__gmpz'. The following therefore would be +a simple test, + + AC_CHECK_LIB(gmp, __gmpz_init) + + This just uses the default `AC_CHECK_LIB' actions for found or not +found, but an application that must have GMP would want to generate an +error if not found. For example, + + AC_CHECK_LIB(gmp, __gmpz_init, , + [AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])]) + + If functions added in some particular version of GMP are required, +then one of those can be used when checking. For example `mpz_mul_si' +was added in GMP 3.1, + + AC_CHECK_LIB(gmp, __gmpz_mul_si, , + [AC_MSG_ERROR( + [GNU MP not found, or not 3.1 or up, see http://gmplib.org/])]) + + An alternative would be to test the version number in `gmp.h' using +say `AC_EGREP_CPP'. That would make it possible to test the exact +version, if some particular sub-minor release is known to be necessary. + + In general it's recommended that applications should simply demand a +new enough GMP rather than trying to provide supplements for features +not available in past versions. + + Occasionally an application will need or want to know the size of a +type at configuration or preprocessing time, not just with `sizeof' in +the code. This can be done in the normal way with `mp_limb_t' etc, but +GMP 4.0 or up is best for this, since prior versions needed certain +`-D' defines on systems using a `long long' limb. The following would +suit Autoconf 2.50 or up, + + AC_CHECK_SIZEOF(mp_limb_t, , [#include ]) + + +File: gmp.info, Node: Emacs, Prev: Autoconf, Up: GMP Basics + +3.15 Emacs +========== + + (`info-lookup-symbol') is a good way to find documentation on +C functions while editing (*note Info Documentation Lookup: (emacs)Info +Lookup.). + + The GMP manual can be included in such lookups by putting the +following in your `.emacs', + + (eval-after-load "info-look" + '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) + (setcar (nthcdr 3 mode-value) + (cons '("(gmp)Function Index" nil "^ -.* " "\\>") + (nth 3 mode-value))))) + + +File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: GMP Basics, Up: Top + +4 Reporting Bugs +**************** + +If you think you have found a bug in the GMP library, please +investigate it and report it. We have made this library available to +you, and it is not too much to ask you to report the bugs you find. + + Before you report a bug, check it's not already addressed in *Note +Known Build Problems::, or perhaps *Note Notes for Particular +Systems::. You may also want to check `http://gmplib.org/' for patches +for this release. + + Please include the following in any report, + + * The GMP version number, and if pre-packaged or patched then say so. + + * A test program that makes it possible for us to reproduce the bug. + Include instructions on how to run the program. + + * A description of what is wrong. If the results are incorrect, in + what way. If you get a crash, say so. + + * If you get a crash, include a stack backtrace from the debugger if + it's informative (`where' in `gdb', or `$C' in `adb'). + + * Please do not send core dumps, executables or `strace's. + + * The configuration options you used when building GMP, if any. + + * The name of the compiler and its version. For `gcc', get the + version with `gcc -v', otherwise perhaps `what `which cc`', or + similar. + + * The output from running `uname -a'. + + * The output from running `./config.guess', and from running + `./configfsf.guess' (might be the same). + + * If the bug is related to `configure', then the compressed contents + of `config.log'. + + * If the bug is related to an `asm' file not assembling, then the + contents of `config.m4' and the offending line or lines from the + temporary `mpn/tmp-.s'. + + Please make an effort to produce a self-contained report, with +something definite that can be tested or debugged. Vague queries or +piecemeal messages are difficult to act on and don't help the +development effort. + + It is not uncommon that an observed problem is actually due to a bug +in the compiler; the GMP code tends to explore interesting corners in +compilers. + + If your bug report is good, we will do our best to help you get a +corrected version of the library; if the bug report is poor, we won't +do anything about it (except maybe ask you to send a better report). + + Send your report to: . + + If you think something in this manual is unclear, or downright +incorrect, or if the language needs to be improved, please send a note +to the same address. + + +File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top + +5 Integer Functions +******************* + +This chapter describes the GMP functions for performing integer +arithmetic. These functions start with the prefix `mpz_'. + + GMP integers are stored in objects of type `mpz_t'. + +* Menu: + +* Initializing Integers:: +* Assigning Integers:: +* Simultaneous Integer Init & Assign:: +* Converting Integers:: +* Integer Arithmetic:: +* Integer Division:: +* Integer Exponentiation:: +* Integer Roots:: +* Number Theoretic Functions:: +* Integer Comparisons:: +* Integer Logic and Bit Fiddling:: +* I/O of Integers:: +* Integer Random Numbers:: +* Integer Import and Export:: +* Miscellaneous Integer Functions:: +* Integer Special Functions:: + + +File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Prev: Integer Functions, Up: Integer Functions + +5.1 Initialization Functions +============================ + +The functions for integer arithmetic assume that all integer objects are +initialized. You do that by calling the function `mpz_init'. For +example, + + { + mpz_t integ; + mpz_init (integ); + ... + mpz_add (integ, ...); + ... + mpz_sub (integ, ...); + + /* Unless the program is about to exit, do ... */ + mpz_clear (integ); + } + + As you can see, you can store new values any number of times, once an +object is initialized. + + -- Function: void mpz_init (mpz_t X) + Initialize X, and set its value to 0. + + -- Function: void mpz_inits (mpz_t X, ...) + Initialize a NULL-terminated list of `mpz_t' variables, and set + their values to 0. + + -- Function: void mpz_init2 (mpz_t X, mp_bitcnt_t N) + Initialize X, with space for N-bit numbers, and set its value to 0. + Calling this function instead of `mpz_init' or `mpz_inits' is never + necessary; reallocation is handled automatically by GMP when + needed. + + N is only the initial space, X will grow automatically in the + normal way, if necessary, for subsequent values stored. + `mpz_init2' makes it possible to avoid such reallocations if a + maximum size is known in advance. + + -- Function: void mpz_clear (mpz_t X) + Free the space occupied by X. Call this function for all `mpz_t' + variables when you are done with them. + + -- Function: void mpz_clears (mpz_t X, ...) + Free the space occupied by a NULL-terminated list of `mpz_t' + variables. + + -- Function: void mpz_realloc2 (mpz_t X, mp_bitcnt_t N) + Change the space allocated for X to N bits. The value in X is + preserved if it fits, or is set to 0 if not. + + Calling this function is never necessary; reallocation is handled + automatically by GMP when needed. But this function can be used + to increase the space for a variable in order to avoid repeated + automatic reallocations, or to decrease it to give memory back to + the heap. + + +File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions + +5.2 Assignment Functions +======================== + +These functions assign new values to already initialized integers +(*note Initializing Integers::). + + -- Function: void mpz_set (mpz_t ROP, mpz_t OP) + -- Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) + -- Function: void mpz_set_si (mpz_t ROP, signed long int OP) + -- Function: void mpz_set_d (mpz_t ROP, double OP) + -- Function: void mpz_set_q (mpz_t ROP, mpq_t OP) + -- Function: void mpz_set_f (mpz_t ROP, mpf_t OP) + Set the value of ROP from OP. + + `mpz_set_d', `mpz_set_q' and `mpz_set_f' truncate OP to make it an + integer. + + -- Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE) + Set the value of ROP from STR, a null-terminated C string in base + BASE. White space is allowed in the string, and is simply ignored. + + The BASE may vary from 2 to 62, or if BASE is 0, then the leading + characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' + for binary, `0' for octal, or decimal otherwise. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value. For bases 37 to 62, upper-case + letter represent the usual 10..35 while lower-case letter + represent 36..61. + + This function returns 0 if the entire string is a valid number in + base BASE. Otherwise it returns -1. + + -- Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2) + Swap the values ROP1 and ROP2 efficiently. + + +File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions + +5.3 Combined Initialization and Assignment Functions +==================================================== + +For convenience, GMP provides a parallel series of initialize-and-set +functions which initialize the output and then store the value there. +These functions' names have the form `mpz_init_set...' + + Here is an example of using one: + + { + mpz_t pie; + mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); + ... + mpz_sub (pie, ...); + ... + mpz_clear (pie); + } + +Once the integer has been initialized by any of the `mpz_init_set...' +functions, it can be used as the source or destination operand for the +ordinary integer functions. Don't use an initialize-and-set function +on a variable already initialized! + + -- Function: void mpz_init_set (mpz_t ROP, mpz_t OP) + -- Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) + -- Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) + -- Function: void mpz_init_set_d (mpz_t ROP, double OP) + Initialize ROP with limb space and set the initial numeric value + from OP. + + -- Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE) + Initialize ROP and set its value like `mpz_set_str' (see its + documentation above for details). + + If the string is a correct base BASE number, the function returns + 0; if an error occurs it returns -1. ROP is initialized even if + an error occurs. (I.e., you have to call `mpz_clear' for it.) + + +File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions + +5.4 Conversion Functions +======================== + +This section describes functions for converting GMP integers to +standard C types. Functions for converting _to_ GMP integers are +described in *Note Assigning Integers:: and *Note I/O of Integers::. + + -- Function: unsigned long int mpz_get_ui (mpz_t OP) + Return the value of OP as an `unsigned long'. + + If OP is too big to fit an `unsigned long' then just the least + significant bits that do fit are returned. The sign of OP is + ignored, only the absolute value is used. + + -- Function: signed long int mpz_get_si (mpz_t OP) + If OP fits into a `signed long int' return the value of OP. + Otherwise return the least significant part of OP, with the same + sign as OP. + + If OP is too big to fit in a `signed long int', the returned + result is probably not very useful. To find out if the value will + fit, use the function `mpz_fits_slong_p'. + + -- Function: double mpz_get_d (mpz_t OP) + Convert OP to a `double', truncating if necessary (ie. rounding + towards zero). + + If the exponent from the conversion is too big, the result is + system dependent. An infinity is returned where available. A + hardware overflow trap may or may not occur. + + -- Function: double mpz_get_d_2exp (signed long int *EXP, mpz_t OP) + Convert OP to a `double', truncating if necessary (ie. rounding + towards zero), and returning the exponent separately. + + The return value is in the range 0.5<=abs(D)<1 and the exponent is + stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP + is zero, the return is 0.0 and 0 is stored to `*EXP'. + + This is similar to the standard C `frexp' function (*note + Normalization Functions: (libc)Normalization Functions.). + + -- Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP) + Convert OP to a string of digits in base BASE. The base argument + may vary from 2 to 62 or from -2 to -36. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in + that significance order) are used. + + If STR is `NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + `strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not `NULL', it should point to a block of storage large + enough for the result, that being `mpz_sizeinbase (OP, BASE) + 2'. + The two extra bytes are for a possible minus sign, and the + null-terminator. + + A pointer to the result string is returned, being either the + allocated block, or the given STR. + + +File: gmp.info, Node: Integer Arithmetic, Next: Integer Division, Prev: Converting Integers, Up: Integer Functions + +5.5 Arithmetic Functions +======================== + + -- Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int + OP2) + Set ROP to OP1 + OP2. + + -- Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int + OP2) + -- Function: void mpz_ui_sub (mpz_t ROP, unsigned long int OP1, mpz_t + OP2) + Set ROP to OP1 - OP2. + + -- Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_mul_si (mpz_t ROP, mpz_t OP1, long int OP2) + -- Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int + OP2) + Set ROP to OP1 times OP2. + + -- Function: void mpz_addmul (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_addmul_ui (mpz_t ROP, mpz_t OP1, unsigned long + int OP2) + Set ROP to ROP + OP1 times OP2. + + -- Function: void mpz_submul (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_submul_ui (mpz_t ROP, mpz_t OP1, unsigned long + int OP2) + Set ROP to ROP - OP1 times OP2. + + -- Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, mp_bitcnt_t OP2) + Set ROP to OP1 times 2 raised to OP2. This operation can also be + defined as a left shift by OP2 bits. + + -- Function: void mpz_neg (mpz_t ROP, mpz_t OP) + Set ROP to -OP. + + -- Function: void mpz_abs (mpz_t ROP, mpz_t OP) + Set ROP to the absolute value of OP. + + +File: gmp.info, Node: Integer Division, Next: Integer Exponentiation, Prev: Integer Arithmetic, Up: Integer Functions + +5.6 Division Functions +====================== + +Division is undefined if the divisor is zero. Passing a zero divisor +to the division or modulo functions (including the modular powering +functions `mpz_powm' and `mpz_powm_ui'), will cause an intentional +division by zero. This lets a program handle arithmetic exceptions in +these functions the same way as for normal C `int' arithmetic. + + -- Function: void mpz_cdiv_q (mpz_t Q, mpz_t N, mpz_t D) + -- Function: void mpz_cdiv_r (mpz_t R, mpz_t N, mpz_t D) + -- Function: void mpz_cdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) + -- Function: unsigned long int mpz_cdiv_q_ui (mpz_t Q, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_cdiv_r_ui (mpz_t R, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_cdiv_qr_ui (mpz_t Q, mpz_t R, + mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_cdiv_ui (mpz_t N, + unsigned long int D) + -- Function: void mpz_cdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) + -- Function: void mpz_cdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) + + -- Function: void mpz_fdiv_q (mpz_t Q, mpz_t N, mpz_t D) + -- Function: void mpz_fdiv_r (mpz_t R, mpz_t N, mpz_t D) + -- Function: void mpz_fdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) + -- Function: unsigned long int mpz_fdiv_q_ui (mpz_t Q, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_fdiv_r_ui (mpz_t R, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_fdiv_qr_ui (mpz_t Q, mpz_t R, + mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_fdiv_ui (mpz_t N, + unsigned long int D) + -- Function: void mpz_fdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) + -- Function: void mpz_fdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) + + -- Function: void mpz_tdiv_q (mpz_t Q, mpz_t N, mpz_t D) + -- Function: void mpz_tdiv_r (mpz_t R, mpz_t N, mpz_t D) + -- Function: void mpz_tdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) + -- Function: unsigned long int mpz_tdiv_q_ui (mpz_t Q, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_tdiv_r_ui (mpz_t R, mpz_t N, + unsigned long int D) + -- Function: unsigned long int mpz_tdiv_qr_ui (mpz_t Q, mpz_t R, + mpz_t N, unsigned long int D) + -- Function: unsigned long int mpz_tdiv_ui (mpz_t N, + unsigned long int D) + -- Function: void mpz_tdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) + -- Function: void mpz_tdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) + + Divide N by D, forming a quotient Q and/or remainder R. For the + `2exp' functions, D=2^B. The rounding is in three styles, each + suiting different applications. + + * `cdiv' rounds Q up towards +infinity, and R will have the + opposite sign to D. The `c' stands for "ceil". + + * `fdiv' rounds Q down towards -infinity, and R will have the + same sign as D. The `f' stands for "floor". + + * `tdiv' rounds Q towards zero, and R will have the same sign + as N. The `t' stands for "truncate". + + In all cases Q and R will satisfy N=Q*D+R, and R will satisfy + 0<=abs(R) 0 and that MOD is odd. + + This function is designed to take the same time and have the same + cache access patterns for any two same-size arguments, assuming + that function arguments are placed at the same position and that + the machine state is identical upon function entry. This function + is intended for cryptographic purposes, where resilience to + side-channel attacks is desired. + + -- Function: void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int + EXP) + -- Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, + unsigned long int EXP) + Set ROP to BASE raised to EXP. The case 0^0 yields 1. + + +File: gmp.info, Node: Integer Roots, Next: Number Theoretic Functions, Prev: Integer Exponentiation, Up: Integer Functions + +5.8 Root Extraction Functions +============================= + + -- Function: int mpz_root (mpz_t ROP, mpz_t OP, unsigned long int N) + Set ROP to the truncated integer part of the Nth root of OP. + Return non-zero if the computation was exact, i.e., if OP is ROP + to the Nth power. + + -- Function: void mpz_rootrem (mpz_t ROOT, mpz_t REM, mpz_t U, + unsigned long int N) + Set ROOT to the truncated integer part of the Nth root of U. Set + REM to the remainder, U-ROOT**N. + + -- Function: void mpz_sqrt (mpz_t ROP, mpz_t OP) + Set ROP to the truncated integer part of the square root of OP. + + -- Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, mpz_t OP) + Set ROP1 to the truncated integer part of the square root of OP, + like `mpz_sqrt'. Set ROP2 to the remainder OP-ROP1*ROP1, which + will be zero if OP is a perfect square. + + If ROP1 and ROP2 are the same variable, the results are undefined. + + -- Function: int mpz_perfect_power_p (mpz_t OP) + Return non-zero if OP is a perfect power, i.e., if there exist + integers A and B, with B>1, such that OP equals A raised to the + power B. + + Under this definition both 0 and 1 are considered to be perfect + powers. Negative values of OP are accepted, but of course can + only be odd perfect powers. + + -- Function: int mpz_perfect_square_p (mpz_t OP) + Return non-zero if OP is a perfect square, i.e., if the square + root of OP is an integer. Under this definition both 0 and 1 are + considered to be perfect squares. + + +File: gmp.info, Node: Number Theoretic Functions, Next: Integer Comparisons, Prev: Integer Roots, Up: Integer Functions + +5.9 Number Theoretic Functions +============================== + + -- Function: int mpz_probab_prime_p (mpz_t N, int REPS) + Determine whether N is prime. Return 2 if N is definitely prime, + return 1 if N is probably prime (without being certain), or return + 0 if N is definitely composite. + + This function does some trial divisions, then some Miller-Rabin + probabilistic primality tests. REPS controls how many such tests + are done, 5 to 10 is a reasonable number, more will reduce the + chances of a composite being returned as "probably prime". + + Miller-Rabin and similar tests can be more properly called + compositeness tests. Numbers which fail are known to be composite + but those which pass might be prime or might be composite. Only a + few composites pass, hence those which pass are considered + probably prime. + + -- Function: void mpz_nextprime (mpz_t ROP, mpz_t OP) + Set ROP to the next prime greater than OP. + + This function uses a probabilistic algorithm to identify primes. + For practical purposes it's adequate, the chance of a composite + passing will be extremely small. + + -- Function: void mpz_gcd (mpz_t ROP, mpz_t OP1, mpz_t OP2) + Set ROP to the greatest common divisor of OP1 and OP2. The result + is always positive even if one or both input operands are negative. + + -- Function: unsigned long int mpz_gcd_ui (mpz_t ROP, mpz_t OP1, + unsigned long int OP2) + Compute the greatest common divisor of OP1 and OP2. If ROP is not + `NULL', store the result there. + + If the result is small enough to fit in an `unsigned long int', it + is returned. If the result does not fit, 0 is returned, and the + result is equal to the argument OP1. Note that the result will + always fit if OP2 is non-zero. + + -- Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, mpz_t A, + mpz_t B) + Set G to the greatest common divisor of A and B, and in addition + set S and T to coefficients satisfying A*S + B*T = G. The value + in G is always positive, even if one or both of A and B are + negative. The values in S and T are chosen such that abs(S) <= + abs(B) and abs(T) <= abs(A). + + If T is `NULL' then that value is not computed. + + -- Function: void mpz_lcm (mpz_t ROP, mpz_t OP1, mpz_t OP2) + -- Function: void mpz_lcm_ui (mpz_t ROP, mpz_t OP1, unsigned long OP2) + Set ROP to the least common multiple of OP1 and OP2. ROP is + always positive, irrespective of the signs of OP1 and OP2. ROP + will be zero if either OP1 or OP2 is zero. + + -- Function: int mpz_invert (mpz_t ROP, mpz_t OP1, mpz_t OP2) + Compute the inverse of OP1 modulo OP2 and put the result in ROP. + If the inverse exists, the return value is non-zero and ROP will + satisfy 0 <= ROP < OP2. If an inverse doesn't exist the return + value is zero and ROP is undefined. + + -- Function: int mpz_jacobi (mpz_t A, mpz_t B) + Calculate the Jacobi symbol (A/B). This is defined only for B odd. + + -- Function: int mpz_legendre (mpz_t A, mpz_t P) + Calculate the Legendre symbol (A/P). This is defined only for P + an odd positive prime, and for such P it's identical to the Jacobi + symbol. + + -- Function: int mpz_kronecker (mpz_t A, mpz_t B) + -- Function: int mpz_kronecker_si (mpz_t A, long B) + -- Function: int mpz_kronecker_ui (mpz_t A, unsigned long B) + -- Function: int mpz_si_kronecker (long A, mpz_t B) + -- Function: int mpz_ui_kronecker (unsigned long A, mpz_t B) + Calculate the Jacobi symbol (A/B) with the Kronecker extension + (a/2)=(2/a) when a odd, or (a/2)=0 when a even. + + When B is odd the Jacobi symbol and Kronecker symbol are + identical, so `mpz_kronecker_ui' etc can be used for mixed + precision Jacobi symbols too. + + For more information see Henri Cohen section 1.4.2 (*note + References::), or any number theory textbook. See also the + example program `demos/qcn.c' which uses `mpz_kronecker_ui'. + + -- Function: mp_bitcnt_t mpz_remove (mpz_t ROP, mpz_t OP, mpz_t F) + Remove all occurrences of the factor F from OP and store the + result in ROP. The return value is how many such occurrences were + removed. + + -- Function: void mpz_fac_ui (mpz_t ROP, unsigned long int OP) + Set ROP to OP!, the factorial of OP. + + -- Function: void mpz_bin_ui (mpz_t ROP, mpz_t N, unsigned long int K) + -- Function: void mpz_bin_uiui (mpz_t ROP, unsigned long int N, + unsigned long int K) + Compute the binomial coefficient N over K and store the result in + ROP. Negative values of N are supported by `mpz_bin_ui', using + the identity bin(-n,k) = (-1)^k * bin(n+k-1,k), see Knuth volume 1 + section 1.2.6 part G. + + -- Function: void mpz_fib_ui (mpz_t FN, unsigned long int N) + -- Function: void mpz_fib2_ui (mpz_t FN, mpz_t FNSUB1, unsigned long + int N) + `mpz_fib_ui' sets FN to to F[n], the N'th Fibonacci number. + `mpz_fib2_ui' sets FN to F[n], and FNSUB1 to F[n-1]. + + These functions are designed for calculating isolated Fibonacci + numbers. When a sequence of values is wanted it's best to start + with `mpz_fib2_ui' and iterate the defining F[n+1]=F[n]+F[n-1] or + similar. + + -- Function: void mpz_lucnum_ui (mpz_t LN, unsigned long int N) + -- Function: void mpz_lucnum2_ui (mpz_t LN, mpz_t LNSUB1, unsigned + long int N) + `mpz_lucnum_ui' sets LN to to L[n], the N'th Lucas number. + `mpz_lucnum2_ui' sets LN to L[n], and LNSUB1 to L[n-1]. + + These functions are designed for calculating isolated Lucas + numbers. When a sequence of values is wanted it's best to start + with `mpz_lucnum2_ui' and iterate the defining L[n+1]=L[n]+L[n-1] + or similar. + + The Fibonacci numbers and Lucas numbers are related sequences, so + it's never necessary to call both `mpz_fib2_ui' and + `mpz_lucnum2_ui'. The formulas for going from Fibonacci to Lucas + can be found in *Note Lucas Numbers Algorithm::, the reverse is + straightforward too. + + +File: gmp.info, Node: Integer Comparisons, Next: Integer Logic and Bit Fiddling, Prev: Number Theoretic Functions, Up: Integer Functions + +5.10 Comparison Functions +========================= + + -- Function: int mpz_cmp (mpz_t OP1, mpz_t OP2) + -- Function: int mpz_cmp_d (mpz_t OP1, double OP2) + -- Macro: int mpz_cmp_si (mpz_t OP1, signed long int OP2) + -- Macro: int mpz_cmp_ui (mpz_t OP1, unsigned long int OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero + if OP1 = OP2, or a negative value if OP1 < OP2. + + `mpz_cmp_ui' and `mpz_cmp_si' are macros and will evaluate their + arguments more than once. `mpz_cmp_d' can be called with an + infinity, but results are undefined for a NaN. + + -- Function: int mpz_cmpabs (mpz_t OP1, mpz_t OP2) + -- Function: int mpz_cmpabs_d (mpz_t OP1, double OP2) + -- Function: int mpz_cmpabs_ui (mpz_t OP1, unsigned long int OP2) + Compare the absolute values of OP1 and OP2. Return a positive + value if abs(OP1) > abs(OP2), zero if abs(OP1) = abs(OP2), or a + negative value if abs(OP1) < abs(OP2). + + `mpz_cmpabs_d' can be called with an infinity, but results are + undefined for a NaN. + + -- Macro: int mpz_sgn (mpz_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates + its argument multiple times. + + +File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Integer Comparisons, Up: Integer Functions + +5.11 Logical and Bit Manipulation Functions +=========================================== + +These functions behave as if twos complement arithmetic were used +(although sign-magnitude is the actual implementation). The least +significant bit is number 0. + + -- Function: void mpz_and (mpz_t ROP, mpz_t OP1, mpz_t OP2) + Set ROP to OP1 bitwise-and OP2. + + -- Function: void mpz_ior (mpz_t ROP, mpz_t OP1, mpz_t OP2) + Set ROP to OP1 bitwise inclusive-or OP2. + + -- Function: void mpz_xor (mpz_t ROP, mpz_t OP1, mpz_t OP2) + Set ROP to OP1 bitwise exclusive-or OP2. + + -- Function: void mpz_com (mpz_t ROP, mpz_t OP) + Set ROP to the one's complement of OP. + + -- Function: mp_bitcnt_t mpz_popcount (mpz_t OP) + If OP>=0, return the population count of OP, which is the number + of 1 bits in the binary representation. If OP<0, the number of 1s + is infinite, and the return value is the largest possible + `mp_bitcnt_t'. + + -- Function: mp_bitcnt_t mpz_hamdist (mpz_t OP1, mpz_t OP2) + If OP1 and OP2 are both >=0 or both <0, return the hamming + distance between the two operands, which is the number of bit + positions where OP1 and OP2 have different bit values. If one + operand is >=0 and the other <0 then the number of bits different + is infinite, and the return value is the largest possible + `mp_bitcnt_t'. + + -- Function: mp_bitcnt_t mpz_scan0 (mpz_t OP, mp_bitcnt_t STARTING_BIT) + -- Function: mp_bitcnt_t mpz_scan1 (mpz_t OP, mp_bitcnt_t STARTING_BIT) + Scan OP, starting from bit STARTING_BIT, towards more significant + bits, until the first 0 or 1 bit (respectively) is found. Return + the index of the found bit. + + If the bit at STARTING_BIT is already what's sought, then + STARTING_BIT is returned. + + If there's no bit found, then the largest possible `mp_bitcnt_t' is + returned. This will happen in `mpz_scan0' past the end of a + negative number, or `mpz_scan1' past the end of a nonnegative + number. + + -- Function: void mpz_setbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Set bit BIT_INDEX in ROP. + + -- Function: void mpz_clrbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Clear bit BIT_INDEX in ROP. + + -- Function: void mpz_combit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) + Complement bit BIT_INDEX in ROP. + + -- Function: int mpz_tstbit (mpz_t OP, mp_bitcnt_t BIT_INDEX) + Test bit BIT_INDEX in OP and return 0 or 1 accordingly. + + +File: gmp.info, Node: I/O of Integers, Next: Integer Random Numbers, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions + +5.12 Input and Output Functions +=============================== + +Functions that perform input from a stdio stream, and functions that +output to a stdio stream. Passing a `NULL' pointer for a STREAM +argument to any of these functions will make them read from `stdin' and +write to `stdout', respectively. + + When using any of these functions, it is a good idea to include +`stdio.h' before `gmp.h', since that will allow `gmp.h' to define +prototypes for these functions. + + -- Function: size_t mpz_out_str (FILE *STREAM, int BASE, mpz_t OP) + Output OP on stdio stream STREAM, as a string of digits in base + BASE. The base argument may vary from 2 to 62 or from -2 to -36. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in + that significance order) are used. + + Return the number of bytes written, or if an error occurred, + return 0. + + -- Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) + Input a possibly white-space preceded string in base BASE from + stdio stream STREAM, and put the read integer in ROP. + + The BASE may vary from 2 to 62, or if BASE is 0, then the leading + characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' + for binary, `0' for octal, or decimal otherwise. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value. For bases 37 to 62, upper-case + letter represent the usual 10..35 while lower-case letter + represent 36..61. + + Return the number of bytes read, or if an error occurred, return 0. + + -- Function: size_t mpz_out_raw (FILE *STREAM, mpz_t OP) + Output OP on stdio stream STREAM, in raw binary format. The + integer is written in a portable format, with 4 bytes of size + information, and that many bytes of limbs. Both the size and the + limbs are written in decreasing significance order (i.e., in + big-endian). + + The output can be read with `mpz_inp_raw'. + + Return the number of bytes written, or if an error occurred, + return 0. + + The output of this can not be read by `mpz_inp_raw' from GMP 1, + because of changes necessary for compatibility between 32-bit and + 64-bit machines. + + -- Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) + Input from stdio stream STREAM in the format written by + `mpz_out_raw', and put the result in ROP. Return the number of + bytes read, or if an error occurred, return 0. + + This routine can read the output from `mpz_out_raw' also from GMP + 1, in spite of changes necessary for compatibility between 32-bit + and 64-bit machines. + + +File: gmp.info, Node: Integer Random Numbers, Next: Integer Import and Export, Prev: I/O of Integers, Up: Integer Functions + +5.13 Random Number Functions +============================ + +The random number functions of GMP come in two groups; older function +that rely on a global state, and newer functions that accept a state +parameter that is read and modified. Please see the *Note Random +Number Functions:: for more information on how to use and not to use +random number functions. + + -- Function: void mpz_urandomb (mpz_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t N) + Generate a uniformly distributed random integer in the range 0 to + 2^N-1, inclusive. + + The variable STATE must be initialized by calling one of the + `gmp_randinit' functions (*Note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_urandomm (mpz_t ROP, gmp_randstate_t STATE, + mpz_t N) + Generate a uniform random integer in the range 0 to N-1, inclusive. + + The variable STATE must be initialized by calling one of the + `gmp_randinit' functions (*Note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_rrandomb (mpz_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t N) + Generate a random integer with long strings of zeros and ones in + the binary representation. Useful for testing functions and + algorithms, since this kind of random numbers have proven to be + more likely to trigger corner-case bugs. The random number will + be in the range 0 to 2^N-1, inclusive. + + The variable STATE must be initialized by calling one of the + `gmp_randinit' functions (*Note Random State Initialization::) + before invoking this function. + + -- Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) + Generate a random integer of at most MAX_SIZE limbs. The generated + random number doesn't satisfy any particular requirements of + randomness. Negative random numbers are generated when MAX_SIZE + is negative. + + This function is obsolete. Use `mpz_urandomb' or `mpz_urandomm' + instead. + + -- Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) + Generate a random integer of at most MAX_SIZE limbs, with long + strings of zeros and ones in the binary representation. Useful + for testing functions and algorithms, since this kind of random + numbers have proven to be more likely to trigger corner-case bugs. + Negative random numbers are generated when MAX_SIZE is negative. + + This function is obsolete. Use `mpz_rrandomb' instead. + + +File: gmp.info, Node: Integer Import and Export, Next: Miscellaneous Integer Functions, Prev: Integer Random Numbers, Up: Integer Functions + +5.14 Integer Import and Export +============================== + +`mpz_t' variables can be converted to and from arbitrary words of binary +data with the following functions. + + -- Function: void mpz_import (mpz_t ROP, size_t COUNT, int ORDER, + size_t SIZE, int ENDIAN, size_t NAILS, const void *OP) + Set ROP from an array of word data at OP. + + The parameters specify the format of the data. COUNT many words + are read, each SIZE bytes. ORDER can be 1 for most significant + word first or -1 for least significant first. Within each word + ENDIAN can be 1 for most significant byte first, -1 for least + significant first, or 0 for the native endianness of the host CPU. + The most significant NAILS bits of each word are skipped, this + can be 0 to use the full words. + + There is no sign taken from the data, ROP will simply be a positive + integer. An application can handle any sign itself, and apply it + for instance with `mpz_neg'. + + There are no data alignment restrictions on OP, any address is + allowed. + + Here's an example converting an array of `unsigned long' data, most + significant element first, and host byte order within each value. + + unsigned long a[20]; + /* Initialize Z and A */ + mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); + + This example assumes the full `sizeof' bytes are used for data in + the given type, which is usually true, and certainly true for + `unsigned long' everywhere we know of. However on Cray vector + systems it may be noted that `short' and `int' are always stored + in 8 bytes (and with `sizeof' indicating that) but use only 32 or + 46 bits. The NAILS feature can account for this, by passing for + instance `8*sizeof(int)-INT_BIT'. + + -- Function: void * mpz_export (void *ROP, size_t *COUNTP, int ORDER, + size_t SIZE, int ENDIAN, size_t NAILS, mpz_t OP) + Fill ROP with word data from OP. + + The parameters specify the format of the data produced. Each word + will be SIZE bytes and ORDER can be 1 for most significant word + first or -1 for least significant first. Within each word ENDIAN + can be 1 for most significant byte first, -1 for least significant + first, or 0 for the native endianness of the host CPU. The most + significant NAILS bits of each word are unused and set to zero, + this can be 0 to produce full words. + + The number of words produced is written to `*COUNTP', or COUNTP + can be `NULL' to discard the count. ROP must have enough space + for the data, or if ROP is `NULL' then a result array of the + necessary size is allocated using the current GMP allocation + function (*note Custom Allocation::). In either case the return + value is the destination used, either ROP or the allocated block. + + If OP is non-zero then the most significant word produced will be + non-zero. If OP is zero then the count returned will be zero and + nothing written to ROP. If ROP is `NULL' in this case, no block + is allocated, just `NULL' is returned. + + The sign of OP is ignored, just the absolute value is exported. An + application can use `mpz_sgn' to get the sign and handle it as + desired. (*note Integer Comparisons::) + + There are no data alignment restrictions on ROP, any address is + allowed. + + When an application is allocating space itself the required size + can be determined with a calculation like the following. Since + `mpz_sizeinbase' always returns at least 1, `count' here will be + at least one, which avoids any portability problems with + `malloc(0)', though if `z' is zero no space at all is actually + needed (or written). + + numb = 8*size - nail; + count = (mpz_sizeinbase (z, 2) + numb-1) / numb; + p = malloc (count * size); + + +File: gmp.info, Node: Miscellaneous Integer Functions, Next: Integer Special Functions, Prev: Integer Import and Export, Up: Integer Functions + +5.15 Miscellaneous Functions +============================ + + -- Function: int mpz_fits_ulong_p (mpz_t OP) + -- Function: int mpz_fits_slong_p (mpz_t OP) + -- Function: int mpz_fits_uint_p (mpz_t OP) + -- Function: int mpz_fits_sint_p (mpz_t OP) + -- Function: int mpz_fits_ushort_p (mpz_t OP) + -- Function: int mpz_fits_sshort_p (mpz_t OP) + Return non-zero iff the value of OP fits in an `unsigned long int', + `signed long int', `unsigned int', `signed int', `unsigned short + int', or `signed short int', respectively. Otherwise, return zero. + + -- Macro: int mpz_odd_p (mpz_t OP) + -- Macro: int mpz_even_p (mpz_t OP) + Determine whether OP is odd or even, respectively. Return + non-zero if yes, zero if no. These macros evaluate their argument + more than once. + + -- Function: size_t mpz_sizeinbase (mpz_t OP, int BASE) + Return the size of OP measured in number of digits in the given + BASE. BASE can vary from 2 to 62. The sign of OP is ignored, + just the absolute value is used. The result will be either exact + or 1 too big. If BASE is a power of 2, the result is always + exact. If OP is zero the return value is always 1. + + This function can be used to determine the space required when + converting OP to a string. The right amount of allocation is + normally two more than the value returned by `mpz_sizeinbase', one + extra for a minus sign and one for the null-terminator. + + It will be noted that `mpz_sizeinbase(OP,2)' can be used to locate + the most significant 1 bit in OP, counting from 1. (Unlike the + bitwise functions which start from 0, *Note Logical and Bit + Manipulation Functions: Integer Logic and Bit Fiddling.) + + +File: gmp.info, Node: Integer Special Functions, Prev: Miscellaneous Integer Functions, Up: Integer Functions + +5.16 Special Functions +====================== + +The functions in this section are for various special purposes. Most +applications will not need them. + + -- Function: void mpz_array_init (mpz_t INTEGER_ARRAY, mp_size_t + ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) + This is a special type of initialization. *Fixed* space of + FIXED_NUM_BITS is allocated to each of the ARRAY_SIZE integers in + INTEGER_ARRAY. There is no way to free the storage allocated by + this function. Don't call `mpz_clear'! + + The INTEGER_ARRAY parameter is the first `mpz_t' in the array. For + example, + + mpz_t arr[20000]; + mpz_array_init (arr[0], 20000, 512); + + This function is only intended for programs that create a large + number of integers and need to reduce memory usage by avoiding the + overheads of allocating and reallocating lots of small blocks. In + normal programs this function is not recommended. + + The space allocated to each integer by this function will not be + automatically increased, unlike the normal `mpz_init', so an + application must ensure it is sufficient for any value stored. + The following space requirements apply to various routines, + + * `mpz_abs', `mpz_neg', `mpz_set', `mpz_set_si' and + `mpz_set_ui' need room for the value they store. + + * `mpz_add', `mpz_add_ui', `mpz_sub' and `mpz_sub_ui' need room + for the larger of the two operands, plus an extra + `mp_bits_per_limb'. + + * `mpz_mul', `mpz_mul_ui' and `mpz_mul_ui' need room for the sum + of the number of bits in their operands, but each rounded up + to a multiple of `mp_bits_per_limb'. + + * `mpz_swap' can be used between two array variables, but not + between an array and a normal variable. + + For other functions, or if in doubt, the suggestion is to + calculate in a regular `mpz_init' variable and copy the result to + an array variable with `mpz_set'. + + -- Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) + Change the space for INTEGER to NEW_ALLOC limbs. The value in + INTEGER is preserved if it fits, or is set to 0 if not. The return + value is not useful to applications and should be ignored. + + `mpz_realloc2' is the preferred way to accomplish allocation + changes like this. `mpz_realloc2' and `_mpz_realloc' are the same + except that `_mpz_realloc' takes its size in limbs. + + -- Function: mp_limb_t mpz_getlimbn (mpz_t OP, mp_size_t N) + Return limb number N from OP. The sign of OP is ignored, just the + absolute value is used. The least significant limb is number 0. + + `mpz_size' can be used to find how many limbs make up OP. + `mpz_getlimbn' returns zero if N is outside the range 0 to + `mpz_size(OP)-1'. + + -- Function: size_t mpz_size (mpz_t OP) + Return the size of OP measured in number of limbs. If OP is zero, + the returned value will be zero. + + +File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top + +6 Rational Number Functions +*************************** + +This chapter describes the GMP functions for performing arithmetic on +rational numbers. These functions start with the prefix `mpq_'. + + Rational numbers are stored in objects of type `mpq_t'. + + All rational arithmetic functions assume operands have a canonical +form, and canonicalize their result. The canonical from means that the +denominator and the numerator have no common factors, and that the +denominator is positive. Zero has the unique representation 0/1. + + Pure assignment functions do not canonicalize the assigned variable. +It is the responsibility of the user to canonicalize the assigned +variable before any arithmetic operations are performed on that +variable. + + -- Function: void mpq_canonicalize (mpq_t OP) + Remove any factors that are common to the numerator and + denominator of OP, and make the denominator positive. + +* Menu: + +* Initializing Rationals:: +* Rational Conversions:: +* Rational Arithmetic:: +* Comparing Rationals:: +* Applying Integer Functions:: +* I/O of Rationals:: + + +File: gmp.info, Node: Initializing Rationals, Next: Rational Conversions, Prev: Rational Number Functions, Up: Rational Number Functions + +6.1 Initialization and Assignment Functions +=========================================== + + -- Function: void mpq_init (mpq_t X) + Initialize X and set it to 0/1. Each variable should normally + only be initialized once, or at least cleared out (using the + function `mpq_clear') between each initialization. + + -- Function: void mpq_inits (mpq_t X, ...) + Initialize a NULL-terminated list of `mpq_t' variables, and set + their values to 0/1. + + -- Function: void mpq_clear (mpq_t X) + Free the space occupied by X. Make sure to call this function for + all `mpq_t' variables when you are done with them. + + -- Function: void mpq_clears (mpq_t X, ...) + Free the space occupied by a NULL-terminated list of `mpq_t' + variables. + + -- Function: void mpq_set (mpq_t ROP, mpq_t OP) + -- Function: void mpq_set_z (mpq_t ROP, mpz_t OP) + Assign ROP from OP. + + -- Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, + unsigned long int OP2) + -- Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned + long int OP2) + Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have + common factors, ROP has to be passed to `mpq_canonicalize' before + any operations are performed on ROP. + + -- Function: int mpq_set_str (mpq_t ROP, char *STR, int BASE) + Set ROP from a null-terminated string STR in the given BASE. + + The string can be an integer like "41" or a fraction like + "41/152". The fraction must be in canonical form (*note Rational + Number Functions::), or if not then `mpq_canonicalize' must be + called. + + The numerator and optional denominator are parsed the same as in + `mpz_set_str' (*note Assigning Integers::). White space is + allowed in the string, and is simply ignored. The BASE can vary + from 2 to 62, or if BASE is 0 then the leading characters are + used: `0x' or `0X' for hex, `0b' or `0B' for binary, `0' for + octal, or decimal otherwise. Note that this is done separately + for the numerator and denominator, so for instance `0xEF/100' is + 239/100, whereas `0xEF/0x100' is 239/256. + + The return value is 0 if the entire string is a valid number, or + -1 if not. + + -- Function: void mpq_swap (mpq_t ROP1, mpq_t ROP2) + Swap the values ROP1 and ROP2 efficiently. + + +File: gmp.info, Node: Rational Conversions, Next: Rational Arithmetic, Prev: Initializing Rationals, Up: Rational Number Functions + +6.2 Conversion Functions +======================== + + -- Function: double mpq_get_d (mpq_t OP) + Convert OP to a `double', truncating if necessary (ie. rounding + towards zero). + + If the exponent from the conversion is too big or too small to fit + a `double' then the result is system dependent. For too big an + infinity is returned when available. For too small 0.0 is + normally returned. Hardware overflow, underflow and denorm traps + may or may not occur. + + -- Function: void mpq_set_d (mpq_t ROP, double OP) + -- Function: void mpq_set_f (mpq_t ROP, mpf_t OP) + Set ROP to the value of OP. There is no rounding, this conversion + is exact. + + -- Function: char * mpq_get_str (char *STR, int BASE, mpq_t OP) + Convert OP to a string of digits in base BASE. The base may vary + from 2 to 36. The string will be of the form `num/den', or if the + denominator is 1 then just `num'. + + If STR is `NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + `strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not `NULL', it should point to a block of storage large + enough for the result, that being + + mpz_sizeinbase (mpq_numref(OP), BASE) + + mpz_sizeinbase (mpq_denref(OP), BASE) + 3 + + The three extra bytes are for a possible minus sign, possible + slash, and the null-terminator. + + A pointer to the result string is returned, being either the + allocated block, or the given STR. + + +File: gmp.info, Node: Rational Arithmetic, Next: Comparing Rationals, Prev: Rational Conversions, Up: Rational Number Functions + +6.3 Arithmetic Functions +======================== + + -- Function: void mpq_add (mpq_t SUM, mpq_t ADDEND1, mpq_t ADDEND2) + Set SUM to ADDEND1 + ADDEND2. + + -- Function: void mpq_sub (mpq_t DIFFERENCE, mpq_t MINUEND, mpq_t + SUBTRAHEND) + Set DIFFERENCE to MINUEND - SUBTRAHEND. + + -- Function: void mpq_mul (mpq_t PRODUCT, mpq_t MULTIPLIER, mpq_t + MULTIPLICAND) + Set PRODUCT to MULTIPLIER times MULTIPLICAND. + + -- Function: void mpq_mul_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) + Set ROP to OP1 times 2 raised to OP2. + + -- Function: void mpq_div (mpq_t QUOTIENT, mpq_t DIVIDEND, mpq_t + DIVISOR) + Set QUOTIENT to DIVIDEND/DIVISOR. + + -- Function: void mpq_div_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) + Set ROP to OP1 divided by 2 raised to OP2. + + -- Function: void mpq_neg (mpq_t NEGATED_OPERAND, mpq_t OPERAND) + Set NEGATED_OPERAND to -OPERAND. + + -- Function: void mpq_abs (mpq_t ROP, mpq_t OP) + Set ROP to the absolute value of OP. + + -- Function: void mpq_inv (mpq_t INVERTED_NUMBER, mpq_t NUMBER) + Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, + this routine will divide by zero. + + +File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Rational Arithmetic, Up: Rational Number Functions + +6.4 Comparison Functions +======================== + + -- Function: int mpq_cmp (mpq_t OP1, mpq_t OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero + if OP1 = OP2, and a negative value if OP1 < OP2. + + To determine if two rationals are equal, `mpq_equal' is faster than + `mpq_cmp'. + + -- Macro: int mpq_cmp_ui (mpq_t OP1, unsigned long int NUM2, unsigned + long int DEN2) + -- Macro: int mpq_cmp_si (mpq_t OP1, long int NUM2, unsigned long int + DEN2) + Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > + NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < + NUM2/DEN2. + + NUM2 and DEN2 are allowed to have common factors. + + These functions are implemented as a macros and evaluate their + arguments multiple times. + + -- Macro: int mpq_sgn (mpq_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates its + arguments multiple times. + + -- Function: int mpq_equal (mpq_t OP1, mpq_t OP2) + Return non-zero if OP1 and OP2 are equal, zero if they are + non-equal. Although `mpq_cmp' can be used for the same purpose, + this function is much faster. + + +File: gmp.info, Node: Applying Integer Functions, Next: I/O of Rationals, Prev: Comparing Rationals, Up: Rational Number Functions + +6.5 Applying Integer Functions to Rationals +=========================================== + +The set of `mpq' functions is quite small. In particular, there are few +functions for either input or output. The following functions give +direct access to the numerator and denominator of an `mpq_t'. + + Note that if an assignment to the numerator and/or denominator could +take an `mpq_t' out of the canonical form described at the start of +this chapter (*note Rational Number Functions::) then +`mpq_canonicalize' must be called before any other `mpq' functions are +applied to that `mpq_t'. + + -- Macro: mpz_t mpq_numref (mpq_t OP) + -- Macro: mpz_t mpq_denref (mpq_t OP) + Return a reference to the numerator and denominator of OP, + respectively. The `mpz' functions can be used on the result of + these macros. + + -- Function: void mpq_get_num (mpz_t NUMERATOR, mpq_t RATIONAL) + -- Function: void mpq_get_den (mpz_t DENOMINATOR, mpq_t RATIONAL) + -- Function: void mpq_set_num (mpq_t RATIONAL, mpz_t NUMERATOR) + -- Function: void mpq_set_den (mpq_t RATIONAL, mpz_t DENOMINATOR) + Get or set the numerator or denominator of a rational. These + functions are equivalent to calling `mpz_set' with an appropriate + `mpq_numref' or `mpq_denref'. Direct use of `mpq_numref' or + `mpq_denref' is recommended instead of these functions. + + +File: gmp.info, Node: I/O of Rationals, Prev: Applying Integer Functions, Up: Rational Number Functions + +6.6 Input and Output Functions +============================== + +When using any of these functions, it's a good idea to include `stdio.h' +before `gmp.h', since that will allow `gmp.h' to define prototypes for +these functions. + + Passing a `NULL' pointer for a STREAM argument to any of these +functions will make them read from `stdin' and write to `stdout', +respectively. + + -- Function: size_t mpq_out_str (FILE *STREAM, int BASE, mpq_t OP) + Output OP on stdio stream STREAM, as a string of digits in base + BASE. The base may vary from 2 to 36. Output is in the form + `num/den' or if the denominator is 1 then just `num'. + + Return the number of bytes written, or if an error occurred, + return 0. + + -- Function: size_t mpq_inp_str (mpq_t ROP, FILE *STREAM, int BASE) + Read a string of digits from STREAM and convert them to a rational + in ROP. Any initial white-space characters are read and + discarded. Return the number of characters read (including white + space), or 0 if a rational could not be read. + + The input can be a fraction like `17/63' or just an integer like + `123'. Reading stops at the first character not in this form, and + white space is not permitted within the string. If the input + might not be in canonical form, then `mpq_canonicalize' must be + called (*note Rational Number Functions::). + + The BASE can be between 2 and 36, or can be 0 in which case the + leading characters of the string determine the base, `0x' or `0X' + for hexadecimal, `0' for octal, or decimal otherwise. The leading + characters are examined separately for the numerator and + denominator of a fraction, so for instance `0x10/11' is 16/11, + whereas `0x10/0x11' is 16/17. + + +File: gmp.info, Node: Floating-point Functions, Next: Low-level Functions, Prev: Rational Number Functions, Up: Top + +7 Floating-point Functions +************************** + +GMP floating point numbers are stored in objects of type `mpf_t' and +functions operating on them have an `mpf_' prefix. + + The mantissa of each float has a user-selectable precision, limited +only by available memory. Each variable has its own precision, and +that can be increased or decreased at any time. + + The exponent of each float is a fixed precision, one machine word on +most systems. In the current implementation the exponent is a count of +limbs, so for example on a 32-bit system this means a range of roughly +2^-68719476768 to 2^68719476736, or on a 64-bit system this will be +greater. Note however `mpf_get_str' can only return an exponent which +fits an `mp_exp_t' and currently `mpf_set_str' doesn't accept exponents +bigger than a `long'. + + Each variable keeps a size for the mantissa data actually in use. +This means that if a float is exactly represented in only a few bits +then only those bits will be used in a calculation, even if the +selected precision is high. + + All calculations are performed to the precision of the destination +variable. Each function is defined to calculate with "infinite +precision" followed by a truncation to the destination precision, but +of course the work done is only what's needed to determine a result +under that definition. + + The precision selected for a variable is a minimum value, GMP may +increase it a little to facilitate efficient calculation. Currently +this means rounding up to a whole limb, and then sometimes having a +further partial limb, depending on the high limb of the mantissa. But +applications shouldn't be concerned by such details. + + The mantissa in stored in binary, as might be imagined from the fact +precisions are expressed in bits. One consequence of this is that +decimal fractions like 0.1 cannot be represented exactly. The same is +true of plain IEEE `double' floats. This makes both highly unsuitable +for calculations involving money or other values that should be exact +decimal fractions. (Suitably scaled integers, or perhaps rationals, +are better choices.) + + `mpf' functions and variables have no special notion of infinity or +not-a-number, and applications must take care not to overflow the +exponent or results will be unpredictable. This might change in a +future release. + + Note that the `mpf' functions are _not_ intended as a smooth +extension to IEEE P754 arithmetic. In particular results obtained on +one computer often differ from the results on a computer with a +different word size. + +* Menu: + +* Initializing Floats:: +* Assigning Floats:: +* Simultaneous Float Init & Assign:: +* Converting Floats:: +* Float Arithmetic:: +* Float Comparison:: +* I/O of Floats:: +* Miscellaneous Float Functions:: + + +File: gmp.info, Node: Initializing Floats, Next: Assigning Floats, Prev: Floating-point Functions, Up: Floating-point Functions + +7.1 Initialization Functions +============================ + + -- Function: void mpf_set_default_prec (mp_bitcnt_t PREC) + Set the default precision to be *at least* PREC bits. All + subsequent calls to `mpf_init' will use this precision, but + previously initialized variables are unaffected. + + -- Function: mp_bitcnt_t mpf_get_default_prec (void) + Return the default precision actually used. + + An `mpf_t' object must be initialized before storing the first value +in it. The functions `mpf_init' and `mpf_init2' are used for that +purpose. + + -- Function: void mpf_init (mpf_t X) + Initialize X to 0. Normally, a variable should be initialized + once only or at least be cleared, using `mpf_clear', between + initializations. The precision of X is undefined unless a default + precision has already been established by a call to + `mpf_set_default_prec'. + + -- Function: void mpf_init2 (mpf_t X, mp_bitcnt_t PREC) + Initialize X to 0 and set its precision to be *at least* PREC + bits. Normally, a variable should be initialized once only or at + least be cleared, using `mpf_clear', between initializations. + + -- Function: void mpf_inits (mpf_t X, ...) + Initialize a NULL-terminated list of `mpf_t' variables, and set + their values to 0. The precision of the initialized variables is + undefined unless a default precision has already been established + by a call to `mpf_set_default_prec'. + + -- Function: void mpf_clear (mpf_t X) + Free the space occupied by X. Make sure to call this function for + all `mpf_t' variables when you are done with them. + + -- Function: void mpf_clears (mpf_t X, ...) + Free the space occupied by a NULL-terminated list of `mpf_t' + variables. + + Here is an example on how to initialize floating-point variables: + { + mpf_t x, y; + mpf_init (x); /* use default precision */ + mpf_init2 (y, 256); /* precision _at least_ 256 bits */ + ... + /* Unless the program is about to exit, do ... */ + mpf_clear (x); + mpf_clear (y); + } + + The following three functions are useful for changing the precision +during a calculation. A typical use would be for adjusting the +precision gradually in iterative algorithms like Newton-Raphson, making +the computation precision closely match the actual accurate part of the +numbers. + + -- Function: mp_bitcnt_t mpf_get_prec (mpf_t OP) + Return the current precision of OP, in bits. + + -- Function: void mpf_set_prec (mpf_t ROP, mp_bitcnt_t PREC) + Set the precision of ROP to be *at least* PREC bits. The value in + ROP will be truncated to the new precision. + + This function requires a call to `realloc', and so should not be + used in a tight loop. + + -- Function: void mpf_set_prec_raw (mpf_t ROP, mp_bitcnt_t PREC) + Set the precision of ROP to be *at least* PREC bits, without + changing the memory allocated. + + PREC must be no more than the allocated precision for ROP, that + being the precision when ROP was initialized, or in the most recent + `mpf_set_prec'. + + The value in ROP is unchanged, and in particular if it had a higher + precision than PREC it will retain that higher precision. New + values written to ROP will use the new PREC. + + Before calling `mpf_clear' or the full `mpf_set_prec', another + `mpf_set_prec_raw' call must be made to restore ROP to its original + allocated precision. Failing to do so will have unpredictable + results. + + `mpf_get_prec' can be used before `mpf_set_prec_raw' to get the + original allocated precision. After `mpf_set_prec_raw' it + reflects the PREC value set. + + `mpf_set_prec_raw' is an efficient way to use an `mpf_t' variable + at different precisions during a calculation, perhaps to gradually + increase precision in an iteration, or just to use various + different precisions for different purposes during a calculation. + + +File: gmp.info, Node: Assigning Floats, Next: Simultaneous Float Init & Assign, Prev: Initializing Floats, Up: Floating-point Functions + +7.2 Assignment Functions +======================== + +These functions assign new values to already initialized floats (*note +Initializing Floats::). + + -- Function: void mpf_set (mpf_t ROP, mpf_t OP) + -- Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP) + -- Function: void mpf_set_si (mpf_t ROP, signed long int OP) + -- Function: void mpf_set_d (mpf_t ROP, double OP) + -- Function: void mpf_set_z (mpf_t ROP, mpz_t OP) + -- Function: void mpf_set_q (mpf_t ROP, mpq_t OP) + Set the value of ROP from OP. + + -- Function: int mpf_set_str (mpf_t ROP, char *STR, int BASE) + Set the value of ROP from the string in STR. The string is of the + form `M@N' or, if the base is 10 or less, alternatively `MeN'. + `M' is the mantissa and `N' is the exponent. The mantissa is + always in the specified base. The exponent is either in the + specified base or, if BASE is negative, in decimal. The decimal + point expected is taken from the current locale, on systems + providing `localeconv'. + + The argument BASE may be in the ranges 2 to 62, or -62 to -2. + Negative values are used to specify that the exponent is in + decimal. + + For bases up to 36, case is ignored; upper-case and lower-case + letters have the same value; for bases 37 to 62, upper-case letter + represent the usual 10..35 while lower-case letter represent + 36..61. + + Unlike the corresponding `mpz' function, the base will not be + determined from the leading characters of the string if BASE is 0. + This is so that numbers like `0.23' are not interpreted as octal. + + White space is allowed in the string, and is simply ignored. + [This is not really true; white-space is ignored in the beginning + of the string and within the mantissa, but not in other places, + such as after a minus sign or in the exponent. We are considering + changing the definition of this function, making it fail when + there is any white-space in the input, since that makes a lot of + sense. Please tell us your opinion about this change. Do you + really want it to accept "3 14" as meaning 314 as it does now?] + + This function returns 0 if the entire string is a valid number in + base BASE. Otherwise it returns -1. + + -- Function: void mpf_swap (mpf_t ROP1, mpf_t ROP2) + Swap ROP1 and ROP2 efficiently. Both the values and the + precisions of the two variables are swapped. + + +File: gmp.info, Node: Simultaneous Float Init & Assign, Next: Converting Floats, Prev: Assigning Floats, Up: Floating-point Functions + +7.3 Combined Initialization and Assignment Functions +==================================================== + +For convenience, GMP provides a parallel series of initialize-and-set +functions which initialize the output and then store the value there. +These functions' names have the form `mpf_init_set...' + + Once the float has been initialized by any of the `mpf_init_set...' +functions, it can be used as the source or destination operand for the +ordinary float functions. Don't use an initialize-and-set function on +a variable already initialized! + + -- Function: void mpf_init_set (mpf_t ROP, mpf_t OP) + -- Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP) + -- Function: void mpf_init_set_si (mpf_t ROP, signed long int OP) + -- Function: void mpf_init_set_d (mpf_t ROP, double OP) + Initialize ROP and set its value from OP. + + The precision of ROP will be taken from the active default + precision, as set by `mpf_set_default_prec'. + + -- Function: int mpf_init_set_str (mpf_t ROP, char *STR, int BASE) + Initialize ROP and set its value from the string in STR. See + `mpf_set_str' above for details on the assignment operation. + + Note that ROP is initialized even if an error occurs. (I.e., you + have to call `mpf_clear' for it.) + + The precision of ROP will be taken from the active default + precision, as set by `mpf_set_default_prec'. + + +File: gmp.info, Node: Converting Floats, Next: Float Arithmetic, Prev: Simultaneous Float Init & Assign, Up: Floating-point Functions + +7.4 Conversion Functions +======================== + + -- Function: double mpf_get_d (mpf_t OP) + Convert OP to a `double', truncating if necessary (ie. rounding + towards zero). + + If the exponent in OP is too big or too small to fit a `double' + then the result is system dependent. For too big an infinity is + returned when available. For too small 0.0 is normally returned. + Hardware overflow, underflow and denorm traps may or may not occur. + + -- Function: double mpf_get_d_2exp (signed long int *EXP, mpf_t OP) + Convert OP to a `double', truncating if necessary (ie. rounding + towards zero), and with an exponent returned separately. + + The return value is in the range 0.5<=abs(D)<1 and the exponent is + stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP + is zero, the return is 0.0 and 0 is stored to `*EXP'. + + This is similar to the standard C `frexp' function (*note + Normalization Functions: (libc)Normalization Functions.). + + -- Function: long mpf_get_si (mpf_t OP) + -- Function: unsigned long mpf_get_ui (mpf_t OP) + Convert OP to a `long' or `unsigned long', truncating any fraction + part. If OP is too big for the return type, the result is + undefined. + + See also `mpf_fits_slong_p' and `mpf_fits_ulong_p' (*note + Miscellaneous Float Functions::). + + -- Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int + BASE, size_t N_DIGITS, mpf_t OP) + Convert OP to a string of digits in base BASE. The base argument + may vary from 2 to 62 or from -2 to -36. Up to N_DIGITS digits + will be generated. Trailing zeros are not returned. No more + digits than can be accurately represented by OP are ever + generated. If N_DIGITS is 0 then that accurate maximum number of + digits are generated. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in + that significance order) are used. + + If STR is `NULL', the result string is allocated using the current + allocation function (*note Custom Allocation::). The block will be + `strlen(str)+1' bytes, that being exactly enough for the string and + null-terminator. + + If STR is not `NULL', it should point to a block of N_DIGITS + 2 + bytes, that being enough for the mantissa, a possible minus sign, + and a null-terminator. When N_DIGITS is 0 to get all significant + digits, an application won't be able to know the space required, + and STR should be `NULL' in that case. + + The generated string is a fraction, with an implicit radix point + immediately to the left of the first digit. The applicable + exponent is written through the EXPPTR pointer. For example, the + number 3.1416 would be returned as string "31416" and exponent 1. + + When OP is zero, an empty string is produced and the exponent + returned is 0. + + A pointer to the result string is returned, being either the + allocated block or the given STR. + + +File: gmp.info, Node: Float Arithmetic, Next: Float Comparison, Prev: Converting Floats, Up: Floating-point Functions + +7.5 Arithmetic Functions +======================== + + -- Function: void mpf_add (mpf_t ROP, mpf_t OP1, mpf_t OP2) + -- Function: void mpf_add_ui (mpf_t ROP, mpf_t OP1, unsigned long int + OP2) + Set ROP to OP1 + OP2. + + -- Function: void mpf_sub (mpf_t ROP, mpf_t OP1, mpf_t OP2) + -- Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, mpf_t + OP2) + -- Function: void mpf_sub_ui (mpf_t ROP, mpf_t OP1, unsigned long int + OP2) + Set ROP to OP1 - OP2. + + -- Function: void mpf_mul (mpf_t ROP, mpf_t OP1, mpf_t OP2) + -- Function: void mpf_mul_ui (mpf_t ROP, mpf_t OP1, unsigned long int + OP2) + Set ROP to OP1 times OP2. + + Division is undefined if the divisor is zero, and passing a zero +divisor to the divide functions will make these functions intentionally +divide by zero. This lets the user handle arithmetic exceptions in +these functions in the same manner as other arithmetic exceptions. + + -- Function: void mpf_div (mpf_t ROP, mpf_t OP1, mpf_t OP2) + -- Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, mpf_t + OP2) + -- Function: void mpf_div_ui (mpf_t ROP, mpf_t OP1, unsigned long int + OP2) + Set ROP to OP1/OP2. + + -- Function: void mpf_sqrt (mpf_t ROP, mpf_t OP) + -- Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP) + Set ROP to the square root of OP. + + -- Function: void mpf_pow_ui (mpf_t ROP, mpf_t OP1, unsigned long int + OP2) + Set ROP to OP1 raised to the power OP2. + + -- Function: void mpf_neg (mpf_t ROP, mpf_t OP) + Set ROP to -OP. + + -- Function: void mpf_abs (mpf_t ROP, mpf_t OP) + Set ROP to the absolute value of OP. + + -- Function: void mpf_mul_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) + Set ROP to OP1 times 2 raised to OP2. + + -- Function: void mpf_div_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) + Set ROP to OP1 divided by 2 raised to OP2. + + +File: gmp.info, Node: Float Comparison, Next: I/O of Floats, Prev: Float Arithmetic, Up: Floating-point Functions + +7.6 Comparison Functions +======================== + + -- Function: int mpf_cmp (mpf_t OP1, mpf_t OP2) + -- Function: int mpf_cmp_d (mpf_t OP1, double OP2) + -- Function: int mpf_cmp_ui (mpf_t OP1, unsigned long int OP2) + -- Function: int mpf_cmp_si (mpf_t OP1, signed long int OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero + if OP1 = OP2, and a negative value if OP1 < OP2. + + `mpf_cmp_d' can be called with an infinity, but results are + undefined for a NaN. + + -- Function: int mpf_eq (mpf_t OP1, mpf_t OP2, mp_bitcnt_t op3) + Return non-zero if the first OP3 bits of OP1 and OP2 are equal, + zero otherwise. I.e., test if OP1 and OP2 are approximately equal. + + Caution 1: All version of GMP up to version 4.2.4 compared just + whole limbs, meaning sometimes more than OP3 bits, sometimes fewer. + + Caution 2: This function will consider XXX11...111 and XX100...000 + different, even if ... is replaced by a semi-infinite number of + bits. Such numbers are really just one ulp off, and should be + considered equal. + + -- Function: void mpf_reldiff (mpf_t ROP, mpf_t OP1, mpf_t OP2) + Compute the relative difference between OP1 and OP2 and store the + result in ROP. This is abs(OP1-OP2)/OP1. + + -- Macro: int mpf_sgn (mpf_t OP) + Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. + + This function is actually implemented as a macro. It evaluates + its arguments multiple times. + + +File: gmp.info, Node: I/O of Floats, Next: Miscellaneous Float Functions, Prev: Float Comparison, Up: Floating-point Functions + +7.7 Input and Output Functions +============================== + +Functions that perform input from a stdio stream, and functions that +output to a stdio stream. Passing a `NULL' pointer for a STREAM +argument to any of these functions will make them read from `stdin' and +write to `stdout', respectively. + + When using any of these functions, it is a good idea to include +`stdio.h' before `gmp.h', since that will allow `gmp.h' to define +prototypes for these functions. + + -- Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t + N_DIGITS, mpf_t OP) + Print OP to STREAM, as a string of digits. Return the number of + bytes written, or if an error occurred, return 0. + + The mantissa is prefixed with an `0.' and is in the given BASE, + which may vary from 2 to 62 or from -2 to -36. An exponent is + then printed, separated by an `e', or if the base is greater than + 10 then by an `@'. The exponent is always in decimal. The + decimal point follows the current locale, on systems providing + `localeconv'. + + For BASE in the range 2..36, digits and lower-case letters are + used; for -2..-36, digits and upper-case letters are used; for + 37..62, digits, upper-case letters, and lower-case letters (in + that significance order) are used. + + Up to N_DIGITS will be printed from the mantissa, except that no + more digits than are accurately representable by OP will be + printed. N_DIGITS can be 0 to select that accurate maximum. + + -- Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE) + Read a string in base BASE from STREAM, and put the read float in + ROP. The string is of the form `M@N' or, if the base is 10 or + less, alternatively `MeN'. `M' is the mantissa and `N' is the + exponent. The mantissa is always in the specified base. The + exponent is either in the specified base or, if BASE is negative, + in decimal. The decimal point expected is taken from the current + locale, on systems providing `localeconv'. + + The argument BASE may be in the ranges 2 to 36, or -36 to -2. + Negative values are used to specify that the exponent is in + decimal. + + Unlike the corresponding `mpz' function, the base will not be + determined from the leading characters of the string if BASE is 0. + This is so that numbers like `0.23' are not interpreted as octal. + + Return the number of bytes read, or if an error occurred, return 0. + + +File: gmp.info, Node: Miscellaneous Float Functions, Prev: I/O of Floats, Up: Floating-point Functions + +7.8 Miscellaneous Functions +=========================== + + -- Function: void mpf_ceil (mpf_t ROP, mpf_t OP) + -- Function: void mpf_floor (mpf_t ROP, mpf_t OP) + -- Function: void mpf_trunc (mpf_t ROP, mpf_t OP) + Set ROP to OP rounded to an integer. `mpf_ceil' rounds to the + next higher integer, `mpf_floor' to the next lower, and `mpf_trunc' + to the integer towards zero. + + -- Function: int mpf_integer_p (mpf_t OP) + Return non-zero if OP is an integer. + + -- Function: int mpf_fits_ulong_p (mpf_t OP) + -- Function: int mpf_fits_slong_p (mpf_t OP) + -- Function: int mpf_fits_uint_p (mpf_t OP) + -- Function: int mpf_fits_sint_p (mpf_t OP) + -- Function: int mpf_fits_ushort_p (mpf_t OP) + -- Function: int mpf_fits_sshort_p (mpf_t OP) + Return non-zero if OP would fit in the respective C data type, when + truncated to an integer. + + -- Function: void mpf_urandomb (mpf_t ROP, gmp_randstate_t STATE, + mp_bitcnt_t NBITS) + Generate a uniformly distributed random float in ROP, such that 0 + <= ROP < 1, with NBITS significant bits in the mantissa. + + The variable STATE must be initialized by calling one of the + `gmp_randinit' functions (*Note Random State Initialization::) + before invoking this function. + + -- Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t + EXP) + Generate a random float of at most MAX_SIZE limbs, with long + strings of zeros and ones in the binary representation. The + exponent of the number is in the interval -EXP to EXP (in limbs). + This function is useful for testing functions and algorithms, + since these kind of random numbers have proven to be more likely + to trigger corner-case bugs. Negative random numbers are + generated when MAX_SIZE is negative. + + +File: gmp.info, Node: Low-level Functions, Next: Random Number Functions, Prev: Floating-point Functions, Up: Top + +8 Low-level Functions +********************* + +This chapter describes low-level GMP functions, used to implement the +high-level GMP functions, but also intended for time-critical user code. + + These functions start with the prefix `mpn_'. + + The `mpn' functions are designed to be as fast as possible, *not* to +provide a coherent calling interface. The different functions have +somewhat similar interfaces, but there are variations that make them +hard to use. These functions do as little as possible apart from the +real multiple precision computation, so that no time is spent on things +that not all callers need. + + A source operand is specified by a pointer to the least significant +limb and a limb count. A destination operand is specified by just a +pointer. It is the responsibility of the caller to ensure that the +destination has enough space for storing the result. + + With this way of specifying operands, it is possible to perform +computations on subranges of an argument, and store the result into a +subrange of a destination. + + A common requirement for all functions is that each source area +needs at least one limb. No size argument may be zero. Unless +otherwise stated, in-place operations are allowed where source and +destination are the same, but not where they only partly overlap. + + The `mpn' functions are the base for the implementation of the +`mpz_', `mpf_', and `mpq_' functions. + + This example adds the number beginning at S1P and the number +beginning at S2P and writes the sum at DESTP. All areas have N limbs. + + cy = mpn_add_n (destp, s1p, s2p, n) + + It should be noted that the `mpn' functions make no attempt to +identify high or low zero limbs on their operands, or other special +forms. On random data such cases will be unlikely and it'd be wasteful +for every function to check every time. An application knowing +something about its data can take steps to trim or perhaps split its +calculations. + + +In the notation used below, a source operand is identified by the +pointer to the least significant limb, and the limb count in braces. +For example, {S1P, S1N}. + + -- Function: mp_limb_t mpn_add_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Add {S1P, N} and {S2P, N}, and write the N least significant limbs + of the result to RP. Return carry, either 0 or 1. + + This is the lowest-level function for addition. It is the + preferred function for addition, since it is written in assembly + for most CPUs. For addition of a variable to itself (i.e., S1P + equals S2P) use `mpn_lshift' with a count of 1 for optimal speed. + + -- Function: mp_limb_t mpn_add_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Add {S1P, N} and S2LIMB, and write the N least significant limbs + of the result to RP. Return carry, either 0 or 1. + + -- Function: mp_limb_t mpn_add (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Add {S1P, S1N} and {S2P, S2N}, and write the S1N least significant + limbs of the result to RP. Return carry, either 0 or 1. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: mp_limb_t mpn_sub_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Subtract {S2P, N} from {S1P, N}, and write the N least significant + limbs of the result to RP. Return borrow, either 0 or 1. + + This is the lowest-level function for subtraction. It is the + preferred function for subtraction, since it is written in + assembly for most CPUs. + + -- Function: mp_limb_t mpn_sub_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Subtract S2LIMB from {S1P, N}, and write the N least significant + limbs of the result to RP. Return borrow, either 0 or 1. + + -- Function: mp_limb_t mpn_sub (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Subtract {S2P, S2N} from {S1P, S1N}, and write the S1N least + significant limbs of the result to RP. Return borrow, either 0 or + 1. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: void mpn_neg (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N) + Perform the negation of {SP, N}, and write the result to {RP, N}. + Return carry-out. + + -- Function: void mpn_mul_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Multiply {S1P, N} and {S2P, N}, and write the 2*N-limb result to + RP. + + The destination has to have space for 2*N limbs, even if the + product's most significant limb is zero. No overlap is permitted + between the destination and either source. + + If the two input operands are the same, use `mpn_sqr'. + + -- Function: mp_limb_t mpn_mul (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) + Multiply {S1P, S1N} and {S2P, S2N}, and write the (S1N+S2N)-limb + result to RP. Return the most significant limb of the result. + + The destination has to have space for S1N + S2N limbs, even if the + product's most significant limb is zero. No overlap is permitted + between the destination and either source. + + This function requires that S1N is greater than or equal to S2N. + + -- Function: void mpn_sqr (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Compute the square of {S1P, N} and write the 2*N-limb result to RP. + + The destination has to have space for 2*N limbs, even if the + result's most significant limb is zero. No overlap is permitted + between the destination and the source. + + -- Function: mp_limb_t mpn_mul_1 (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} by S2LIMB, and write the N least significant + limbs of the product to RP. Return the most significant limb of + the product. {S1P, N} and {RP, N} are allowed to overlap provided + RP <= S1P. + + This is a low-level function that is a building block for general + multiplication as well as other operations in GMP. It is written + in assembly for most CPUs. + + Don't call this function if S2LIMB is a power of 2; use + `mpn_lshift' with a count equal to the logarithm of S2LIMB + instead, for optimal speed. + + -- Function: mp_limb_t mpn_addmul_1 (mp_limb_t *RP, const mp_limb_t + *S1P, mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} and S2LIMB, and add the N least significant + limbs of the product to {RP, N} and write the result to RP. + Return the most significant limb of the product, plus carry-out + from the addition. + + This is a low-level function that is a building block for general + multiplication as well as other operations in GMP. It is written + in assembly for most CPUs. + + -- Function: mp_limb_t mpn_submul_1 (mp_limb_t *RP, const mp_limb_t + *S1P, mp_size_t N, mp_limb_t S2LIMB) + Multiply {S1P, N} and S2LIMB, and subtract the N least significant + limbs of the product from {RP, N} and write the result to RP. + Return the most significant limb of the product, plus borrow-out + from the subtraction. + + This is a low-level function that is a building block for general + multiplication and division as well as other operations in GMP. + It is written in assembly for most CPUs. + + -- Function: void mpn_tdiv_qr (mp_limb_t *QP, mp_limb_t *RP, mp_size_t + QXN, const mp_limb_t *NP, mp_size_t NN, const mp_limb_t *DP, + mp_size_t DN) + Divide {NP, NN} by {DP, DN} and put the quotient at {QP, NN-DN+1} + and the remainder at {RP, DN}. The quotient is rounded towards 0. + + No overlap is permitted between arguments, except that NP might + equal RP. The dividend size NN must be greater than or equal to + divisor size DN. The most significant limb of the divisor must be + non-zero. The QXN operand must be zero. + + -- Function: mp_limb_t mpn_divrem (mp_limb_t *R1P, mp_size_t QXN, + mp_limb_t *RS2P, mp_size_t RS2N, const mp_limb_t *S3P, + mp_size_t S3N) + [This function is obsolete. Please call `mpn_tdiv_qr' instead for + best performance.] + + Divide {RS2P, RS2N} by {S3P, S3N}, and write the quotient at R1P, + with the exception of the most significant limb, which is + returned. The remainder replaces the dividend at RS2P; it will be + S3N limbs long (i.e., as many limbs as the divisor). + + In addition to an integer quotient, QXN fraction limbs are + developed, and stored after the integral limbs. For most usages, + QXN will be zero. + + It is required that RS2N is greater than or equal to S3N. It is + required that the most significant bit of the divisor is set. + + If the quotient is not needed, pass RS2P + S3N as R1P. Aside from + that special case, no overlap between arguments is permitted. + + Return the most significant limb of the quotient, either 0 or 1. + + The area at R1P needs to be RS2N - S3N + QXN limbs large. + + -- Function: mp_limb_t mpn_divrem_1 (mp_limb_t *R1P, mp_size_t QXN, + mp_limb_t *S2P, mp_size_t S2N, mp_limb_t S3LIMB) + -- Macro: mp_limb_t mpn_divmod_1 (mp_limb_t *R1P, mp_limb_t *S2P, + mp_size_t S2N, mp_limb_t S3LIMB) + Divide {S2P, S2N} by S3LIMB, and write the quotient at R1P. + Return the remainder. + + The integer quotient is written to {R1P+QXN, S2N} and in addition + QXN fraction limbs are developed and written to {R1P, QXN}. + Either or both S2N and QXN can be zero. For most usages, QXN will + be zero. + + `mpn_divmod_1' exists for upward source compatibility and is + simply a macro calling `mpn_divrem_1' with a QXN of 0. + + The areas at R1P and S2P have to be identical or completely + separate, not partially overlapping. + + -- Function: mp_limb_t mpn_divmod (mp_limb_t *R1P, mp_limb_t *RS2P, + mp_size_t RS2N, const mp_limb_t *S3P, mp_size_t S3N) + [This function is obsolete. Please call `mpn_tdiv_qr' instead for + best performance.] + + -- Macro: mp_limb_t mpn_divexact_by3 (mp_limb_t *RP, mp_limb_t *SP, + mp_size_t N) + -- Function: mp_limb_t mpn_divexact_by3c (mp_limb_t *RP, mp_limb_t + *SP, mp_size_t N, mp_limb_t CARRY) + Divide {SP, N} by 3, expecting it to divide exactly, and writing + the result to {RP, N}. If 3 divides exactly, the return value is + zero and the result is the quotient. If not, the return value is + non-zero and the result won't be anything useful. + + `mpn_divexact_by3c' takes an initial carry parameter, which can be + the return value from a previous call, so a large calculation can + be done piece by piece from low to high. `mpn_divexact_by3' is + simply a macro calling `mpn_divexact_by3c' with a 0 carry + parameter. + + These routines use a multiply-by-inverse and will be faster than + `mpn_divrem_1' on CPUs with fast multiplication but slow division. + + The source a, result q, size n, initial carry i, and return value + c satisfy c*b^n + a-i = 3*q, where b=2^GMP_NUMB_BITS. The return + c is always 0, 1 or 2, and the initial carry i must also be 0, 1 + or 2 (these are both borrows really). When c=0 clearly q=(a-i)/3. + When c!=0, the remainder (a-i) mod 3 is given by 3-c, because b + == 1 mod 3 (when `mp_bits_per_limb' is even, which is always so + currently). + + -- Function: mp_limb_t mpn_mod_1 (mp_limb_t *S1P, mp_size_t S1N, + mp_limb_t S2LIMB) + Divide {S1P, S1N} by S2LIMB, and return the remainder. S1N can be + zero. + + -- Function: mp_limb_t mpn_lshift (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N, unsigned int COUNT) + Shift {SP, N} left by COUNT bits, and write the result to {RP, N}. + The bits shifted out at the left are returned in the least + significant COUNT bits of the return value (the rest of the return + value is zero). + + COUNT must be in the range 1 to mp_bits_per_limb-1. The regions + {SP, N} and {RP, N} may overlap, provided RP >= SP. + + This function is written in assembly for most CPUs. + + -- Function: mp_limb_t mpn_rshift (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N, unsigned int COUNT) + Shift {SP, N} right by COUNT bits, and write the result to {RP, + N}. The bits shifted out at the right are returned in the most + significant COUNT bits of the return value (the rest of the return + value is zero). + + COUNT must be in the range 1 to mp_bits_per_limb-1. The regions + {SP, N} and {RP, N} may overlap, provided RP <= SP. + + This function is written in assembly for most CPUs. + + -- Function: int mpn_cmp (const mp_limb_t *S1P, const mp_limb_t *S2P, + mp_size_t N) + Compare {S1P, N} and {S2P, N} and return a positive value if S1 > + S2, 0 if they are equal, or a negative value if S1 < S2. + + -- Function: mp_size_t mpn_gcd (mp_limb_t *RP, mp_limb_t *XP, + mp_size_t XN, mp_limb_t *YP, mp_size_t YN) + Set {RP, RETVAL} to the greatest common divisor of {XP, XN} and + {YP, YN}. The result can be up to YN limbs, the return value is + the actual number produced. Both source operands are destroyed. + + {XP, XN} must have at least as many bits as {YP, YN}. {YP, YN} + must be odd. Both operands must have non-zero most significant + limbs. No overlap is permitted between {XP, XN} and {YP, YN}. + + -- Function: mp_limb_t mpn_gcd_1 (const mp_limb_t *XP, mp_size_t XN, + mp_limb_t YLIMB) + Return the greatest common divisor of {XP, XN} and YLIMB. Both + operands must be non-zero. + + -- Function: mp_size_t mpn_gcdext (mp_limb_t *GP, mp_limb_t *SP, + mp_size_t *SN, mp_limb_t *XP, mp_size_t XN, mp_limb_t *YP, + mp_size_t YN) + Let U be defined by {XP, XN} and let V be defined by {YP, YN}. + + Compute the greatest common divisor G of U and V. Compute a + cofactor S such that G = US + VT. The second cofactor T is not + computed but can easily be obtained from (G - U*S) / V (the + division will be exact). It is required that U >= V > 0. + + S satisfies S = 1 or abs(S) < V / (2 G). S = 0 if and only if V + divides U (i.e., G = V). + + Store G at GP and let the return value define its limb count. + Store S at SP and let |*SN| define its limb count. S can be + negative; when this happens *SN will be negative. The areas at GP + and SP should each have room for XN+1 limbs. + + The areas {XP, XN+1} and {YP, YN+1} are destroyed (i.e. the input + operands plus an extra limb past the end of each). + + Compatibility note: GMP 4.3.0 and 4.3.1 defined S less strictly. + Earlier as well as later GMP releases define S as described here. + + -- Function: mp_size_t mpn_sqrtrem (mp_limb_t *R1P, mp_limb_t *R2P, + const mp_limb_t *SP, mp_size_t N) + Compute the square root of {SP, N} and put the result at {R1P, + ceil(N/2)} and the remainder at {R2P, RETVAL}. R2P needs space + for N limbs, but the return value indicates how many are produced. + + The most significant limb of {SP, N} must be non-zero. The areas + {R1P, ceil(N/2)} and {SP, N} must be completely separate. The + areas {R2P, N} and {SP, N} must be either identical or completely + separate. + + If the remainder is not wanted then R2P can be `NULL', and in this + case the return value is zero or non-zero according to whether the + remainder would have been zero or non-zero. + + A return value of zero indicates a perfect square. See also + `mpz_perfect_square_p'. + + -- Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE, + mp_limb_t *S1P, mp_size_t S1N) + Convert {S1P, S1N} to a raw unsigned char array at STR in base + BASE, and return the number of characters produced. There may be + leading zeros in the string. The string is not in ASCII; to + convert it to printable format, add the ASCII codes for `0' or + `A', depending on the base and range. BASE can vary from 2 to 256. + + The most significant limb of the input {S1P, S1N} must be + non-zero. The input {S1P, S1N} is clobbered, except when BASE is + a power of 2, in which case it's unchanged. + + The area at STR has to have space for the largest possible number + represented by a S1N long limb array, plus one extra character. + + -- Function: mp_size_t mpn_set_str (mp_limb_t *RP, const unsigned char + *STR, size_t STRSIZE, int BASE) + Convert bytes {STR,STRSIZE} in the given BASE to limbs at RP. + + STR[0] is the most significant byte and STR[STRSIZE-1] is the + least significant. Each byte should be a value in the range 0 to + BASE-1, not an ASCII character. BASE can vary from 2 to 256. + + The return value is the number of limbs written to RP. If the most + significant input byte is non-zero then the high limb at RP will be + non-zero, and only that exact number of limbs will be required + there. + + If the most significant input byte is zero then there may be high + zero limbs written to RP and included in the return value. + + STRSIZE must be at least 1, and no overlap is permitted between + {STR,STRSIZE} and the result at RP. + + -- Function: mp_bitcnt_t mpn_scan0 (const mp_limb_t *S1P, mp_bitcnt_t + BIT) + Scan S1P from bit position BIT for the next clear bit. + + It is required that there be a clear bit within the area at S1P at + or beyond bit position BIT, so that the function has something to + return. + + -- Function: mp_bitcnt_t mpn_scan1 (const mp_limb_t *S1P, mp_bitcnt_t + BIT) + Scan S1P from bit position BIT for the next set bit. + + It is required that there be a set bit within the area at S1P at or + beyond bit position BIT, so that the function has something to + return. + + -- Function: void mpn_random (mp_limb_t *R1P, mp_size_t R1N) + -- Function: void mpn_random2 (mp_limb_t *R1P, mp_size_t R1N) + Generate a random number of length R1N and store it at R1P. The + most significant limb is always non-zero. `mpn_random' generates + uniformly distributed limb data, `mpn_random2' generates long + strings of zeros and ones in the binary representation. + + `mpn_random2' is intended for testing the correctness of the `mpn' + routines. + + -- Function: mp_bitcnt_t mpn_popcount (const mp_limb_t *S1P, mp_size_t + N) + Count the number of set bits in {S1P, N}. + + -- Function: mp_bitcnt_t mpn_hamdist (const mp_limb_t *S1P, const + mp_limb_t *S2P, mp_size_t N) + Compute the hamming distance between {S1P, N} and {S2P, N}, which + is the number of bit positions where the two operands have + different bit values. + + -- Function: int mpn_perfect_square_p (const mp_limb_t *S1P, mp_size_t + N) + Return non-zero iff {S1P, N} is a perfect square. + + -- Function: void mpn_and_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and {S2P, N}, and + write the result to {RP, N}. + + -- Function: void mpn_ior_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, + and write the result to {RP, N}. + + -- Function: void mpn_xor_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, + and write the result to {RP, N}. + + -- Function: void mpn_andn_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and the bitwise + complement of {S2P, N}, and write the result to {RP, N}. + + -- Function: void mpn_iorn_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and the + bitwise complement of {S2P, N}, and write the result to {RP, N}. + + -- Function: void mpn_nand_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical and of {S1P, N} and {S2P, N}, and + write the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_nior_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, + and write the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_xnor_n (mp_limb_t *RP, const mp_limb_t *S1P, + const mp_limb_t *S2P, mp_size_t N) + Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, + and write the bitwise complement of the result to {RP, N}. + + -- Function: void mpn_com (mp_limb_t *RP, const mp_limb_t *SP, + mp_size_t N) + Perform the bitwise complement of {SP, N}, and write the result to + {RP, N}. + + -- Function: void mpn_copyi (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Copy from {S1P, N} to {RP, N}, increasingly. + + -- Function: void mpn_copyd (mp_limb_t *RP, const mp_limb_t *S1P, + mp_size_t N) + Copy from {S1P, N} to {RP, N}, decreasingly. + + -- Function: void mpn_zero (mp_limb_t *RP, mp_size_t N) + Zero {RP, N}. + + +8.1 Nails +========= + +*Everything in this section is highly experimental and may disappear or +be subject to incompatible changes in a future version of GMP.* + + Nails are an experimental feature whereby a few bits are left unused +at the top of each `mp_limb_t'. This can significantly improve carry +handling on some processors. + + All the `mpn' functions accepting limb data will expect the nail +bits to be zero on entry, and will return data with the nails similarly +all zero. This applies both to limb vectors and to single limb +arguments. + + Nails can be enabled by configuring with `--enable-nails'. By +default the number of bits will be chosen according to what suits the +host processor, but a particular number can be selected with +`--enable-nails=N'. + + At the mpn level, a nail build is neither source nor binary +compatible with a non-nail build, strictly speaking. But programs +acting on limbs only through the mpn functions are likely to work +equally well with either build, and judicious use of the definitions +below should make any program compatible with either build, at the +source level. + + For the higher level routines, meaning `mpz' etc, a nail build +should be fully source and binary compatible with a non-nail build. + + -- Macro: GMP_NAIL_BITS + -- Macro: GMP_NUMB_BITS + -- Macro: GMP_LIMB_BITS + `GMP_NAIL_BITS' is the number of nail bits, or 0 when nails are + not in use. `GMP_NUMB_BITS' is the number of data bits in a limb. + `GMP_LIMB_BITS' is the total number of bits in an `mp_limb_t'. In + all cases + + GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS + + -- Macro: GMP_NAIL_MASK + -- Macro: GMP_NUMB_MASK + Bit masks for the nail and number parts of a limb. + `GMP_NAIL_MASK' is 0 when nails are not in use. + + `GMP_NAIL_MASK' is not often needed, since the nail part can be + obtained with `x >> GMP_NUMB_BITS', and that means one less large + constant, which can help various RISC chips. + + -- Macro: GMP_NUMB_MAX + The maximum value that can be stored in the number part of a limb. + This is the same as `GMP_NUMB_MASK', but can be used for clarity + when doing comparisons rather than bit-wise operations. + + The term "nails" comes from finger or toe nails, which are at the +ends of a limb (arm or leg). "numb" is short for number, but is also +how the developers felt after trying for a long time to come up with +sensible names for these things. + + In the future (the distant future most likely) a non-zero nail might +be permitted, giving non-unique representations for numbers in a limb +vector. This would help vector processors since carries would only +ever need to propagate one or two limbs. + + +File: gmp.info, Node: Random Number Functions, Next: Formatted Output, Prev: Low-level Functions, Up: Top + +9 Random Number Functions +************************* + +Sequences of pseudo-random numbers in GMP are generated using a +variable of type `gmp_randstate_t', which holds an algorithm selection +and a current state. Such a variable must be initialized by a call to +one of the `gmp_randinit' functions, and can be seeded with one of the +`gmp_randseed' functions. + + The functions actually generating random numbers are described in +*Note Integer Random Numbers::, and *Note Miscellaneous Float +Functions::. + + The older style random number functions don't accept a +`gmp_randstate_t' parameter but instead share a global variable of that +type. They use a default algorithm and are currently not seeded +(though perhaps that will change in the future). The new functions +accepting a `gmp_randstate_t' are recommended for applications that +care about randomness. + +* Menu: + +* Random State Initialization:: +* Random State Seeding:: +* Random State Miscellaneous:: + + +File: gmp.info, Node: Random State Initialization, Next: Random State Seeding, Prev: Random Number Functions, Up: Random Number Functions + +9.1 Random State Initialization +=============================== + + -- Function: void gmp_randinit_default (gmp_randstate_t STATE) + Initialize STATE with a default algorithm. This will be a + compromise between speed and randomness, and is recommended for + applications with no special requirements. Currently this is + `gmp_randinit_mt'. + + -- Function: void gmp_randinit_mt (gmp_randstate_t STATE) + Initialize STATE for a Mersenne Twister algorithm. This algorithm + is fast and has good randomness properties. + + -- Function: void gmp_randinit_lc_2exp (gmp_randstate_t STATE, mpz_t + A, unsigned long C, mp_bitcnt_t M2EXP) + Initialize STATE with a linear congruential algorithm X = (A*X + + C) mod 2^M2EXP. + + The low bits of X in this algorithm are not very random. The least + significant bit will have a period no more than 2, and the second + bit no more than 4, etc. For this reason only the high half of + each X is actually used. + + When a random number of more than M2EXP/2 bits is to be generated, + multiple iterations of the recurrence are used and the results + concatenated. + + -- Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t STATE, + mp_bitcnt_t SIZE) + Initialize STATE for a linear congruential algorithm as per + `gmp_randinit_lc_2exp'. A, C and M2EXP are selected from a table, + chosen so that SIZE bits (or more) of each X will be used, ie. + M2EXP/2 >= SIZE. + + If successful the return value is non-zero. If SIZE is bigger + than the table data provides then the return value is zero. The + maximum SIZE currently supported is 128. + + -- Function: void gmp_randinit_set (gmp_randstate_t ROP, + gmp_randstate_t OP) + Initialize ROP with a copy of the algorithm and state from OP. + + -- Function: void gmp_randinit (gmp_randstate_t STATE, + gmp_randalg_t ALG, ...) + *This function is obsolete.* + + Initialize STATE with an algorithm selected by ALG. The only + choice is `GMP_RAND_ALG_LC', which is `gmp_randinit_lc_2exp_size' + described above. A third parameter of type `unsigned long' is + required, this is the SIZE for that function. + `GMP_RAND_ALG_DEFAULT' or 0 are the same as `GMP_RAND_ALG_LC'. + + `gmp_randinit' sets bits in the global variable `gmp_errno' to + indicate an error. `GMP_ERROR_UNSUPPORTED_ARGUMENT' if ALG is + unsupported, or `GMP_ERROR_INVALID_ARGUMENT' if the SIZE parameter + is too big. It may be noted this error reporting is not thread + safe (a good reason to use `gmp_randinit_lc_2exp_size' instead). + + -- Function: void gmp_randclear (gmp_randstate_t STATE) + Free all memory occupied by STATE. + + +File: gmp.info, Node: Random State Seeding, Next: Random State Miscellaneous, Prev: Random State Initialization, Up: Random Number Functions + +9.2 Random State Seeding +======================== + + -- Function: void gmp_randseed (gmp_randstate_t STATE, mpz_t SEED) + -- Function: void gmp_randseed_ui (gmp_randstate_t STATE, + unsigned long int SEED) + Set an initial seed value into STATE. + + The size of a seed determines how many different sequences of + random numbers that it's possible to generate. The "quality" of + the seed is the randomness of a given seed compared to the + previous seed used, and this affects the randomness of separate + number sequences. The method for choosing a seed is critical if + the generated numbers are to be used for important applications, + such as generating cryptographic keys. + + Traditionally the system time has been used to seed, but care + needs to be taken with this. If an application seeds often and + the resolution of the system clock is low, then the same sequence + of numbers might be repeated. Also, the system time is quite easy + to guess, so if unpredictability is required then it should + definitely not be the only source for the seed value. On some + systems there's a special device `/dev/random' which provides + random data better suited for use as a seed. + + +File: gmp.info, Node: Random State Miscellaneous, Prev: Random State Seeding, Up: Random Number Functions + +9.3 Random State Miscellaneous +============================== + + -- Function: unsigned long gmp_urandomb_ui (gmp_randstate_t STATE, + unsigned long N) + Return a uniformly distributed random number of N bits, ie. in the + range 0 to 2^N-1 inclusive. N must be less than or equal to the + number of bits in an `unsigned long'. + + -- Function: unsigned long gmp_urandomm_ui (gmp_randstate_t STATE, + unsigned long N) + Return a uniformly distributed random number in the range 0 to + N-1, inclusive. + + +File: gmp.info, Node: Formatted Output, Next: Formatted Input, Prev: Random Number Functions, Up: Top + +10 Formatted Output +******************* + +* Menu: + +* Formatted Output Strings:: +* Formatted Output Functions:: +* C++ Formatted Output:: + + +File: gmp.info, Node: Formatted Output Strings, Next: Formatted Output Functions, Prev: Formatted Output, Up: Formatted Output + +10.1 Format Strings +=================== + +`gmp_printf' and friends accept format strings similar to the standard C +`printf' (*note Formatted Output: (libc)Formatted Output.). A format +specification is of the form + + % [flags] [width] [.[precision]] [type] conv + + GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' +respectively, `M' for `mp_limb_t', and `N' for an `mp_limb_t' array. +`Z', `Q', `M' and `N' behave like integers. `Q' will print a `/' and a +denominator, if needed. `F' behaves like a float. For example, + + mpz_t z; + gmp_printf ("%s is an mpz %Zd\n", "here", z); + + mpq_t q; + gmp_printf ("a hex rational: %#40Qx\n", q); + + mpf_t f; + int n; + gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); + + mp_limb_t l; + gmp_printf ("limb %Mu\n", l); + + const mp_limb_t *ptr; + mp_size_t size; + gmp_printf ("limb array %Nx\n", ptr, size); + + For `N' the limbs are expected least significant first, as per the +`mpn' functions (*note Low-level Functions::). A negative size can be +given to print the value as a negative. + + All the standard C `printf' types behave the same as the C library +`printf', and can be freely intermixed with the GMP extensions. In the +current implementation the standard parts of the format string are +simply handed to `printf' and only the GMP extensions handled directly. + + The flags accepted are as follows. GLIBC style ' is only for the +standard C types (not the GMP types), and only if the C library +supports it. + + 0 pad with zeros (rather than spaces) + # show the base with `0x', `0X' or `0' + + always show a sign + (space) show a space or a `-' sign + ' group digits, GLIBC style (not GMP types) + + The optional width and precision can be given as a number within the +format string, or as a `*' to take an extra parameter of type `int', the +same as the standard `printf'. + + The standard types accepted are as follows. `h' and `l' are +portable, the rest will depend on the compiler (or include files) for +the type and the C library for the output. + + h short + hh char + j intmax_t or uintmax_t + l long or wchar_t + ll long long + L long double + q quad_t or u_quad_t + t ptrdiff_t + z size_t + +The GMP types are + + F mpf_t, float conversions + Q mpq_t, integer conversions + M mp_limb_t, integer conversions + N mp_limb_t array, integer conversions + Z mpz_t, integer conversions + + The conversions accepted are as follows. `a' and `A' are always +supported for `mpf_t' but depend on the C library for standard C float +types. `m' and `p' depend on the C library. + + a A hex floats, C99 style + c character + d decimal integer + e E scientific format float + f fixed point float + i same as d + g G fixed or scientific float + m `strerror' string, GLIBC style + n store characters written so far + o octal integer + p pointer + s string + u unsigned integer + x X hex integer + + `o', `x' and `X' are unsigned for the standard C types, but for +types `Z', `Q' and `N' they are signed. `u' is not meaningful for `Z', +`Q' and `N'. + + `M' is a proxy for the C library `l' or `L', according to the size +of `mp_limb_t'. Unsigned conversions will be usual, but a signed +conversion can be used and will interpret the value as a twos complement +negative. + + `n' can be used with any type, even the GMP types. + + Other types or conversions that might be accepted by the C library +`printf' cannot be used through `gmp_printf', this includes for +instance extensions registered with GLIBC `register_printf_function'. +Also currently there's no support for POSIX `$' style numbered arguments +(perhaps this will be added in the future). + + The precision field has it's usual meaning for integer `Z' and float +`F' types, but is currently undefined for `Q' and should not be used +with that. + + `mpf_t' conversions only ever generate as many digits as can be +accurately represented by the operand, the same as `mpf_get_str' does. +Zeros will be used if necessary to pad to the requested precision. This +happens even for an `f' conversion of an `mpf_t' which is an integer, +for instance 2^1024 in an `mpf_t' of 128 bits precision will only +produce about 40 digits, then pad with zeros to the decimal point. An +empty precision field like `%.Fe' or `%.Ff' can be used to specifically +request just the significant digits. + + The decimal point character (or string) is taken from the current +locale settings on systems which provide `localeconv' (*note Locales +and Internationalization: (libc)Locales.). The C library will normally +do the same for standard float output. + + The format string is only interpreted as plain `char's, multibyte +characters are not recognised. Perhaps this will change in the future. + + +File: gmp.info, Node: Formatted Output Functions, Next: C++ Formatted Output, Prev: Formatted Output Strings, Up: Formatted Output + +10.2 Functions +============== + +Each of the following functions is similar to the corresponding C +library function. The basic `printf' forms take a variable argument +list. The `vprintf' forms take an argument pointer, see *Note Variadic +Functions: (libc)Variadic Functions, or `man 3 va_start'. + + It should be emphasised that if a format string is invalid, or the +arguments don't match what the format specifies, then the behaviour of +any of these functions will be unpredictable. GCC format string +checking is not available, since it doesn't recognise the GMP +extensions. + + The file based functions `gmp_printf' and `gmp_fprintf' will return +-1 to indicate a write error. Output is not "atomic", so partial +output may be produced if a write error occurs. All the functions can +return -1 if the C library `printf' variant in use returns -1, but this +shouldn't normally occur. + + -- Function: int gmp_printf (const char *FMT, ...) + -- Function: int gmp_vprintf (const char *FMT, va_list AP) + Print to the standard output `stdout'. Return the number of + characters written, or -1 if an error occurred. + + -- Function: int gmp_fprintf (FILE *FP, const char *FMT, ...) + -- Function: int gmp_vfprintf (FILE *FP, const char *FMT, va_list AP) + Print to the stream FP. Return the number of characters written, + or -1 if an error occurred. + + -- Function: int gmp_sprintf (char *BUF, const char *FMT, ...) + -- Function: int gmp_vsprintf (char *BUF, const char *FMT, va_list AP) + Form a null-terminated string in BUF. Return the number of + characters written, excluding the terminating null. + + No overlap is permitted between the space at BUF and the string + FMT. + + These functions are not recommended, since there's no protection + against exceeding the space available at BUF. + + -- Function: int gmp_snprintf (char *BUF, size_t SIZE, const char + *FMT, ...) + -- Function: int gmp_vsnprintf (char *BUF, size_t SIZE, const char + *FMT, va_list AP) + Form a null-terminated string in BUF. No more than SIZE bytes + will be written. To get the full output, SIZE must be enough for + the string and null-terminator. + + The return value is the total number of characters which ought to + have been produced, excluding the terminating null. If RETVAL >= + SIZE then the actual output has been truncated to the first SIZE-1 + characters, and a null appended. + + No overlap is permitted between the region {BUF,SIZE} and the FMT + string. + + Notice the return value is in ISO C99 `snprintf' style. This is + so even if the C library `vsnprintf' is the older GLIBC 2.0.x + style. + + -- Function: int gmp_asprintf (char **PP, const char *FMT, ...) + -- Function: int gmp_vasprintf (char **PP, const char *FMT, va_list AP) + Form a null-terminated string in a block of memory obtained from + the current memory allocation function (*note Custom + Allocation::). The block will be the size of the string and + null-terminator. The address of the block in stored to *PP. The + return value is the number of characters produced, excluding the + null-terminator. + + Unlike the C library `asprintf', `gmp_asprintf' doesn't return -1 + if there's no more memory available, it lets the current allocation + function handle that. + + -- Function: int gmp_obstack_printf (struct obstack *OB, const char + *FMT, ...) + -- Function: int gmp_obstack_vprintf (struct obstack *OB, const char + *FMT, va_list AP) + Append to the current object in OB. The return value is the + number of characters written. A null-terminator is not written. + + FMT cannot be within the current object in OB, since that object + might move as it grows. + + These functions are available only when the C library provides the + obstack feature, which probably means only on GNU systems, see + *Note Obstacks: (libc)Obstacks. + + +File: gmp.info, Node: C++ Formatted Output, Prev: Formatted Output Functions, Up: Formatted Output + +10.3 C++ Formatted Output +========================= + +The following functions are provided in `libgmpxx' (*note Headers and +Libraries::), which is built if C++ support is enabled (*note Build +Options::). Prototypes are available from `'. + + -- Function: ostream& operator<< (ostream& STREAM, mpz_t OP) + Print OP to STREAM, using its `ios' formatting settings. + `ios::width' is reset to 0 after output, the same as the standard + `ostream operator<<' routines do. + + In hex or octal, OP is printed as a signed number, the same as for + decimal. This is unlike the standard `operator<<' routines on + `int' etc, which instead give twos complement. + + -- Function: ostream& operator<< (ostream& STREAM, mpq_t OP) + Print OP to STREAM, using its `ios' formatting settings. + `ios::width' is reset to 0 after output, the same as the standard + `ostream operator<<' routines do. + + Output will be a fraction like `5/9', or if the denominator is 1 + then just a plain integer like `123'. + + In hex or octal, OP is printed as a signed value, the same as for + decimal. If `ios::showbase' is set then a base indicator is shown + on both the numerator and denominator (if the denominator is + required). + + -- Function: ostream& operator<< (ostream& STREAM, mpf_t OP) + Print OP to STREAM, using its `ios' formatting settings. + `ios::width' is reset to 0 after output, the same as the standard + `ostream operator<<' routines do. + + The decimal point follows the standard library float `operator<<', + which on recent systems means the `std::locale' imbued on STREAM. + + Hex and octal are supported, unlike the standard `operator<<' on + `double'. The mantissa will be in hex or octal, the exponent will + be in decimal. For hex the exponent delimiter is an `@'. This is + as per `mpf_out_str'. + + `ios::showbase' is supported, and will put a base on the mantissa, + for example hex `0x1.8' or `0x0.8', or octal `01.4' or `00.4'. + This last form is slightly strange, but at least differentiates + itself from decimal. + + These operators mean that GMP types can be printed in the usual C++ +way, for example, + + mpz_t z; + int n; + ... + cout << "iteration " << n << " value " << z << "\n"; + + But note that `ostream' output (and `istream' input, *note C++ +Formatted Input::) is the only overloading available for the GMP types +and that for instance using `+' with an `mpz_t' will have unpredictable +results. For classes with overloading, see *Note C++ Class Interface::. + + +File: gmp.info, Node: Formatted Input, Next: C++ Class Interface, Prev: Formatted Output, Up: Top + +11 Formatted Input +****************** + +* Menu: + +* Formatted Input Strings:: +* Formatted Input Functions:: +* C++ Formatted Input:: + + +File: gmp.info, Node: Formatted Input Strings, Next: Formatted Input Functions, Prev: Formatted Input, Up: Formatted Input + +11.1 Formatted Input Strings +============================ + +`gmp_scanf' and friends accept format strings similar to the standard C +`scanf' (*note Formatted Input: (libc)Formatted Input.). A format +specification is of the form + + % [flags] [width] [type] conv + + GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' +respectively. `Z' and `Q' behave like integers. `Q' will read a `/' +and a denominator, if present. `F' behaves like a float. + + GMP variables don't require an `&' when passed to `gmp_scanf', since +they're already "call-by-reference". For example, + + /* to read say "a(5) = 1234" */ + int n; + mpz_t z; + gmp_scanf ("a(%d) = %Zd\n", &n, z); + + mpq_t q1, q2; + gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); + + /* to read say "topleft (1.55,-2.66)" */ + mpf_t x, y; + char buf[32]; + gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); + + All the standard C `scanf' types behave the same as in the C library +`scanf', and can be freely intermixed with the GMP extensions. In the +current implementation the standard parts of the format string are +simply handed to `scanf' and only the GMP extensions handled directly. + + The flags accepted are as follows. `a' and `'' will depend on +support from the C library, and `'' cannot be used with GMP types. + + * read but don't store + a allocate a buffer (string conversions) + ' grouped digits, GLIBC style (not GMP + types) + + The standard types accepted are as follows. `h' and `l' are +portable, the rest will depend on the compiler (or include files) for +the type and the C library for the input. + + h short + hh char + j intmax_t or uintmax_t + l long int, double or wchar_t + ll long long + L long double + q quad_t or u_quad_t + t ptrdiff_t + z size_t + +The GMP types are + + F mpf_t, float conversions + Q mpq_t, integer conversions + Z mpz_t, integer conversions + + The conversions accepted are as follows. `p' and `[' will depend on +support from the C library, the rest are standard. + + c character or characters + d decimal integer + e E f g G float + i integer with base indicator + n characters read so far + o octal integer + p pointer + s string of non-whitespace characters + u decimal integer + x X hex integer + [ string of characters in a set + + `e', `E', `f', `g' and `G' are identical, they all read either fixed +point or scientific format, and either upper or lower case `e' for the +exponent in scientific format. + + C99 style hex float format (`printf %a', *note Formatted Output +Strings::) is always accepted for `mpf_t', but for the standard float +types it will depend on the C library. + + `x' and `X' are identical, both accept both upper and lower case +hexadecimal. + + `o', `u', `x' and `X' all read positive or negative values. For the +standard C types these are described as "unsigned" conversions, but +that merely affects certain overflow handling, negatives are still +allowed (per `strtoul', *note Parsing of Integers: (libc)Parsing of +Integers.). For GMP types there are no overflows, so `d' and `u' are +identical. + + `Q' type reads the numerator and (optional) denominator as given. +If the value might not be in canonical form then `mpq_canonicalize' +must be called before using it in any calculations (*note Rational +Number Functions::). + + `Qi' will read a base specification separately for the numerator and +denominator. For example `0x10/11' would be 16/11, whereas `0x10/0x11' +would be 16/17. + + `n' can be used with any of the types above, even the GMP types. +`*' to suppress assignment is allowed, though in that case it would do +nothing at all. + + Other conversions or types that might be accepted by the C library +`scanf' cannot be used through `gmp_scanf'. + + Whitespace is read and discarded before a field, except for `c' and +`[' conversions. + + For float conversions, the decimal point character (or string) +expected is taken from the current locale settings on systems which +provide `localeconv' (*note Locales and Internationalization: +(libc)Locales.). The C library will normally do the same for standard +float input. + + The format string is only interpreted as plain `char's, multibyte +characters are not recognised. Perhaps this will change in the future. + + +File: gmp.info, Node: Formatted Input Functions, Next: C++ Formatted Input, Prev: Formatted Input Strings, Up: Formatted Input + +11.2 Formatted Input Functions +============================== + +Each of the following functions is similar to the corresponding C +library function. The plain `scanf' forms take a variable argument +list. The `vscanf' forms take an argument pointer, see *Note Variadic +Functions: (libc)Variadic Functions, or `man 3 va_start'. + + It should be emphasised that if a format string is invalid, or the +arguments don't match what the format specifies, then the behaviour of +any of these functions will be unpredictable. GCC format string +checking is not available, since it doesn't recognise the GMP +extensions. + + No overlap is permitted between the FMT string and any of the results +produced. + + -- Function: int gmp_scanf (const char *FMT, ...) + -- Function: int gmp_vscanf (const char *FMT, va_list AP) + Read from the standard input `stdin'. + + -- Function: int gmp_fscanf (FILE *FP, const char *FMT, ...) + -- Function: int gmp_vfscanf (FILE *FP, const char *FMT, va_list AP) + Read from the stream FP. + + -- Function: int gmp_sscanf (const char *S, const char *FMT, ...) + -- Function: int gmp_vsscanf (const char *S, const char *FMT, va_list + AP) + Read from a null-terminated string S. + + The return value from each of these functions is the same as the +standard C99 `scanf', namely the number of fields successfully parsed +and stored. `%n' fields and fields read but suppressed by `*' don't +count towards the return value. + + If end of input (or a file error) is reached before a character for +a field or a literal, and if no previous non-suppressed fields have +matched, then the return value is `EOF' instead of 0. A whitespace +character in the format string is only an optional match and doesn't +induce an `EOF' in this fashion. Leading whitespace read and discarded +for a field don't count as characters for that field. + + For the GMP types, input parsing follows C99 rules, namely one +character of lookahead is used and characters are read while they +continue to meet the format requirements. If this doesn't provide a +complete number then the function terminates, with that field not +stored nor counted towards the return value. For instance with `mpf_t' +an input `1.23e-XYZ' would be read up to the `X' and that character +pushed back since it's not a digit. The string `1.23e-' would then be +considered invalid since an `e' must be followed by at least one digit. + + For the standard C types, in the current implementation GMP calls +the C library `scanf' functions, which might have looser rules about +what constitutes a valid input. + + Note that `gmp_sscanf' is the same as `gmp_fscanf' and only does one +character of lookahead when parsing. Although clearly it could look at +its entire input, it is deliberately made identical to `gmp_fscanf', +the same way C99 `sscanf' is the same as `fscanf'. + + +File: gmp.info, Node: C++ Formatted Input, Prev: Formatted Input Functions, Up: Formatted Input + +11.3 C++ Formatted Input +======================== + +The following functions are provided in `libgmpxx' (*note Headers and +Libraries::), which is built only if C++ support is enabled (*note +Build Options::). Prototypes are available from `'. + + -- Function: istream& operator>> (istream& STREAM, mpz_t ROP) + Read ROP from STREAM, using its `ios' formatting settings. + + -- Function: istream& operator>> (istream& STREAM, mpq_t ROP) + An integer like `123' will be read, or a fraction like `5/9'. No + whitespace is allowed around the `/'. If the fraction is not in + canonical form then `mpq_canonicalize' must be called (*note + Rational Number Functions::) before operating on it. + + As per integer input, an `0' or `0x' base indicator is read when + none of `ios::dec', `ios::oct' or `ios::hex' are set. This is + done separately for numerator and denominator, so that for instance + `0x10/11' is 16/11 and `0x10/0x11' is 16/17. + + -- Function: istream& operator>> (istream& STREAM, mpf_t ROP) + Read ROP from STREAM, using its `ios' formatting settings. + + Hex or octal floats are not supported, but might be in the future, + or perhaps it's best to accept only what the standard float + `operator>>' does. + + Note that digit grouping specified by the `istream' locale is +currently not accepted. Perhaps this will change in the future. + + + These operators mean that GMP types can be read in the usual C++ +way, for example, + + mpz_t z; + ... + cin >> z; + + But note that `istream' input (and `ostream' output, *note C++ +Formatted Output::) is the only overloading available for the GMP types +and that for instance using `+' with an `mpz_t' will have unpredictable +results. For classes with overloading, see *Note C++ Class Interface::. + + +File: gmp.info, Node: C++ Class Interface, Next: BSD Compatible Functions, Prev: Formatted Input, Up: Top + +12 C++ Class Interface +********************** + +This chapter describes the C++ class based interface to GMP. + + All GMP C language types and functions can be used in C++ programs, +since `gmp.h' has `extern "C"' qualifiers, but the class interface +offers overloaded functions and operators which may be more convenient. + + Due to the implementation of this interface, a reasonably recent C++ +compiler is required, one supporting namespaces, partial specialization +of templates and member templates. For GCC this means version 2.91 or +later. + + *Everything described in this chapter is to be considered preliminary +and might be subject to incompatible changes if some unforeseen +difficulty reveals itself.* + +* Menu: + +* C++ Interface General:: +* C++ Interface Integers:: +* C++ Interface Rationals:: +* C++ Interface Floats:: +* C++ Interface Random Numbers:: +* C++ Interface Limitations:: + + +File: gmp.info, Node: C++ Interface General, Next: C++ Interface Integers, Prev: C++ Class Interface, Up: C++ Class Interface + +12.1 C++ Interface General +========================== + +All the C++ classes and functions are available with + + #include + + Programs should be linked with the `libgmpxx' and `libgmp' +libraries. For example, + + g++ mycxxprog.cc -lgmpxx -lgmp + +The classes defined are + + -- Class: mpz_class + -- Class: mpq_class + -- Class: mpf_class + + The standard operators and various standard functions are overloaded +to allow arithmetic with these classes. For example, + + int + main (void) + { + mpz_class a, b, c; + + a = 1234; + b = "-5678"; + c = a+b; + cout << "sum is " << c << "\n"; + cout << "absolute value is " << abs(c) << "\n"; + + return 0; + } + + An important feature of the implementation is that an expression like +`a=b+c' results in a single call to the corresponding `mpz_add', +without using a temporary for the `b+c' part. Expressions which by +their nature imply intermediate values, like `a=b*c+d*e', still use +temporaries though. + + The classes can be freely intermixed in expressions, as can the +classes and the standard types `long', `unsigned long' and `double'. +Smaller types like `int' or `float' can also be intermixed, since C++ +will promote them. + + Note that `bool' is not accepted directly, but must be explicitly +cast to an `int' first. This is because C++ will automatically convert +any pointer to a `bool', so if GMP accepted `bool' it would make all +sorts of invalid class and pointer combinations compile but almost +certainly not do anything sensible. + + Conversions back from the classes to standard C++ types aren't done +automatically, instead member functions like `get_si' are provided (see +the following sections for details). + + Also there are no automatic conversions from the classes to the +corresponding GMP C types, instead a reference to the underlying C +object can be obtained with the following functions, + + -- Function: mpz_t mpz_class::get_mpz_t () + -- Function: mpq_t mpq_class::get_mpq_t () + -- Function: mpf_t mpf_class::get_mpf_t () + + These can be used to call a C function which doesn't have a C++ class +interface. For example to set `a' to the GCD of `b' and `c', + + mpz_class a, b, c; + ... + mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); + + In the other direction, a class can be initialized from the +corresponding GMP C type, or assigned to if an explicit constructor is +used. In both cases this makes a copy of the value, it doesn't create +any sort of association. For example, + + mpz_t z; + // ... init and calculate z ... + mpz_class x(z); + mpz_class y; + y = mpz_class (z); + + There are no namespace setups in `gmpxx.h', all types and functions +are simply put into the global namespace. This is what `gmp.h' has +done in the past, and continues to do for compatibility. The extras +provided by `gmpxx.h' follow GMP naming conventions and are unlikely to +clash with anything. + + +File: gmp.info, Node: C++ Interface Integers, Next: C++ Interface Rationals, Prev: C++ Interface General, Up: C++ Class Interface + +12.2 C++ Interface Integers +=========================== + + -- Function: void mpz_class::mpz_class (type N) + Construct an `mpz_class'. All the standard C++ types may be used, + except `long long' and `long double', and all the GMP C++ classes + can be used. Any necessary conversion follows the corresponding C + function, for example `double' follows `mpz_set_d' (*note + Assigning Integers::). + + -- Function: void mpz_class::mpz_class (mpz_t Z) + Construct an `mpz_class' from an `mpz_t'. The value in Z is + copied into the new `mpz_class', there won't be any permanent + association between it and Z. + + -- Function: void mpz_class::mpz_class (const char *S) + -- Function: void mpz_class::mpz_class (const char *S, int BASE = 0) + -- Function: void mpz_class::mpz_class (const string& S) + -- Function: void mpz_class::mpz_class (const string& S, int BASE = 0) + Construct an `mpz_class' converted from a string using + `mpz_set_str' (*note Assigning Integers::). + + If the string is not a valid integer, an `std::invalid_argument' + exception is thrown. The same applies to `operator='. + + -- Function: mpz_class operator/ (mpz_class A, mpz_class D) + -- Function: mpz_class operator% (mpz_class A, mpz_class D) + Divisions involving `mpz_class' round towards zero, as per the + `mpz_tdiv_q' and `mpz_tdiv_r' functions (*note Integer Division::). + This is the same as the C99 `/' and `%' operators. + + The `mpz_fdiv...' or `mpz_cdiv...' functions can always be called + directly if desired. For example, + + mpz_class q, a, d; + ... + mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); + + -- Function: mpz_class abs (mpz_class OP1) + -- Function: int cmp (mpz_class OP1, type OP2) + -- Function: int cmp (type OP1, mpz_class OP2) + -- Function: bool mpz_class::fits_sint_p (void) + -- Function: bool mpz_class::fits_slong_p (void) + -- Function: bool mpz_class::fits_sshort_p (void) + -- Function: bool mpz_class::fits_uint_p (void) + -- Function: bool mpz_class::fits_ulong_p (void) + -- Function: bool mpz_class::fits_ushort_p (void) + -- Function: double mpz_class::get_d (void) + -- Function: long mpz_class::get_si (void) + -- Function: string mpz_class::get_str (int BASE = 10) + -- Function: unsigned long mpz_class::get_ui (void) + -- Function: int mpz_class::set_str (const char *STR, int BASE) + -- Function: int mpz_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpz_class OP) + -- Function: mpz_class sqrt (mpz_class OP) + These functions provide a C++ class interface to the corresponding + GMP C routines. + + `cmp' can be used with any of the classes or the standard C++ + types, except `long long' and `long double'. + + + Overloaded operators for combinations of `mpz_class' and `double' +are provided for completeness, but it should be noted that if the given +`double' is not an integer then the way any rounding is done is +currently unspecified. The rounding might take place at the start, in +the middle, or at the end of the operation, and it might change in the +future. + + Conversions between `mpz_class' and `double', however, are defined +to follow the corresponding C functions `mpz_get_d' and `mpz_set_d'. +And comparisons are always made exactly, as per `mpz_cmp_d'. + + +File: gmp.info, Node: C++ Interface Rationals, Next: C++ Interface Floats, Prev: C++ Interface Integers, Up: C++ Class Interface + +12.3 C++ Interface Rationals +============================ + +In all the following constructors, if a fraction is given then it +should be in canonical form, or if not then `mpq_class::canonicalize' +called. + + -- Function: void mpq_class::mpq_class (type OP) + -- Function: void mpq_class::mpq_class (integer NUM, integer DEN) + Construct an `mpq_class'. The initial value can be a single value + of any type, or a pair of integers (`mpz_class' or standard C++ + integer types) representing a fraction, except that `long long' + and `long double' are not supported. For example, + + mpq_class q (99); + mpq_class q (1.75); + mpq_class q (1, 3); + + -- Function: void mpq_class::mpq_class (mpq_t Q) + Construct an `mpq_class' from an `mpq_t'. The value in Q is + copied into the new `mpq_class', there won't be any permanent + association between it and Q. + + -- Function: void mpq_class::mpq_class (const char *S) + -- Function: void mpq_class::mpq_class (const char *S, int BASE = 0) + -- Function: void mpq_class::mpq_class (const string& S) + -- Function: void mpq_class::mpq_class (const string& S, int BASE = 0) + Construct an `mpq_class' converted from a string using + `mpq_set_str' (*note Initializing Rationals::). + + If the string is not a valid rational, an `std::invalid_argument' + exception is thrown. The same applies to `operator='. + + -- Function: void mpq_class::canonicalize () + Put an `mpq_class' into canonical form, as per *Note Rational + Number Functions::. All arithmetic operators require their + operands in canonical form, and will return results in canonical + form. + + -- Function: mpq_class abs (mpq_class OP) + -- Function: int cmp (mpq_class OP1, type OP2) + -- Function: int cmp (type OP1, mpq_class OP2) + -- Function: double mpq_class::get_d (void) + -- Function: string mpq_class::get_str (int BASE = 10) + -- Function: int mpq_class::set_str (const char *STR, int BASE) + -- Function: int mpq_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpq_class OP) + These functions provide a C++ class interface to the corresponding + GMP C routines. + + `cmp' can be used with any of the classes or the standard C++ + types, except `long long' and `long double'. + + -- Function: mpz_class& mpq_class::get_num () + -- Function: mpz_class& mpq_class::get_den () + Get a reference to an `mpz_class' which is the numerator or + denominator of an `mpq_class'. This can be used both for read and + write access. If the object returned is modified, it modifies the + original `mpq_class'. + + If direct manipulation might produce a non-canonical value, then + `mpq_class::canonicalize' must be called before further operations. + + -- Function: mpz_t mpq_class::get_num_mpz_t () + -- Function: mpz_t mpq_class::get_den_mpz_t () + Get a reference to the underlying `mpz_t' numerator or denominator + of an `mpq_class'. This can be passed to C functions expecting an + `mpz_t'. Any modifications made to the `mpz_t' will modify the + original `mpq_class'. + + If direct manipulation might produce a non-canonical value, then + `mpq_class::canonicalize' must be called before further operations. + + -- Function: istream& operator>> (istream& STREAM, mpq_class& ROP); + Read ROP from STREAM, using its `ios' formatting settings, the + same as `mpq_t operator>>' (*note C++ Formatted Input::). + + If the ROP read might not be in canonical form then + `mpq_class::canonicalize' must be called. + + +File: gmp.info, Node: C++ Interface Floats, Next: C++ Interface Random Numbers, Prev: C++ Interface Rationals, Up: C++ Class Interface + +12.4 C++ Interface Floats +========================= + +When an expression requires the use of temporary intermediate +`mpf_class' values, like `f=g*h+x*y', those temporaries will have the +same precision as the destination `f'. Explicit constructors can be +used if this doesn't suit. + + -- Function: mpf_class::mpf_class (type OP) + -- Function: mpf_class::mpf_class (type OP, unsigned long PREC) + Construct an `mpf_class'. Any standard C++ type can be used, + except `long long' and `long double', and any of the GMP C++ + classes can be used. + + If PREC is given, the initial precision is that value, in bits. If + PREC is not given, then the initial precision is determined by the + type of OP given. An `mpz_class', `mpq_class', or C++ builtin + type will give the default `mpf' precision (*note Initializing + Floats::). An `mpf_class' or expression will give the precision + of that value. The precision of a binary expression is the higher + of the two operands. + + mpf_class f(1.5); // default precision + mpf_class f(1.5, 500); // 500 bits (at least) + mpf_class f(x); // precision of x + mpf_class f(abs(x)); // precision of x + mpf_class f(-g, 1000); // 1000 bits (at least) + mpf_class f(x+y); // greater of precisions of x and y + + -- Function: void mpf_class::mpf_class (const char *S) + -- Function: void mpf_class::mpf_class (const char *S, unsigned long + PREC, int BASE = 0) + -- Function: void mpf_class::mpf_class (const string& S) + -- Function: void mpf_class::mpf_class (const string& S, unsigned long + PREC, int BASE = 0) + Construct an `mpf_class' converted from a string using + `mpf_set_str' (*note Assigning Floats::). If PREC is given, the + initial precision is that value, in bits. If not, the default + `mpf' precision (*note Initializing Floats::) is used. + + If the string is not a valid float, an `std::invalid_argument' + exception is thrown. The same applies to `operator='. + + -- Function: mpf_class& mpf_class::operator= (type OP) + Convert and store the given OP value to an `mpf_class' object. The + same types are accepted as for the constructors above. + + Note that `operator=' only stores a new value, it doesn't copy or + change the precision of the destination, instead the value is + truncated if necessary. This is the same as `mpf_set' etc. Note + in particular this means for `mpf_class' a copy constructor is not + the same as a default constructor plus assignment. + + mpf_class x (y); // x created with precision of y + + mpf_class x; // x created with default precision + x = y; // value truncated to that precision + + Applications using templated code may need to be careful about the + assumptions the code makes in this area, when working with + `mpf_class' values of various different or non-default precisions. + For instance implementations of the standard `complex' template + have been seen in both styles above, though of course `complex' is + normally only actually specified for use with the builtin float + types. + + -- Function: mpf_class abs (mpf_class OP) + -- Function: mpf_class ceil (mpf_class OP) + -- Function: int cmp (mpf_class OP1, type OP2) + -- Function: int cmp (type OP1, mpf_class OP2) + -- Function: bool mpf_class::fits_sint_p (void) + -- Function: bool mpf_class::fits_slong_p (void) + -- Function: bool mpf_class::fits_sshort_p (void) + -- Function: bool mpf_class::fits_uint_p (void) + -- Function: bool mpf_class::fits_ulong_p (void) + -- Function: bool mpf_class::fits_ushort_p (void) + -- Function: mpf_class floor (mpf_class OP) + -- Function: mpf_class hypot (mpf_class OP1, mpf_class OP2) + -- Function: double mpf_class::get_d (void) + -- Function: long mpf_class::get_si (void) + -- Function: string mpf_class::get_str (mp_exp_t& EXP, int BASE = 10, + size_t DIGITS = 0) + -- Function: unsigned long mpf_class::get_ui (void) + -- Function: int mpf_class::set_str (const char *STR, int BASE) + -- Function: int mpf_class::set_str (const string& STR, int BASE) + -- Function: int sgn (mpf_class OP) + -- Function: mpf_class sqrt (mpf_class OP) + -- Function: mpf_class trunc (mpf_class OP) + These functions provide a C++ class interface to the corresponding + GMP C routines. + + `cmp' can be used with any of the classes or the standard C++ + types, except `long long' and `long double'. + + The accuracy provided by `hypot' is not currently guaranteed. + + -- Function: mp_bitcnt_t mpf_class::get_prec () + -- Function: void mpf_class::set_prec (mp_bitcnt_t PREC) + -- Function: void mpf_class::set_prec_raw (mp_bitcnt_t PREC) + Get or set the current precision of an `mpf_class'. + + The restrictions described for `mpf_set_prec_raw' (*note + Initializing Floats::) apply to `mpf_class::set_prec_raw'. Note + in particular that the `mpf_class' must be restored to it's + allocated precision before being destroyed. This must be done by + application code, there's no automatic mechanism for it. + + +File: gmp.info, Node: C++ Interface Random Numbers, Next: C++ Interface Limitations, Prev: C++ Interface Floats, Up: C++ Class Interface + +12.5 C++ Interface Random Numbers +================================= + + -- Class: gmp_randclass + The C++ class interface to the GMP random number functions uses + `gmp_randclass' to hold an algorithm selection and current state, + as per `gmp_randstate_t'. + + -- Function: gmp_randclass::gmp_randclass (void (*RANDINIT) + (gmp_randstate_t, ...), ...) + Construct a `gmp_randclass', using a call to the given RANDINIT + function (*note Random State Initialization::). The arguments + expected are the same as RANDINIT, but with `mpz_class' instead of + `mpz_t'. For example, + + gmp_randclass r1 (gmp_randinit_default); + gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); + gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); + gmp_randclass r4 (gmp_randinit_mt); + + `gmp_randinit_lc_2exp_size' will fail if the size requested is too + big, an `std::length_error' exception is thrown in that case. + + -- Function: gmp_randclass::gmp_randclass (gmp_randalg_t ALG, ...) + Construct a `gmp_randclass' using the same parameters as + `gmp_randinit' (*note Random State Initialization::). This + function is obsolete and the above RANDINIT style should be + preferred. + + -- Function: void gmp_randclass::seed (unsigned long int S) + -- Function: void gmp_randclass::seed (mpz_class S) + Seed a random number generator. See *note Random Number + Functions::, for how to choose a good seed. + + -- Function: mpz_class gmp_randclass::get_z_bits (unsigned long BITS) + -- Function: mpz_class gmp_randclass::get_z_bits (mpz_class BITS) + Generate a random integer with a specified number of bits. + + -- Function: mpz_class gmp_randclass::get_z_range (mpz_class N) + Generate a random integer in the range 0 to N-1 inclusive. + + -- Function: mpf_class gmp_randclass::get_f () + -- Function: mpf_class gmp_randclass::get_f (unsigned long PREC) + Generate a random float F in the range 0 <= F < 1. F will be to + PREC bits precision, or if PREC is not given then to the precision + of the destination. For example, + + gmp_randclass r; + ... + mpf_class f (0, 512); // 512 bits precision + f = r.get_f(); // random number, 512 bits + + +File: gmp.info, Node: C++ Interface Limitations, Prev: C++ Interface Random Numbers, Up: C++ Class Interface + +12.6 C++ Interface Limitations +============================== + +`mpq_class' and Templated Reading + A generic piece of template code probably won't know that + `mpq_class' requires a `canonicalize' call if inputs read with + `operator>>' might be non-canonical. This can lead to incorrect + results. + + `operator>>' behaves as it does for reasons of efficiency. A + canonicalize can be quite time consuming on large operands, and is + best avoided if it's not necessary. + + But this potential difficulty reduces the usefulness of + `mpq_class'. Perhaps a mechanism to tell `operator>>' what to do + will be adopted in the future, maybe a preprocessor define, a + global flag, or an `ios' flag pressed into service. Or maybe, at + the risk of inconsistency, the `mpq_class' `operator>>' could + canonicalize and leave `mpq_t' `operator>>' not doing so, for use + on those occasions when that's acceptable. Send feedback or + alternate ideas to . + +Subclassing + Subclassing the GMP C++ classes works, but is not currently + recommended. + + Expressions involving subclasses resolve correctly (or seem to), + but in normal C++ fashion the subclass doesn't inherit + constructors and assignments. There's many of those in the GMP + classes, and a good way to reestablish them in a subclass is not + yet provided. + +Templated Expressions + A subtle difficulty exists when using expressions together with + application-defined template functions. Consider the following, + with `T' intended to be some numeric type, + + template + T fun (const T &, const T &); + + When used with, say, plain `mpz_class' variables, it works fine: + `T' is resolved as `mpz_class'. + + mpz_class f(1), g(2); + fun (f, g); // Good + + But when one of the arguments is an expression, it doesn't work. + + mpz_class f(1), g(2), h(3); + fun (f, g+h); // Bad + + This is because `g+h' ends up being a certain expression template + type internal to `gmpxx.h', which the C++ template resolution + rules are unable to automatically convert to `mpz_class'. The + workaround is simply to add an explicit cast. + + mpz_class f(1), g(2), h(3); + fun (f, mpz_class(g+h)); // Good + + Similarly, within `fun' it may be necessary to cast an expression + to type `T' when calling a templated `fun2'. + + template + void fun (T f, T g) + { + fun2 (f, f+g); // Bad + } + + template + void fun (T f, T g) + { + fun2 (f, T(f+g)); // Good + } + + +File: gmp.info, Node: BSD Compatible Functions, Next: Custom Allocation, Prev: C++ Class Interface, Up: Top + +13 Berkeley MP Compatible Functions +*********************************** + +These functions are intended to be fully compatible with the Berkeley MP +library which is available on many BSD derived U*ix systems. The +`--enable-mpbsd' option must be used when building GNU MP to make these +available (*note Installing GMP::). + + The original Berkeley MP library has a usage restriction: you cannot +use the same variable as both source and destination in a single +function call. The compatible functions in GNU MP do not share this +restriction--inputs and outputs may overlap. + + It is not recommended that new programs are written using these +functions. Apart from the incomplete set of functions, the interface +for initializing `MINT' objects is more error prone, and the `pow' +function collides with `pow' in `libm.a'. + + Include the header `mp.h' to get the definition of the necessary +types and functions. If you are on a BSD derived system, make sure to +include GNU `mp.h' if you are going to link the GNU `libmp.a' to your +program. This means that you probably need to give the `-I' +option to the compiler, where `' is the directory where you have +GNU `mp.h'. + + -- Function: MINT * itom (signed short int INITIAL_VALUE) + Allocate an integer consisting of a `MINT' object and dynamic limb + space. Initialize the integer to INITIAL_VALUE. Return a pointer + to the `MINT' object. + + -- Function: MINT * xtom (char *INITIAL_VALUE) + Allocate an integer consisting of a `MINT' object and dynamic limb + space. Initialize the integer from INITIAL_VALUE, a hexadecimal, + null-terminated C string. Return a pointer to the `MINT' object. + + -- Function: void move (MINT *SRC, MINT *DEST) + Set DEST to SRC by copying. Both variables must be previously + initialized. + + -- Function: void madd (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) + Add SRC_1 and SRC_2 and put the sum in DESTINATION. + + -- Function: void msub (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) + Subtract SRC_2 from SRC_1 and put the difference in DESTINATION. + + -- Function: void mult (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) + Multiply SRC_1 and SRC_2 and put the product in DESTINATION. + + -- Function: void mdiv (MINT *DIVIDEND, MINT *DIVISOR, MINT *QUOTIENT, + MINT *REMAINDER) + -- Function: void sdiv (MINT *DIVIDEND, signed short int DIVISOR, MINT + *QUOTIENT, signed short int *REMAINDER) + Set QUOTIENT to DIVIDEND/DIVISOR, and REMAINDER to DIVIDEND mod + DIVISOR. The quotient is rounded towards zero; the remainder has + the same sign as the dividend unless it is zero. + + Some implementations of these functions work differently--or not + at all--for negative arguments. + + -- Function: void msqrt (MINT *OP, MINT *ROOT, MINT *REMAINDER) + Set ROOT to the truncated integer part of the square root of OP, + like `mpz_sqrt'. Set REMAINDER to OP-ROOT*ROOT, i.e. zero if OP + is a perfect square. + + If ROOT and REMAINDER are the same variable, the results are + undefined. + + -- Function: void pow (MINT *BASE, MINT *EXP, MINT *MOD, MINT *DEST) + Set DEST to (BASE raised to EXP) modulo MOD. + + Note that the name `pow' clashes with `pow' from the standard C + math library (*note Exponentiation and Logarithms: (libc)Exponents + and Logarithms.). An application will only be able to use one or + the other. + + -- Function: void rpow (MINT *BASE, signed short int EXP, MINT *DEST) + Set DEST to BASE raised to EXP. + + -- Function: void gcd (MINT *OP1, MINT *OP2, MINT *RES) + Set RES to the greatest common divisor of OP1 and OP2. + + -- Function: int mcmp (MINT *OP1, MINT *OP2) + Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero + if OP1 = OP2, and a negative value if OP1 < OP2. + + -- Function: void min (MINT *DEST) + Input a decimal string from `stdin', and put the read integer in + DEST. SPC and TAB are allowed in the number string, and are + ignored. + + -- Function: void mout (MINT *SRC) + Output SRC to `stdout', as a decimal string. Also output a + newline. + + -- Function: char * mtox (MINT *OP) + Convert OP to a hexadecimal string, and return a pointer to the + string. The returned string is allocated using the default memory + allocation function, `malloc' by default. It will be + `strlen(str)+1' bytes, that being exactly enough for the string + and null-terminator. + + -- Function: void mfree (MINT *OP) + De-allocate, the space used by OP. *This function should only be + passed a value returned by `itom' or `xtom'.* + + +File: gmp.info, Node: Custom Allocation, Next: Language Bindings, Prev: BSD Compatible Functions, Up: Top + +14 Custom Allocation +******************** + +By default GMP uses `malloc', `realloc' and `free' for memory +allocation, and if they fail GMP prints a message to the standard error +output and terminates the program. + + Alternate functions can be specified, to allocate memory in a +different way or to have a different error action on running out of +memory. + + This feature is available in the Berkeley compatibility library +(*note BSD Compatible Functions::) as well as the main GMP library. + + -- Function: void mp_set_memory_functions ( + void *(*ALLOC_FUNC_PTR) (size_t), + void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t), + void (*FREE_FUNC_PTR) (void *, size_t)) + Replace the current allocation functions from the arguments. If + an argument is `NULL', the corresponding default function is used. + + These functions will be used for all memory allocation done by + GMP, apart from temporary space from `alloca' if that function is + available and GMP is configured to use it (*note Build Options::). + + *Be sure to call `mp_set_memory_functions' only when there are no + active GMP objects allocated using the previous memory functions! + Usually that means calling it before any other GMP function.* + + The functions supplied should fit the following declarations: + + -- Function: void * allocate_function (size_t ALLOC_SIZE) + Return a pointer to newly allocated space with at least ALLOC_SIZE + bytes. + + -- Function: void * reallocate_function (void *PTR, size_t OLD_SIZE, + size_t NEW_SIZE) + Resize a previously allocated block PTR of OLD_SIZE bytes to be + NEW_SIZE bytes. + + The block may be moved if necessary or if desired, and in that + case the smaller of OLD_SIZE and NEW_SIZE bytes must be copied to + the new location. The return value is a pointer to the resized + block, that being the new location if moved or just PTR if not. + + PTR is never `NULL', it's always a previously allocated block. + NEW_SIZE may be bigger or smaller than OLD_SIZE. + + -- Function: void free_function (void *PTR, size_t SIZE) + De-allocate the space pointed to by PTR. + + PTR is never `NULL', it's always a previously allocated block of + SIZE bytes. + + A "byte" here means the unit used by the `sizeof' operator. + + The OLD_SIZE parameters to REALLOCATE_FUNCTION and FREE_FUNCTION are +passed for convenience, but of course can be ignored if not needed. +The default functions using `malloc' and friends for instance don't use +them. + + No error return is allowed from any of these functions, if they +return then they must have performed the specified operation. In +particular note that ALLOCATE_FUNCTION or REALLOCATE_FUNCTION mustn't +return `NULL'. + + Getting a different fatal error action is a good use for custom +allocation functions, for example giving a graphical dialog rather than +the default print to `stderr'. How much is possible when genuinely out +of memory is another question though. + + There's currently no defined way for the allocation functions to +recover from an error such as out of memory, they must terminate +program execution. A `longjmp' or throwing a C++ exception will have +undefined results. This may change in the future. + + GMP may use allocated blocks to hold pointers to other allocated +blocks. This will limit the assumptions a conservative garbage +collection scheme can make. + + Since the default GMP allocation uses `malloc' and friends, those +functions will be linked in even if the first thing a program does is an +`mp_set_memory_functions'. It's necessary to change the GMP sources if +this is a problem. + + + -- Function: void mp_get_memory_functions ( + void *(**ALLOC_FUNC_PTR) (size_t), + void *(**REALLOC_FUNC_PTR) (void *, size_t, size_t), + void (**FREE_FUNC_PTR) (void *, size_t)) + Get the current allocation functions, storing function pointers to + the locations given by the arguments. If an argument is `NULL', + that function pointer is not stored. + + For example, to get just the current free function, + + void (*freefunc) (void *, size_t); + + mp_get_memory_functions (NULL, NULL, &freefunc); + + +File: gmp.info, Node: Language Bindings, Next: Algorithms, Prev: Custom Allocation, Up: Top + +15 Language Bindings +******************** + +The following packages and projects offer access to GMP from languages +other than C, though perhaps with varying levels of functionality and +efficiency. + + +C++ + * GMP C++ class interface, *note C++ Class Interface:: + Straightforward interface, expression templates to eliminate + temporaries. + + * ALP `http://www-sop.inria.fr/saga/logiciels/ALP/' + Linear algebra and polynomials using templates. + + * Arithmos `http://www.win.ua.ac.be/~cant/arithmos/' + Rationals with infinities and square roots. + + * CLN `http://www.ginac.de/CLN/' + High level classes for arithmetic. + + * LiDIA `http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/' + A C++ library for computational number theory. + + * Linbox `http://www.linalg.org/' + Sparse vectors and matrices. + + * NTL `http://www.shoup.net/ntl/' + A C++ number theory library. + +Fortran + * Omni F77 `http://phase.hpcc.jp/Omni/home.html' + Arbitrary precision floats. + +Haskell + * Glasgow Haskell Compiler `http://www.haskell.org/ghc/' + +Java + * Kaffe `http://www.kaffe.org/' + + * Kissme `http://kissme.sourceforge.net/' + +Lisp + * GNU Common Lisp `http://www.gnu.org/software/gcl/gcl.html' + + * Librep `http://librep.sourceforge.net/' + + * XEmacs (21.5.18 beta and up) `http://www.xemacs.org' + Optional big integers, rationals and floats using GMP. + +M4 + * GNU m4 betas `http://www.seindal.dk/rene/gnu/' + Optionally provides an arbitrary precision `mpeval'. + +ML + * MLton compiler `http://mlton.org/' + +Objective Caml + * MLGMP `http://www.di.ens.fr/~monniaux/programmes.html.en' + + * Numerix `http://pauillac.inria.fr/~quercia/' + Optionally using GMP. + +Oz + * Mozart `http://www.mozart-oz.org/' + +Pascal + * GNU Pascal Compiler `http://www.gnu-pascal.de/' + GMP unit. + + * Numerix `http://pauillac.inria.fr/~quercia/' + For Free Pascal, optionally using GMP. + +Perl + * GMP module, see `demos/perl' in the GMP sources (*note + Demonstration Programs::). + + * Math::GMP `http://www.cpan.org/' + Compatible with Math::BigInt, but not as many functions as + the GMP module above. + + * Math::BigInt::GMP `http://www.cpan.org/' + Plug Math::GMP into normal Math::BigInt operations. + +Pike + * mpz module in the standard distribution, + `http://pike.ida.liu.se/' + +Prolog + * SWI Prolog `http://www.swi-prolog.org/' + Arbitrary precision floats. + +Python + * mpz module in the standard distribution, + `http://www.python.org/' + + * GMPY `http://gmpy.sourceforge.net/' + +Scheme + * GNU Guile (upcoming 1.8) + `http://www.gnu.org/software/guile/guile.html' + + * RScheme `http://www.rscheme.org/' + + * STklos `http://www.stklos.org/' + +Smalltalk + * GNU Smalltalk + `http://www.smalltalk.org/versions/GNUSmalltalk.html' + +Other + * Axiom `http://savannah.nongnu.org/projects/axiom' + Computer algebra using GCL. + + * DrGenius `http://drgenius.seul.org/' + Geometry system and mathematical programming language. + + * GiNaC `http://www.ginac.de/' + C++ computer algebra using CLN. + + * GOO `http://www.googoogaga.org/' + Dynamic object oriented language. + + * Maxima `http://www.ma.utexas.edu/users/wfs/maxima.html' + Macsyma computer algebra using GCL. + + * Q `http://q-lang.sourceforge.net/' + Equational programming system. + + * Regina `http://regina.sourceforge.net/' + Topological calculator. + + * Yacas `http://www.xs4all.nl/~apinkus/yacas.html' + Yet another computer algebra system. + + + +File: gmp.info, Node: Algorithms, Next: Internals, Prev: Language Bindings, Up: Top + +16 Algorithms +************* + +This chapter is an introduction to some of the algorithms used for +various GMP operations. The code is likely to be hard to understand +without knowing something about the algorithms. + + Some GMP internals are mentioned, but applications that expect to be +compatible with future GMP releases should take care to use only the +documented functions. + +* Menu: + +* Multiplication Algorithms:: +* Division Algorithms:: +* Greatest Common Divisor Algorithms:: +* Powering Algorithms:: +* Root Extraction Algorithms:: +* Radix Conversion Algorithms:: +* Other Algorithms:: +* Assembly Coding:: + + +File: gmp.info, Node: Multiplication Algorithms, Next: Division Algorithms, Prev: Algorithms, Up: Algorithms + +16.1 Multiplication +=================== + +NxN limb multiplications and squares are done using one of five +algorithms, as the size N increases. + + Algorithm Threshold + Basecase (none) + Karatsuba `MUL_TOOM22_THRESHOLD' + Toom-3 `MUL_TOOM33_THRESHOLD' + Toom-4 `MUL_TOOM44_THRESHOLD' + FFT `MUL_FFT_THRESHOLD' + + Similarly for squaring, with the `SQR' thresholds. + + NxM multiplications of operands with different sizes above +`MUL_TOOM22_THRESHOLD' are currently done by special Toom-inspired +algorithms or directly with FFT, depending on operand size (*note +Unbalanced Multiplication::). + +* Menu: + +* Basecase Multiplication:: +* Karatsuba Multiplication:: +* Toom 3-Way Multiplication:: +* Toom 4-Way Multiplication:: +* FFT Multiplication:: +* Other Multiplication:: +* Unbalanced Multiplication:: + + +File: gmp.info, Node: Basecase Multiplication, Next: Karatsuba Multiplication, Prev: Multiplication Algorithms, Up: Multiplication Algorithms + +16.1.1 Basecase Multiplication +------------------------------ + +Basecase NxM multiplication is a straightforward rectangular set of +cross-products, the same as long multiplication done by hand and for +that reason sometimes known as the schoolbook or grammar school method. +This is an O(N*M) algorithm. See Knuth section 4.3.1 algorithm M +(*note References::), and the `mpn/generic/mul_basecase.c' code. + + Assembly implementations of `mpn_mul_basecase' are essentially the +same as the generic C code, but have all the usual assembly tricks and +obscurities introduced for speed. + + A square can be done in roughly half the time of a multiply, by +using the fact that the cross products above and below the diagonal are +the same. A triangle of products below the diagonal is formed, doubled +(left shift by one bit), and then the products on the diagonal added. +This can be seen in `mpn/generic/sqr_basecase.c'. Again the assembly +implementations take essentially the same approach. + + u0 u1 u2 u3 u4 + +---+---+---+---+---+ + u0 | d | | | | | + +---+---+---+---+---+ + u1 | | d | | | | + +---+---+---+---+---+ + u2 | | | d | | | + +---+---+---+---+---+ + u3 | | | | d | | + +---+---+---+---+---+ + u4 | | | | | d | + +---+---+---+---+---+ + + In practice squaring isn't a full 2x faster than multiplying, it's +usually around 1.5x. Less than 1.5x probably indicates +`mpn_sqr_basecase' wants improving on that CPU. + + On some CPUs `mpn_mul_basecase' can be faster than the generic C +`mpn_sqr_basecase' on some small sizes. `SQR_BASECASE_THRESHOLD' is +the size at which to use `mpn_sqr_basecase', this will be zero if that +routine should be used always. + + +File: gmp.info, Node: Karatsuba Multiplication, Next: Toom 3-Way Multiplication, Prev: Basecase Multiplication, Up: Multiplication Algorithms + +16.1.2 Karatsuba Multiplication +------------------------------- + +The Karatsuba multiplication algorithm is described in Knuth section +4.3.3 part A, and various other textbooks. A brief description is +given here. + + The inputs x and y are treated as each split into two parts of equal +length (or the most significant part one limb shorter if N is odd). + + high low + +----------+----------+ + | x1 | x0 | + +----------+----------+ + + +----------+----------+ + | y1 | y0 | + +----------+----------+ + + Let b be the power of 2 where the split occurs, ie. if x0 is k limbs +(y0 the same) then b=2^(k*mp_bits_per_limb). With that x=x1*b+x0 and +y=y1*b+y0, and the following holds, + + x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 + + This formula means doing only three multiplies of (N/2)x(N/2) limbs, +whereas a basecase multiply of NxN limbs is equivalent to four +multiplies of (N/2)x(N/2). The factors (b^2+b) etc represent the +positions where the three products must be added. + + high low + +--------+--------+ +--------+--------+ + | x1*y1 | | x0*y0 | + +--------+--------+ +--------+--------+ + +--------+--------+ + add | x1*y1 | + +--------+--------+ + +--------+--------+ + add | x0*y0 | + +--------+--------+ + +--------+--------+ + sub | (x1-x0)*(y1-y0) | + +--------+--------+ + + The term (x1-x0)*(y1-y0) is best calculated as an absolute value, +and the sign used to choose to add or subtract. Notice the sum +high(x0*y0)+low(x1*y1) occurs twice, so it's possible to do 5*k limb +additions, rather than 6*k, but in GMP extra function call overheads +outweigh the saving. + + Squaring is similar to multiplying, but with x=y the formula reduces +to an equivalent with three squares, + + x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2 + + The final result is accumulated from those three squares the same +way as for the three multiplies above. The middle term (x1-x0)^2 is now +always positive. + + A similar formula for both multiplying and squaring can be +constructed with a middle term (x1+x0)*(y1+y0). But those sums can +exceed k limbs, leading to more carry handling and additions than the +form above. + + Karatsuba multiplication is asymptotically an O(N^1.585) algorithm, +the exponent being log(3)/log(2), representing 3 multiplies each 1/2 +the size of the inputs. This is a big improvement over the basecase +multiply at O(N^2) and the advantage soon overcomes the extra additions +Karatsuba performs. `MUL_TOOM22_THRESHOLD' can be as little as 10 +limbs. The `SQR' threshold is usually about twice the `MUL'. + + The basecase algorithm will take a time of the form M(N) = a*N^2 + +b*N + c and the Karatsuba algorithm K(N) = 3*M(N/2) + d*N + e, which +expands to K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e. The factor 3/4 +for a means per-crossproduct speedups in the basecase code will +increase the threshold since they benefit M(N) more than K(N). And +conversely the 3/2 for b means linear style speedups of b will increase +the threshold since they benefit K(N) more than M(N). The latter can +be seen for instance when adding an optimized `mpn_sqr_diagonal' to +`mpn_sqr_basecase'. Of course all speedups reduce total time, and in +that sense the algorithm thresholds are merely of academic interest. + + +File: gmp.info, Node: Toom 3-Way Multiplication, Next: Toom 4-Way Multiplication, Prev: Karatsuba Multiplication, Up: Multiplication Algorithms + +16.1.3 Toom 3-Way Multiplication +-------------------------------- + +The Karatsuba formula is the simplest case of a general approach to +splitting inputs that leads to both Toom and FFT algorithms. A +description of Toom can be found in Knuth section 4.3.3, with an +example 3-way calculation after Theorem A. The 3-way form used in GMP +is described here. + + The operands are each considered split into 3 pieces of equal length +(or the most significant part 1 or 2 limbs shorter than the other two). + + high low + +----------+----------+----------+ + | x2 | x1 | x0 | + +----------+----------+----------+ + + +----------+----------+----------+ + | y2 | y1 | y0 | + +----------+----------+----------+ + +These parts are treated as the coefficients of two polynomials + + X(t) = x2*t^2 + x1*t + x0 + Y(t) = y2*t^2 + y1*t + y0 + + Let b equal the power of 2 which is the size of the x0, x1, y0 and +y1 pieces, ie. if they're k limbs each then b=2^(k*mp_bits_per_limb). +With this x=X(b) and y=Y(b). + + Let a polynomial W(t)=X(t)*Y(t) and suppose its coefficients are + + W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0 + + The w[i] are going to be determined, and when they are they'll give +the final result using w=W(b), since x*y=X(b)*Y(b)=W(b). The +coefficients will be roughly b^2 each, and the final W(b) will be an +addition like, + + high low + +-------+-------+ + | w4 | + +-------+-------+ + +--------+-------+ + | w3 | + +--------+-------+ + +--------+-------+ + | w2 | + +--------+-------+ + +--------+-------+ + | w1 | + +--------+-------+ + +-------+-------+ + | w0 | + +-------+-------+ + + The w[i] coefficients could be formed by a simple set of cross +products, like w4=x2*y2, w3=x2*y1+x1*y2, w2=x2*y0+x1*y1+x0*y2 etc, but +this would need all nine x[i]*y[j] for i,j=0,1,2, and would be +equivalent merely to a basecase multiply. Instead the following +approach is used. + + X(t) and Y(t) are evaluated and multiplied at 5 points, giving +values of W(t) at those points. In GMP the following points are used, + + Point Value + t=0 x0 * y0, which gives w0 immediately + t=1 (x2+x1+x0) * (y2+y1+y0) + t=-1 (x2-x1+x0) * (y2-y1+y0) + t=2 (4*x2+2*x1+x0) * (4*y2+2*y1+y0) + t=inf x2 * y2, which gives w4 immediately + + At t=-1 the values can be negative and that's handled using the +absolute values and tracking the sign separately. At t=inf the value +is actually X(t)*Y(t)/t^4 in the limit as t approaches infinity, but +it's much easier to think of as simply x2*y2 giving w4 immediately +(much like x0*y0 at t=0 gives w0 immediately). + + Each of the points substituted into W(t)=w4*t^4+...+w0 gives a +linear combination of the w[i] coefficients, and the value of those +combinations has just been calculated. + + W(0) = w0 + W(1) = w4 + w3 + w2 + w1 + w0 + W(-1) = w4 - w3 + w2 - w1 + w0 + W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 + W(inf) = w4 + + This is a set of five equations in five unknowns, and some +elementary linear algebra quickly isolates each w[i]. This involves +adding or subtracting one W(t) value from another, and a couple of +divisions by powers of 2 and one division by 3, the latter using the +special `mpn_divexact_by3' (*note Exact Division::). + + The conversion of W(t) values to the coefficients is interpolation. +A polynomial of degree 4 like W(t) is uniquely determined by values +known at 5 different points. The points are arbitrary and can be +chosen to make the linear equations come out with a convenient set of +steps for quickly isolating the w[i]. + + Squaring follows the same procedure as multiplication, but there's +only one X(t) and it's evaluated at the 5 points, and those values +squared to give values of W(t). The interpolation is then identical, +and in fact the same `toom3_interpolate' subroutine is used for both +squaring and multiplying. + + Toom-3 is asymptotically O(N^1.465), the exponent being +log(5)/log(3), representing 5 recursive multiplies of 1/3 the original +size each. This is an improvement over Karatsuba at O(N^1.585), though +Toom does more work in the evaluation and interpolation and so it only +realizes its advantage above a certain size. + + Near the crossover between Toom-3 and Karatsuba there's generally a +range of sizes where the difference between the two is small. +`MUL_TOOM33_THRESHOLD' is a somewhat arbitrary point in that range and +successive runs of the tune program can give different values due to +small variations in measuring. A graph of time versus size for the two +shows the effect, see `tune/README'. + + At the fairly small sizes where the Toom-3 thresholds occur it's +worth remembering that the asymptotic behaviour for Karatsuba and +Toom-3 can't be expected to make accurate predictions, due of course to +the big influence of all sorts of overheads, and the fact that only a +few recursions of each are being performed. Even at large sizes +there's a good chance machine dependent effects like cache architecture +will mean actual performance deviates from what might be predicted. + + The formula given for the Karatsuba algorithm (*note Karatsuba +Multiplication::) has an equivalent for Toom-3 involving only five +multiplies, but this would be complicated and unenlightening. + + An alternate view of Toom-3 can be found in Zuras (*note +References::), using a vector to represent the x and y splits and a +matrix multiplication for the evaluation and interpolation stages. The +matrix inverses are not meant to be actually used, and they have +elements with values much greater than in fact arise in the +interpolation steps. The diagram shown for the 3-way is attractive, +but again doesn't have to be implemented that way and for example with +a bit of rearrangement just one division by 6 can be done. + + +File: gmp.info, Node: Toom 4-Way Multiplication, Next: FFT Multiplication, Prev: Toom 3-Way Multiplication, Up: Multiplication Algorithms + +16.1.4 Toom 4-Way Multiplication +-------------------------------- + +Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, +respectively. Toom-4 analogously splits the operands into 4 +coefficients. Using the notation from the section on Toom-3 +multiplication, we form two polynomials: + + X(t) = x3*t^3 + x2*t^2 + x1*t + x0 + Y(t) = y3*t^3 + y2*t^2 + y1*t + y0 + + X(t) and Y(t) are evaluated and multiplied at 7 points, giving +values of W(t) at those points. In GMP the following points are used, + + Point Value + t=0 x0 * y0, which gives w0 immediately + t=1/2 (x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0) + t=-1/2 (-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0) + t=1 (x3+x2+x1+x0) * (y3+y2+y1+y0) + t=-1 (-x3+x2-x1+x0) * (-y3+y2-y1+y0) + t=2 (8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0) + t=inf x3 * y3, which gives w6 immediately + + The number of additions and subtractions for Toom-4 is much larger +than for Toom-3. But several subexpressions occur multiple times, for +example x2+x0, occurs for both t=1 and t=-1. + + Toom-4 is asymptotically O(N^1.404), the exponent being +log(7)/log(4), representing 7 recursive multiplies of 1/4 the original +size each. + + +File: gmp.info, Node: FFT Multiplication, Next: Other Multiplication, Prev: Toom 4-Way Multiplication, Up: Multiplication Algorithms + +16.1.5 FFT Multiplication +------------------------- + +At large to very large sizes a Fermat style FFT multiplication is used, +following Scho"nhage and Strassen (*note References::). Descriptions +of FFTs in various forms can be found in many textbooks, for instance +Knuth section 4.3.3 part C or Lipson chapter IX. A brief description +of the form used in GMP is given here. + + The multiplication done is x*y mod 2^N+1, for a given N. A full +product x*y is obtained by choosing N>=bits(x)+bits(y) and padding x +and y with high zero limbs. The modular product is the native form for +the algorithm, so padding to get a full product is unavoidable. + + The algorithm follows a split, evaluate, pointwise multiply, +interpolate and combine similar to that described above for Karatsuba +and Toom-3. A k parameter controls the split, with an FFT-k splitting +into 2^k pieces of M=N/2^k bits each. N must be a multiple of +(2^k)*mp_bits_per_limb so the split falls on limb boundaries, avoiding +bit shifts in the split and combine stages. + + The evaluations, pointwise multiplications, and interpolation, are +all done modulo 2^N'+1 where N' is 2M+k+3 rounded up to a multiple of +2^k and of `mp_bits_per_limb'. The results of interpolation will be +the following negacyclic convolution of the input pieces, and the +choice of N' ensures these sums aren't truncated. + + --- + \ b + w[n] = / (-1) * x[i] * y[j] + --- + i+j==b*2^k+n + b=0,1 + + The points used for the evaluation are g^i for i=0 to 2^k-1 where +g=2^(2N'/2^k). g is a 2^k'th root of unity mod 2^N'+1, which produces +necessary cancellations at the interpolation stage, and it's also a +power of 2 so the fast Fourier transforms used for the evaluation and +interpolation do only shifts, adds and negations. + + The pointwise multiplications are done modulo 2^N'+1 and either +recurse into a further FFT or use a plain multiplication (Toom-3, +Karatsuba or basecase), whichever is optimal at the size N'. The +interpolation is an inverse fast Fourier transform. The resulting set +of sums of x[i]*y[j] are added at appropriate offsets to give the final +result. + + Squaring is the same, but x is the only input so it's one transform +at the evaluate stage and the pointwise multiplies are squares. The +interpolation is the same. + + For a mod 2^N+1 product, an FFT-k is an O(N^(k/(k-1))) algorithm, +the exponent representing 2^k recursed modular multiplies each +1/2^(k-1) the size of the original. Each successive k is an asymptotic +improvement, but overheads mean each is only faster at bigger and +bigger sizes. In the code, `MUL_FFT_TABLE' and `SQR_FFT_TABLE' are the +thresholds where each k is used. Each new k effectively swaps some +multiplying for some shifts, adds and overheads. + + A mod 2^N+1 product can be formed with a normal NxN->2N bit multiply +plus a subtraction, so an FFT and Toom-3 etc can be compared directly. +A k=4 FFT at O(N^1.333) can be expected to be the first faster than +Toom-3 at O(N^1.465). In practice this is what's found, with +`MUL_FFT_MODF_THRESHOLD' and `SQR_FFT_MODF_THRESHOLD' being between 300 +and 1000 limbs, depending on the CPU. So far it's been found that only +very large FFTs recurse into pointwise multiplies above these sizes. + + When an FFT is to give a full product, the change of N to 2N doesn't +alter the theoretical complexity for a given k, but for the purposes of +considering where an FFT might be first used it can be assumed that the +FFT is recursing into a normal multiply and that on that basis it's +doing 2^k recursed multiplies each 1/2^(k-2) the size of the inputs, +making it O(N^(k/(k-2))). This would mean k=7 at O(N^1.4) would be the +first FFT faster than Toom-3. In practice `MUL_FFT_THRESHOLD' and +`SQR_FFT_THRESHOLD' have been found to be in the k=8 range, somewhere +between 3000 and 10000 limbs. + + The way N is split into 2^k pieces and then 2M+k+3 is rounded up to +a multiple of 2^k and `mp_bits_per_limb' means that when +2^k>=mp_bits_per_limb the effective N is a multiple of 2^(2k-1) bits. +The +k+3 means some values of N just under such a multiple will be +rounded to the next. The complexity calculations above assume that a +favourable size is used, meaning one which isn't padded through +rounding, and it's also assumed that the extra +k+3 bits are negligible +at typical FFT sizes. + + The practical effect of the 2^(2k-1) constraint is to introduce a +step-effect into measured speeds. For example k=8 will round N up to a +multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb +groups of sizes for which `mpn_mul_n' runs at the same speed. Or for +k=9 groups of 2048 limbs, k=10 groups of 8192 limbs, etc. In practice +it's been found each k is used at quite small multiples of its size +constraint and so the step effect is quite noticeable in a time versus +size graph. + + The threshold determinations currently measure at the mid-points of +size steps, but this is sub-optimal since at the start of a new step it +can happen that it's better to go back to the previous k for a while. +Something more sophisticated for `MUL_FFT_TABLE' and `SQR_FFT_TABLE' +will be needed. + + +File: gmp.info, Node: Other Multiplication, Next: Unbalanced Multiplication, Prev: FFT Multiplication, Up: Multiplication Algorithms + +16.1.6 Other Multiplication +--------------------------- + +The Toom algorithms described above (*note Toom 3-Way Multiplication::, +*note Toom 4-Way Multiplication::) generalizes to split into an +arbitrary number of pieces, as per Knuth section 4.3.3 algorithm C. +This is not currently used. The notes here are merely for interest. + + In general a split into r+1 pieces is made, and evaluations and +pointwise multiplications done at 2*r+1 points. A 4-way split does 7 +pointwise multiplies, 5-way does 9, etc. Asymptotically an (r+1)-way +algorithm is O(N^(log(2*r+1)/log(r+1))). Only the pointwise +multiplications count towards big-O complexity, but the time spent in +the evaluate and interpolate stages grows with r and has a significant +practical impact, with the asymptotic advantage of each r realized only +at bigger and bigger sizes. The overheads grow as O(N*r), whereas in +an r=2^k FFT they grow only as O(N*log(r)). + + Knuth algorithm C evaluates at points 0,1,2,...,2*r, but exercise 4 +uses -r,...,0,...,r and the latter saves some small multiplies in the +evaluate stage (or rather trades them for additions), and has a further +saving of nearly half the interpolate steps. The idea is to separate +odd and even final coefficients and then perform algorithm C steps C7 +and C8 on them separately. The divisors at step C7 become j^2 and the +multipliers at C8 become 2*t*j-j^2. + + Splitting odd and even parts through positive and negative points +can be thought of as using -1 as a square root of unity. If a 4th root +of unity was available then a further split and speedup would be +possible, but no such root exists for plain integers. Going to complex +integers with i=sqrt(-1) doesn't help, essentially because in Cartesian +form it takes three real multiplies to do a complex multiply. The +existence of 2^k'th roots of unity in a suitable ring or field lets the +fast Fourier transform keep splitting and get to O(N*log(r)). + + Floating point FFTs use complex numbers approximating Nth roots of +unity. Some processors have special support for such FFTs. But these +are not used in GMP since it's very difficult to guarantee an exact +result (to some number of bits). An occasional difference of 1 in the +last bit might not matter to a typical signal processing algorithm, but +is of course of vital importance to GMP. + + +File: gmp.info, Node: Unbalanced Multiplication, Prev: Other Multiplication, Up: Multiplication Algorithms + +16.1.7 Unbalanced Multiplication +-------------------------------- + +Multiplication of operands with different sizes, both below +`MUL_TOOM22_THRESHOLD' are done with plain schoolbook multiplication +(*note Basecase Multiplication::). + + For really large operands, we invoke FFT directly. + + For operands between these sizes, we use Toom inspired algorithms +suggested by Alberto Zanoni and Marco Bodrato. The idea is to split +the operands into polynomials of different degree. GMP currently +splits the smaller operand onto 2 coefficients, i.e., a polynomial of +degree 1, but the larger operand can be split into 2, 3, or 4 +coefficients, i.e., a polynomial of degree 1 to 3. + + +File: gmp.info, Node: Division Algorithms, Next: Greatest Common Divisor Algorithms, Prev: Multiplication Algorithms, Up: Algorithms + +16.2 Division Algorithms +======================== + +* Menu: + +* Single Limb Division:: +* Basecase Division:: +* Divide and Conquer Division:: +* Block-Wise Barrett Division:: +* Exact Division:: +* Exact Remainder:: +* Small Quotient Division:: + + +File: gmp.info, Node: Single Limb Division, Next: Basecase Division, Prev: Division Algorithms, Up: Division Algorithms + +16.2.1 Single Limb Division +--------------------------- + +Nx1 division is implemented using repeated 2x1 divisions from high to +low, either with a hardware divide instruction or a multiplication by +inverse, whichever is best on a given CPU. + + The multiply by inverse follows "Improved division by invariant +integers" by Mo"ller and Granlund (*note References::) and is +implemented as `udiv_qrnnd_preinv' in `gmp-impl.h'. The idea is to +have a fixed-point approximation to 1/d (see `invert_limb') and then +multiply by the high limb (plus one bit) of the dividend to get a +quotient q. With d normalized (high bit set), q is no more than 1 too +small. Subtracting q*d from the dividend gives a remainder, and +reveals whether q or q-1 is correct. + + The result is a division done with two multiplications and four or +five arithmetic operations. On CPUs with low latency multipliers this +can be much faster than a hardware divide, though the cost of +calculating the inverse at the start may mean it's only better on +inputs bigger than say 4 or 5 limbs. + + When a divisor must be normalized, either for the generic C +`__udiv_qrnnd_c' or the multiply by inverse, the division performed is +actually a*2^k by d*2^k where a is the dividend and k is the power +necessary to have the high bit of d*2^k set. The bit shifts for the +dividend are usually accomplished "on the fly" meaning by extracting +the appropriate bits at each step. Done this way the quotient limbs +come out aligned ready to store. When only the remainder is wanted, an +alternative is to take the dividend limbs unshifted and calculate r = a +mod d*2^k followed by an extra final step r*2^k mod d*2^k. This can +help on CPUs with poor bit shifts or few registers. + + The multiply by inverse can be done two limbs at a time. The +calculation is basically the same, but the inverse is two limbs and the +divisor treated as if padded with a low zero limb. This means more +work, since the inverse will need a 2x2 multiply, but the four 1x1s to +do that are independent and can therefore be done partly or wholly in +parallel. Likewise for a 2x1 calculating q*d. The net effect is to +process two limbs with roughly the same two multiplies worth of latency +that one limb at a time gives. This extends to 3 or 4 limbs at a time, +though the extra work to apply the inverse will almost certainly soon +reach the limits of multiplier throughput. + + A similar approach in reverse can be taken to process just half a +limb at a time if the divisor is only a half limb. In this case the +1x1 multiply for the inverse effectively becomes two (1/2)x1 for each +limb, which can be a saving on CPUs with a fast half limb multiply, or +in fact if the only multiply is a half limb, and especially if it's not +pipelined. + + +File: gmp.info, Node: Basecase Division, Next: Divide and Conquer Division, Prev: Single Limb Division, Up: Division Algorithms + +16.2.2 Basecase Division +------------------------ + +Basecase NxM division is like long division done by hand, but in base +2^mp_bits_per_limb. See Knuth section 4.3.1 algorithm D, and +`mpn/generic/sb_divrem_mn.c'. + + Briefly stated, while the dividend remains larger than the divisor, +a high quotient limb is formed and the Nx1 product q*d subtracted at +the top end of the dividend. With a normalized divisor (most +significant bit set), each quotient limb can be formed with a 2x1 +division and a 1x1 multiplication plus some subtractions. The 2x1 +division is by the high limb of the divisor and is done either with a +hardware divide or a multiply by inverse (the same as in *Note Single +Limb Division::) whichever is faster. Such a quotient is sometimes one +too big, requiring an addback of the divisor, but that happens rarely. + + With Q=N-M being the number of quotient limbs, this is an O(Q*M) +algorithm and will run at a speed similar to a basecase QxM +multiplication, differing in fact only in the extra multiply and divide +for each of the Q quotient limbs. + + +File: gmp.info, Node: Divide and Conquer Division, Next: Block-Wise Barrett Division, Prev: Basecase Division, Up: Division Algorithms + +16.2.3 Divide and Conquer Division +---------------------------------- + +For divisors larger than `DC_DIV_QR_THRESHOLD', division is done by +dividing. Or to be precise by a recursive divide and conquer algorithm +based on work by Moenck and Borodin, Jebelean, and Burnikel and Ziegler +(*note References::). + + The algorithm consists essentially of recognising that a 2NxN +division can be done with the basecase division algorithm (*note +Basecase Division::), but using N/2 limbs as a base, not just a single +limb. This way the multiplications that arise are (N/2)x(N/2) and can +take advantage of Karatsuba and higher multiplication algorithms (*note +Multiplication Algorithms::). The two "digits" of the quotient are +formed by recursive Nx(N/2) divisions. + + If the (N/2)x(N/2) multiplies are done with a basecase multiplication +then the work is about the same as a basecase division, but with more +function call overheads and with some subtractions separated from the +multiplies. These overheads mean that it's only when N/2 is above +`MUL_TOOM22_THRESHOLD' that divide and conquer is of use. + + `DC_DIV_QR_THRESHOLD' is based on the divisor size N, so it will be +somewhere above twice `MUL_TOOM22_THRESHOLD', but how much above +depends on the CPU. An optimized `mpn_mul_basecase' can lower +`DC_DIV_QR_THRESHOLD' a little by offering a ready-made advantage over +repeated `mpn_submul_1' calls. + + Divide and conquer is asymptotically O(M(N)*log(N)) where M(N) is +the time for an NxN multiplication done with FFTs. The actual time is +a sum over multiplications of the recursed sizes, as can be seen near +the end of section 2.2 of Burnikel and Ziegler. For example, within +the Toom-3 range, divide and conquer is 2.63*M(N). With higher +algorithms the M(N) term improves and the multiplier tends to log(N). +In practice, at moderate to large sizes, a 2NxN division is about 2 to +4 times slower than an NxN multiplication. + + +File: gmp.info, Node: Block-Wise Barrett Division, Next: Exact Division, Prev: Divide and Conquer Division, Up: Division Algorithms + +16.2.4 Block-Wise Barrett Division +---------------------------------- + +For the largest divisions, a block-wise Barrett division algorithm is +used. Here, the divisor is inverted to a precision determined by the +relative size of the dividend and divisor. Blocks of quotient limbs +are then generated by multiplying blocks from the dividend by the +inverse. + + Our block-wise algorithm computes a smaller inverse than in the +plain Barrett algorithm. For a 2n/n division, the inverse will be just +ceil(n/2) limbs. + + +File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms + +16.2.5 Exact Division +--------------------- + +A so-called exact division is when the dividend is known to be an exact +multiple of the divisor. Jebelean's exact division algorithm uses this +knowledge to make some significant optimizations (*note References::). + + The idea can be illustrated in decimal for example with 368154 +divided by 543. Because the low digit of the dividend is 4, the low +digit of the quotient must be 8. This is arrived at from 4*7 mod 10, +using the fact 7 is the modular inverse of 3 (the low digit of the +divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from +the dividend leaving 363810. Notice the low digit has become zero. + + The procedure is repeated at the second digit, with the next +quotient digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving +325800. And finally at the third digit with quotient digit 6 (8*7 mod +10), subtracting 6*543=3258 leaving 0. So the quotient is 678. + + Notice however that the multiplies and subtractions don't need to +extend past the low three digits of the dividend, since that's enough +to determine the three quotient digits. For the last quotient digit no +subtraction is needed at all. On a 2NxN division like this one, only +about half the work of a normal basecase division is necessary. + + For an NxM exact division producing Q=N-M quotient limbs, the saving +over a normal basecase division is in two parts. Firstly, each of the +Q quotient limbs needs only one multiply, not a 2x1 divide and +multiply. Secondly, the crossproducts are reduced when Q>M to +Q*M-M*(M+1)/2, or when Q<=M to Q*(Q-1)/2. Notice the savings are +complementary. If Q is big then many divisions are saved, or if Q is +small then the crossproducts reduce to a small number. + + The modular inverse used is calculated efficiently by `binvert_limb' +in `gmp-impl.h'. This does four multiplies for a 32-bit limb, or six +for a 64-bit limb. `tune/modlinv.c' has some alternate implementations +that might suit processors better at bit twiddling than multiplying. + + The sub-quadratic exact division described by Jebelean in "Exact +Division with Karatsuba Complexity" is not currently implemented. It +uses a rearrangement similar to the divide and conquer for normal +division (*note Divide and Conquer Division::), but operating from low +to high. A further possibility not currently implemented is +"Bidirectional Exact Integer Division" by Krandick and Jebelean which +forms quotient limbs from both the high and low ends of the dividend, +and can halve once more the number of crossproducts needed in a 2NxN +division. + + A special case exact division by 3 exists in `mpn_divexact_by3', +supporting Toom-3 multiplication and `mpq' canonicalizations. It forms +quotient digits with a multiply by the modular inverse of 3 (which is +`0xAA..AAB') and uses two comparisons to determine a borrow for the next +limb. The multiplications don't need to be on the dependent chain, as +long as the effect of the borrows is applied, which can help chips with +pipelined multipliers. + + +File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms + +16.2.6 Exact Remainder +---------------------- + +If the exact division algorithm is done with a full subtraction at each +stage and the dividend isn't a multiple of the divisor, then low zero +limbs are produced but with a remainder in the high limbs. For +dividend a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this +remainder r is of the form + + a = q*d + r*b^n + + n represents the number of zero limbs produced by the subtractions, +that being the number of limbs produced for q. r will be in the range +0<=rb*r+u2 condition appropriately relaxed. + + +File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms + +16.3 Greatest Common Divisor +============================ + +* Menu: + +* Binary GCD:: +* Lehmer's Algorithm:: +* Subquadratic GCD:: +* Extended GCD:: +* Jacobi Symbol:: + + +File: gmp.info, Node: Binary GCD, Next: Lehmer's Algorithm, Prev: Greatest Common Divisor Algorithms, Up: Greatest Common Divisor Algorithms + +16.3.1 Binary GCD +----------------- + +At small sizes GMP uses an O(N^2) binary style GCD. This is described +in many textbooks, for example Knuth section 4.5.2 algorithm B. It +simply consists of successively reducing odd operands a and b using + + a,b = abs(a-b),min(a,b) + strip factors of 2 from a + + The Euclidean GCD algorithm, as per Knuth algorithms E and A, +repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, +u - q v. The binary algorithm has so far been found to be faster than +the Euclidean algorithm everywhere. One reason the binary method does +well is that the implied quotient at each step is usually small, so +often only one or two subtractions are needed to get the same effect as +a division. Quotients 1, 2 and 3 for example occur 67.7% of the time, +see Knuth section 4.5.3 Theorem E. + + When the implied quotient is large, meaning b is much smaller than +a, then a division is worthwhile. This is the basis for the initial a +mod b reductions in `mpn_gcd' and `mpn_gcd_1' (the latter for both Nx1 +and 1x1 cases). But after that initial reduction, big quotients occur +too rarely to make it worth checking for them. + + + The final 1x1 GCD in `mpn_gcd_1' is done in the generic C code as +described above. For two N-bit operands, the algorithm takes about +0.68 iterations per bit. For optimum performance some attention needs +to be paid to the way the factors of 2 are stripped from a. + + Firstly it may be noted that in twos complement the number of low +zero bits on a-b is the same as b-a, so counting or testing can begin on +a-b without waiting for abs(a-b) to be determined. + + A loop stripping low zero bits tends not to branch predict well, +since the condition is data dependent. But on average there's only a +few low zeros, so an option is to strip one or two bits arithmetically +then loop for more (as done for AMD K6). Or use a lookup table to get +a count for several bits then loop for more (as done for AMD K7). An +alternative approach is to keep just one of a or b odd and iterate + + a,b = abs(a-b), min(a,b) + a = a/2 if even + b = b/2 if even + + This requires about 1.25 iterations per bit, but stripping of a +single bit at each step avoids any branching. Repeating the bit strip +reduces to about 0.9 iterations per bit, which may be a worthwhile +tradeoff. + + Generally with the above approaches a speed of perhaps 6 cycles per +bit can be achieved, which is still not terribly fast with for instance +a 64-bit GCD taking nearly 400 cycles. It's this sort of time which +means it's not usually advantageous to combine a set of divisibility +tests into a GCD. + + Currently, the binary algorithm is used for GCD only when N < 3. + + +File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binary GCD, Up: Greatest Common Divisor Algorithms + +16.3.2 Lehmer's algorithm +------------------------- + +Lehmer's improvement of the Euclidean algorithms is based on the +observation that the initial part of the quotient sequence depends only +on the most significant parts of the inputs. The variant of Lehmer's +algorithm used in GMP splits off the most significant two limbs, as +suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by +Jebelean (*note References::). The quotients of two double-limb inputs +are collected as a 2 by 2 matrix with single-limb elements. This is +done by the function `mpn_hgcd2'. The resulting matrix is applied to +the inputs using `mpn_mul_1' and `mpn_submul_1'. Each iteration usually +reduces the inputs by almost one limb. In the rare case of a large +quotient, no progress can be made by examining just the most +significant two limbs, and the quotient is computing using plain +division. + + The resulting algorithm is asymptotically O(N^2), just as the +Euclidean algorithm and the binary algorithm. The quadratic part of the +work are the calls to `mpn_mul_1' and `mpn_submul_1'. For small sizes, +the linear work is also significant. There are roughly N calls to the +`mpn_hgcd2' function. This function uses a couple of important +optimizations: + + * It uses the same relaxed notion of correctness as `mpn_hgcd' (see + next section). This means that when called with the most + significant two limbs of two large numbers, the returned matrix + does not always correspond exactly to the initial quotient + sequence for the two large numbers; the final quotient may + sometimes be one off. + + * It takes advantage of the fact the quotients are usually small. + The division operator is not used, since the corresponding + assembler instruction is very slow on most architectures. (This + code could probably be improved further, it uses many branches + that are unfriendly to prediction). + + * It switches from double-limb calculations to single-limb + calculations half-way through, when the input numbers have been + reduced in size from two limbs to one and a half. + + + +File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms + +16.3.3 Subquadratic GCD +----------------------- + +For inputs larger than `GCD_DC_THRESHOLD', GCD is computed via the HGCD +(Half GCD) function, as a generalization to Lehmer's algorithm. + + Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1. +Then HGCD(a,b) returns a transformation matrix T with non-negative +elements, and reduced numbers (c;d) = T^-1 (a;b). The reduced numbers +c,d must be larger than S limbs, while their difference abs(c-d) must +fit in S limbs. The matrix elements will also be of size roughly N/2. + + The HGCD base case uses Lehmer's algorithm, but with the above stop +condition that returns reduced numbers and the corresponding +transformation matrix half-way through. For inputs larger than +`HGCD_THRESHOLD', HGCD is computed recursively, using the divide and +conquer algorithm in "On Scho"nhage's algorithm and subquadratic +integer GCD computation" by Mo"ller (*note References::). The recursive +algorithm consists of these main steps. + + * Call HGCD recursively, on the most significant N/2 limbs. Apply the + resulting matrix T_1 to the full numbers, reducing them to a size + just above 3N/2. + + * Perform a small number of division or subtraction steps to reduce + the numbers to size below 3N/2. This is essential mainly for the + unlikely case of large quotients. + + * Call HGCD recursively, on the most significant N/2 limbs of the + reduced numbers. Apply the resulting matrix T_2 to the full + numbers, reducing them to a size just above N/2. + + * Compute T = T_1 T_2. + + * Perform a small number of division and subtraction steps to + satisfy the requirements, and return. + + GCD is then implemented as a loop around HGCD, similarly to Lehmer's +algorithm. Where Lehmer repeatedly chops off the top two limbs, calls +`mpn_hgcd2', and applies the resulting matrix to the full numbers, the +subquadratic GCD chops off the most significant third of the limbs (the +proportion is a tuning parameter, and 1/3 seems to be more efficient +than, e.g, 1/2), calls `mpn_hgcd', and applies the resulting matrix. +Once the input numbers are reduced to size below `GCD_DC_THRESHOLD', +Lehmer's algorithm is used for the rest of the work. + + The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)), +where M(N) is the time for multiplying two N-limb numbers. + + +File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic GCD, Up: Greatest Common Divisor Algorithms + +16.3.4 Extended GCD +------------------- + +The extended GCD function, or GCDEXT, calculates gcd(a,b) and also +cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used +for plain GCD are extended to handle this case. The binary algorithm is +used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes +up to `GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is +implemented as a loop around HGCD, but with more book-keeping to keep +track of the cofactors. This gives the same asymptotic running time as +for GCD and HGCD, O(M(N)*log(N)) + + One difference to plain GCD is that while the inputs a and b are +reduced as the algorithm proceeds, the cofactors x and y grow in size. +This makes the tuning of the chopping-point more difficult. The current +code chops off the most significant half of the inputs for the call to +HGCD in the first iteration, and the most significant two thirds for +the remaining calls. This strategy could surely be improved. Also the +stop condition for the loop, where Lehmer's algorithm is invoked once +the inputs are reduced below `GCDEXT_DC_THRESHOLD', could maybe be +improved by taking into account the current size of the cofactors. + + +File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms + +16.3.5 Jacobi Symbol +-------------------- + +`mpz_jacobi' and `mpz_kronecker' are currently implemented with a +simple binary algorithm similar to that described for the GCDs (*note +Binary GCD::). They're not very fast when both inputs are large. +Lehmer's multi-step improvement or a binary based multi-step algorithm +is likely to be better. + + When one operand fits a single limb, and that includes +`mpz_kronecker_ui' and friends, an initial reduction is done with +either `mpn_mod_1' or `mpn_modexact_1_odd', followed by the binary +algorithm on a single limb. The binary algorithm is well suited to a +single limb, and the whole calculation in this case is quite efficient. + + In all the routines sign changes for the result are accumulated +using some bit twiddling, avoiding table lookups or conditional jumps. + diff --git a/misc/builddeps/dp.linux64/share/info/gmp.info-2 b/misc/builddeps/dp.linux64/share/info/gmp.info-2 new file mode 100644 index 00000000..45846232 --- /dev/null +++ b/misc/builddeps/dp.linux64/share/info/gmp.info-2 @@ -0,0 +1,3489 @@ +This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from +../../gmp/doc/gmp.texi. + + This manual describes how to install and use the GNU multiple +precision arithmetic library, version 5.0.1. + + Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version +1.3 or any later version published by the Free Software Foundation; +with no Invariant Sections, with the Front-Cover Texts being "A GNU +Manual", and with the Back-Cover Texts being "You have freedom to copy +and modify this GNU Manual, like GNU software". A copy of the license +is included in *Note GNU Free Documentation License::. + +INFO-DIR-SECTION GNU libraries +START-INFO-DIR-ENTRY +* gmp: (gmp). GNU Multiple Precision Arithmetic Library. +END-INFO-DIR-ENTRY + + +File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms + +16.4 Powering Algorithms +======================== + +* Menu: + +* Normal Powering Algorithm:: +* Modular Powering Algorithm:: + + +File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algorithm, Prev: Powering Algorithms, Up: Powering Algorithms + +16.4.1 Normal Powering +---------------------- + +Normal `mpz' or `mpf' powering uses a simple binary algorithm, +successively squaring and then multiplying by the base when a 1 bit is +seen in the exponent, as per Knuth section 4.6.3. The "left to right" +variant described there is used rather than algorithm A, since it's +just as easy and can be done with somewhat less temporary memory. + + +File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms + +16.4.2 Modular Powering +----------------------- + +Modular powering is implemented using a 2^k-ary sliding window +algorithm, as per "Handbook of Applied Cryptography" algorithm 14.85 +(*note References::). k is chosen according to the size of the +exponent. Larger exponents use larger values of k, the choice being +made to minimize the average number of multiplications that must +supplement the squaring. + + The modular multiplies and squares use either a simple division or +the REDC method by Montgomery (*note References::). REDC is a little +faster, essentially saving N single limb divisions in a fashion similar +to an exact remainder (*note Exact Remainder::). + + +File: gmp.info, Node: Root Extraction Algorithms, Next: Radix Conversion Algorithms, Prev: Powering Algorithms, Up: Algorithms + +16.5 Root Extraction Algorithms +=============================== + +* Menu: + +* Square Root Algorithm:: +* Nth Root Algorithm:: +* Perfect Square Algorithm:: +* Perfect Power Algorithm:: + + +File: gmp.info, Node: Square Root Algorithm, Next: Nth Root Algorithm, Prev: Root Extraction Algorithms, Up: Root Extraction Algorithms + +16.5.1 Square Root +------------------ + +Square roots are taken using the "Karatsuba Square Root" algorithm by +Paul Zimmermann (*note References::). + + An input n is split into four parts of k bits each, so with b=2^k we +have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so +that either the high or second highest bit is set. In GMP, k is kept +on a limb boundary and the input is left shifted (by an even number of +bits) to normalize. + + The square root of the high two parts is taken, by recursive +application of the algorithm (bottoming out in a one-limb Newton's +method), + + s1,r1 = sqrtrem (a3*b + a2) + + This is an approximation to the desired root and is extended by a +division to give s,r, + + q,u = divrem (r1*b + a1, 2*s1) + s = s1*b + q + r = u*b + a0 - q^2 + + The normalization requirement on a3 means at this point s is either +correct or 1 too big. r is negative in the latter case, so + + if r < 0 then + r = r + 2*s - 1 + s = s - 1 + + The algorithm is expressed in a divide and conquer form, but as +noted in the paper it can also be viewed as a discrete variant of +Newton's method, or as a variation on the schoolboy method (no longer +taught) for square roots two digits at a time. + + If the remainder r is not required then usually only a few high limbs +of r and u need to be calculated to determine whether an adjustment to +s is required. This optimization is not currently implemented. + + In the Karatsuba multiplication range this algorithm is +O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n +limbs. In the FFT multiplication range this grows to a bound of +O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the +Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. + + The algorithm does all its calculations in integers and the resulting +`mpn_sqrtrem' is used for both `mpz_sqrt' and `mpf_sqrt'. The extended +precision given by `mpf_sqrt_ui' is obtained by padding with zero limbs. + + +File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms + +16.5.2 Nth Root +--------------- + +Integer Nth roots are taken using Newton's method with the following +iteration, where A is the input and n is the root to be taken. + + 1 A + a[i+1] = - * ( --------- + (n-1)*a[i] ) + n a[i]^(n-1) + + The initial approximation a[1] is generated bitwise by successively +powering a trial root with or without new 1 bits, aiming to be just +above the true root. The iteration converges quadratically when +started from a good approximation. When n is large more initial bits +are needed to get good convergence. The current implementation is not +particularly well optimized. + + +File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms + +16.5.3 Perfect Square +--------------------- + +A significant fraction of non-squares can be quickly identified by +checking whether the input is a quadratic residue modulo small integers. + + `mpz_perfect_square_p' first tests the input mod 256, which means +just examining the low byte. Only 44 different values occur for +squares mod 256, so 82.8% of inputs can be immediately identified as +non-squares. + + On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, +for a total 99.25% of inputs identified as non-squares. On a 64-bit +system 97 is tested too, for a total 99.62%. + + These moduli are chosen because they're factors of 2^24-1 (or 2^48-1 +for 64-bits), and such a remainder can be quickly taken just using +additions (see `mpn_mod_34lsub1'). + + When nails are in use moduli are instead selected by the `gen-psqr.c' +program and applied with an `mpn_mod_1'. The same 2^24-1 or 2^48-1 +could be done with nails using some extra bit shifts, but this is not +currently implemented. + + In any case each modulus is applied to the `mpn_mod_34lsub1' or +`mpn_mod_1' remainder and a table lookup identifies non-squares. By +using a "modexact" style calculation, and suitably permuted tables, +just one multiply each is required, see the code for details. Moduli +are also combined to save operations, so long as the lookup tables +don't become too big. `gen-psqr.c' does all the pre-calculations. + + A square root must still be taken for any value that passes these +tests, to verify it's really a square and not one of the small fraction +of non-squares that get through (ie. a pseudo-square to all the tested +bases). + + Clearly more residue tests could be done, `mpz_perfect_square_p' only +uses a compact and efficient set. Big inputs would probably benefit +from more residue testing, small inputs might be better off with less. +The assumed distribution of squares versus non-squares in the input +would affect such considerations. + + +File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm, Up: Root Extraction Algorithms + +16.5.4 Perfect Power +-------------------- + +Detecting perfect powers is required by some factorization algorithms. +Currently `mpz_perfect_power_p' is implemented using repeated Nth root +extractions, though naturally only prime roots need to be considered. +(*Note Nth Root Algorithm::.) + + If a prime divisor p with multiplicity e can be found, then only +roots which are divisors of e need to be considered, much reducing the +work necessary. To this end divisibility by a set of small primes is +checked. + + +File: gmp.info, Node: Radix Conversion Algorithms, Next: Other Algorithms, Prev: Root Extraction Algorithms, Up: Algorithms + +16.6 Radix Conversion +===================== + +Radix conversions are less important than other algorithms. A program +dominated by conversions should probably use a different data +representation. + +* Menu: + +* Binary to Radix:: +* Radix to Binary:: + + +File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Conversion Algorithms, Up: Radix Conversion Algorithms + +16.6.1 Binary to Radix +---------------------- + +Conversions from binary to a power-of-2 radix use a simple and fast +O(N) bit extraction algorithm. + + Conversions from binary to other radices use one of two algorithms. +Sizes below `GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. +Repeated divisions by b^n are made, where b is the radix and n is the +biggest power that fits in a limb. But instead of simply using the +remainder r from such divisions, an extra divide step is done to give a +fractional limb representing r/b^n. The digits of r can then be +extracted using multiplications by b rather than divisions. Special +case code is provided for decimal, allowing multiplications by 10 to +optimize to shifts and adds. + + Above `GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is +used. For an input t, powers b^(n*2^i) of the radix are calculated, +until a power between t and sqrt(t) is reached. t is then divided by +that largest power, giving a quotient which is the digits above that +power, and a remainder which is those below. These two parts are in +turn divided by the second highest power, and so on recursively. When +a piece has been divided down to less than `GET_STR_DC_THRESHOLD' +limbs, the basecase algorithm described above is used. + + The advantage of this algorithm is that big divisions can make use +of the sub-quadratic divide and conquer division (*note Divide and +Conquer Division::), and big divisions tend to have less overheads than +lots of separate single limb divisions anyway. But in any case the +cost of calculating the powers b^(n*2^i) must first be overcome. + + `GET_STR_PRECOMPUTE_THRESHOLD' and `GET_STR_DC_THRESHOLD' represent +the same basic thing, the point where it becomes worth doing a big +division to cut the input in half. `GET_STR_PRECOMPUTE_THRESHOLD' +includes the cost of calculating the radix power required, whereas +`GET_STR_DC_THRESHOLD' assumes that's already available, which is the +case when recursing. + + Since the base case produces digits from least to most significant +but they want to be stored from most to least, it's necessary to +calculate in advance how many digits there will be, or at least be sure +not to underestimate that. For GMP the number of input bits is +multiplied by `chars_per_bit_exactly' from `mp_bases', rounding up. +The result is either correct or one too big. + + Examining some of the high bits of the input could increase the +chance of getting the exact number of digits, but an exact result every +time would not be practical, since in general the difference between +numbers 100... and 99... is only in the last few bits and the work to +identify 99... might well be almost as much as a full conversion. + + `mpf_get_str' doesn't currently use the algorithm described here, it +multiplies or divides by a power of b to move the radix point to the +just above the highest non-zero digit (or at worst one above that +location), then multiplies by b^n to bring out digits. This is O(N^2) +and is certainly not optimal. + + The r/b^n scheme described above for using multiplications to bring +out digits might be useful for more than a single limb. Some brief +experiments with it on the base case when recursing didn't give a +noticeable improvement, but perhaps that was only due to the +implementation. Something similar would work for the sub-quadratic +divisions too, though there would be the cost of calculating a bigger +radix power. + + Another possible improvement for the sub-quadratic part would be to +arrange for radix powers that balanced the sizes of quotient and +remainder produced, ie. the highest power would be an b^(n*k) +approximately equal to sqrt(t), not restricted to a 2^i factor. That +ought to smooth out a graph of times against sizes, but may or may not +be a net speedup. + + +File: gmp.info, Node: Radix to Binary, Prev: Binary to Radix, Up: Radix Conversion Algorithms + +16.6.2 Radix to Binary +---------------------- + +*This section needs to be rewritten, it currently describes the +algorithms used before GMP 4.3.* + + Conversions from a power-of-2 radix into binary use a simple and fast +O(N) bitwise concatenation algorithm. + + Conversions from other radices use one of two algorithms. Sizes +below `SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups +of n digits are converted to limbs, where n is the biggest power of the +base b which will fit in a limb, then those groups are accumulated into +the result by multiplying by b^n and adding. This saves +multi-precision operations, as per Knuth section 4.4 part E (*note +References::). Some special case code is provided for decimal, giving +the compiler a chance to optimize multiplications by 10. + + Above `SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is +used. First groups of n digits are converted into limbs. Then adjacent +limbs are combined into limb pairs with x*b^n+y, where x and y are the +limbs. Adjacent limb pairs are combined into quads similarly with +x*b^(2n)+y. This continues until a single block remains, that being +the result. + + The advantage of this method is that the multiplications for each x +are big blocks, allowing Karatsuba and higher algorithms to be used. +But the cost of calculating the powers b^(n*2^i) must be overcome. +`SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000 +digits, and on some processors much bigger still. + + `SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and +tuned for decimal), though it might be better based on a limb count, so +as to be independent of the base. But that sort of count isn't used by +the base case and so would need some sort of initial calculation or +estimate. + + The main reason `SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger +than the corresponding `GET_STR_PRECOMPUTE_THRESHOLD' is that +`mpn_mul_1' is much faster than `mpn_divrem_1' (often by a factor of 5, +or more). + + +File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms + +16.7 Other Algorithms +===================== + +* Menu: + +* Prime Testing Algorithm:: +* Factorial Algorithm:: +* Binomial Coefficients Algorithm:: +* Fibonacci Numbers Algorithm:: +* Lucas Numbers Algorithm:: +* Random Number Algorithms:: + + +File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Prev: Other Algorithms, Up: Other Algorithms + +16.7.1 Prime Testing +-------------------- + +The primality testing in `mpz_probab_prime_p' (*note Number Theoretic +Functions::) first does some trial division by small factors and then +uses the Miller-Rabin probabilistic primality testing algorithm, as +described in Knuth section 4.5.4 algorithm P (*note References::). + + For an odd input n, and with n = q*2^k+1 where q is odd, this +algorithm selects a random base x and tests whether x^q mod n is 1 or +-1, or an x^(q*2^j) mod n is 1, for 1<=j<=k. If so then n is probably +prime, if not then n is definitely composite. + + Any prime n will pass the test, but some composites do too. Such +composites are known as strong pseudoprimes to base x. No n is a +strong pseudoprime to more than 1/4 of all bases (see Knuth exercise +22), hence with x chosen at random there's no more than a 1/4 chance a +"probable prime" will in fact be composite. + + In fact strong pseudoprimes are quite rare, making the test much more +powerful than this analysis would suggest, but 1/4 is all that's proven +for an arbitrary n. + + +File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorithm, Prev: Prime Testing Algorithm, Up: Other Algorithms + +16.7.2 Factorial +---------------- + +Factorials are calculated by a combination of removal of twos, +powering, and binary splitting. The procedure can be best illustrated +with an example, + + 23! = 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23 + +has factors of two removed, + + 23! = 2^19.1.1.3.1.5.3.7.1.9.5.11.3.13.7.15.1.17.9.19.5.21.11.23 + +and the resulting terms collected up according to their multiplicity, + + 23! = 2^19.(3.5)^3.(7.9.11)^2.(13.15.17.19.21.23) + + Each sequence such as 13.15.17.19.21.23 is evaluated by splitting +into every second term, as for instance (13.17.21).(15.19.23), and the +same recursively on each half. This is implemented iteratively using +some bit twiddling. + + Such splitting is more efficient than repeated Nx1 multiplies since +it forms big multiplies, allowing Karatsuba and higher algorithms to be +used. And even below the Karatsuba threshold a big block of work can +be more efficient for the basecase algorithm. + + Splitting into subsequences of every second term keeps the resulting +products more nearly equal in size than would the simpler approach of +say taking the first half and second half of the sequence. Nearly +equal products are more efficient for the current multiply +implementation. + + +File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms + +16.7.3 Binomial Coefficients +---------------------------- + +Binomial coefficients C(n,k) are calculated by first arranging k <= n/2 +using C(n,k) = C(n,n-k) if necessary, and then evaluating the following +product simply from i=2 to i=k. + + k (n-k+i) + C(n,k) = (n-k+1) * prod ------- + i=2 i + + It's easy to show that each denominator i will divide the product so +far, so the exact division algorithm is used (*note Exact Division::). + + The numerators n-k+i and denominators i are first accumulated into +as many fit a limb, to save multi-precision operations, though for +`mpz_bin_ui' this applies only to the divisors, since n is an `mpz_t' +and n-k+i in general won't fit in a limb at all. + + +File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorithm, Prev: Binomial Coefficients Algorithm, Up: Other Algorithms + +16.7.4 Fibonacci Numbers +------------------------ + +The Fibonacci functions `mpz_fib_ui' and `mpz_fib2_ui' are designed for +calculating isolated F[n] or F[n],F[n-1] values efficiently. + + For small n, a table of single limb values in `__gmp_fib_table' is +used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up +to F[93]. For convenience the table starts at F[-1]. + + Beyond the table, values are generated with a binary powering +algorithm, calculating a pair F[n] and F[n-1] working from high to low +across the bits of n. The formulas used are + + F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k + F[2k-1] = F[k]^2 + F[k-1]^2 + + F[2k] = F[2k+1] - F[2k-1] + + At each step, k is the high b bits of n. If the next bit of n is 0 +then F[2k],F[2k-1] is used, or if it's a 1 then F[2k+1],F[2k] is used, +and the process repeated until all bits of n are incorporated. Notice +these formulas require just two squares per bit of n. + + It'd be possible to handle the first few n above the single limb +table with simple additions, using the defining Fibonacci recurrence +F[k+1]=F[k]+F[k-1], but this is not done since it usually turns out to +be faster for only about 10 or 20 values of n, and including a block of +code for just those doesn't seem worthwhile. If they really mattered +it'd be better to extend the data table. + + Using a table avoids lots of calculations on small numbers, and +makes small n go fast. A bigger table would make more small n go fast, +it's just a question of balancing size against desired speed. For GMP +the code is kept compact, with the emphasis primarily on a good +powering algorithm. + + `mpz_fib2_ui' returns both F[n] and F[n-1], but `mpz_fib_ui' is only +interested in F[n]. In this case the last step of the algorithm can +become one multiply instead of two squares. One of the following two +formulas is used, according as n is odd or even. + + F[2k] = F[k]*(F[k]+2F[k-1]) + + F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k + + F[2k+1] here is the same as above, just rearranged to be a multiply. +For interest, the 2*(-1)^k term both here and above can be applied +just to the low limb of the calculation, without a carry or borrow into +further limbs, which saves some code size. See comments with +`mpz_fib_ui' and the internal `mpn_fib2_ui' for how this is done. + + +File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms + +16.7.5 Lucas Numbers +-------------------- + +`mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of +Fibonacci numbers with the following simple formulas. + + L[k] = F[k] + 2*F[k-1] + L[k-1] = 2*F[k] - F[k-1] + + `mpz_lucnum_ui' is only interested in L[n], and some work can be +saved. Trailing zero bits on n can be handled with a single square +each. + + L[2k] = L[k]^2 - 2*(-1)^k + + And the lowest 1 bit can be handled with one multiply of a pair of +Fibonacci numbers, similar to what `mpz_fib_ui' does. + + L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k + + +File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm, Up: Other Algorithms + +16.7.6 Random Numbers +--------------------- + +For the `urandomb' functions, random numbers are generated simply by +concatenating bits produced by the generator. As long as the generator +has good randomness properties this will produce well-distributed N bit +numbers. + + For the `urandomm' functions, random numbers in a range 0<=R48 bit pieces is convenient. With +some care though six 21x32->53 bit products can be used, if one of the +lower two 21-bit pieces also uses the sign bit. + + For the `mpn_mul_1' family of functions on a 64-bit machine, the +invariant single limb is split at the start, into 3 or 4 pieces. +Inside the loop, the bignum operand is split into 32-bit pieces. Fast +conversion of these unsigned 32-bit pieces to floating point is highly +machine-dependent. In some cases, reading the data into the integer +unit, zero-extending to 64-bits, then transferring to the floating +point unit back via memory is the only option. + + Converting partial products back to 64-bit limbs is usually best +done as a signed conversion. Since all values are smaller than 2^53, +signed and unsigned are the same, but most processors lack unsigned +conversions. + + + + Here is a diagram showing 16x32 bit products for an `mpn_mul_1' or +`mpn_addmul_1' with a 64-bit limb. The single limb operand V is split +into four 16-bit parts. The multi-limb operand U is split in the loop +into two 32-bit parts. + + +---+---+---+---+ + |v48|v32|v16|v00| V operand + +---+---+---+---+ + + +-------+---+---+ + x | u32 | u00 | U operand (one limb) + +---------------+ + + --------------------------------- + + +-----------+ + | u00 x v00 | p00 48-bit products + +-----------+ + +-----------+ + | u00 x v16 | p16 + +-----------+ + +-----------+ + | u00 x v32 | p32 + +-----------+ + +-----------+ + | u00 x v48 | p48 + +-----------+ + +-----------+ + | u32 x v00 | r32 + +-----------+ + +-----------+ + | u32 x v16 | r48 + +-----------+ + +-----------+ + | u32 x v32 | r64 + +-----------+ + +-----------+ + | u32 x v48 | r80 + +-----------+ + + p32 and r32 can be summed using floating-point addition, and +likewise p48 and r48. p00 and p16 can be summed with r64 and r80 from +the previous iteration. + + For each loop then, four 49-bit quantities are transferred to the +integer unit, aligned as follows, + + |-----64bits----|-----64bits----| + +------------+ + | p00 + r64' | i00 + +------------+ + +------------+ + | p16 + r80' | i16 + +------------+ + +------------+ + | p32 + r32 | i32 + +------------+ + +------------+ + | p48 + r48 | i48 + +------------+ + + The challenge then is to sum these efficiently and add in a carry +limb, generating a low 64-bit result limb and a high 33-bit carry limb +(i48 extends 33 bits into the high half). + + +File: gmp.info, Node: Assembly SIMD Instructions, Next: Assembly Software Pipelining, Prev: Assembly Floating Point, Up: Assembly Coding + +16.8.7 SIMD Instructions +------------------------ + +The single-instruction multiple-data support in current microprocessors +is aimed at signal processing algorithms where each data point can be +treated more or less independently. There's generally not much support +for propagating the sort of carries that arise in GMP. + + SIMD multiplications of say four 16x16 bit multiplies only do as much +work as one 32x32 from GMP's point of view, and need some shifts and +adds besides. But of course if say the SIMD form is fully pipelined +and uses less instruction decoding then it may still be worthwhile. + + On the x86 chips, MMX has so far found a use in `mpn_rshift' and +`mpn_lshift', and is used in a special case for 16-bit multipliers in +the P55 `mpn_mul_1'. SSE2 is used for Pentium 4 `mpn_mul_1', +`mpn_addmul_1', and `mpn_submul_1'. + + +File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding + +16.8.8 Software Pipelining +-------------------------- + +Software pipelining consists of scheduling instructions around the +branch point in a loop. For example a loop might issue a load not for +use in the present iteration but the next, thereby allowing extra +cycles for the data to arrive from memory. + + Naturally this is wanted only when doing things like loads or +multiplies that take several cycles to complete, and only where a CPU +has multiple functional units so that other work can be done in the +meantime. + + A pipeline with several stages will have a data value in progress at +each stage and each loop iteration moves them along one stage. This is +like juggling. + + If the latency of some instruction is greater than the loop time +then it will be necessary to unroll, so one register has a result ready +to use while another (or multiple others) are still in progress. +(*note Assembly Loop Unrolling::). + + +File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding + +16.8.9 Loop Unrolling +--------------------- + +Loop unrolling consists of replicating code so that several limbs are +processed in each loop. At a minimum this reduces loop overheads by a +corresponding factor, but it can also allow better register usage, for +example alternately using one register combination and then another. +Judicious use of `m4' macros can help avoid lots of duplication in the +source code. + + Any amount of unrolling can be handled with a loop counter that's +decremented by N each time, stopping when the remaining count is less +than the further N the loop will process. Or by subtracting N at the +start, the termination condition becomes when the counter C is less +than 0 (and the count of remaining limbs is C+N). + + Alternately for a power of 2 unroll the loop count and remainder can +be established with a shift and mask. This is convenient if also +making a computed jump into the middle of a large loop. + + The limbs not a multiple of the unrolling can be handled in various +ways, for example + + * A simple loop at the end (or the start) to process the excess. + Care will be wanted that it isn't too much slower than the + unrolled part. + + * A set of binary tests, for example after an 8-limb unrolling, test + for 4 more limbs to process, then a further 2 more or not, and + finally 1 more or not. This will probably take more code space + than a simple loop. + + * A `switch' statement, providing separate code for each possible + excess, for example an 8-limb unrolling would have separate code + for 0 remaining, 1 remaining, etc, up to 7 remaining. This might + take a lot of code, but may be the best way to optimize all cases + in combination with a deep pipelined loop. + + * A computed jump into the middle of the loop, thus making the first + iteration handle the excess. This should make times smoothly + increase with size, which is attractive, but setups for the jump + and adjustments for pointers can be tricky and could become quite + difficult in combination with deep pipelining. + + +File: gmp.info, Node: Assembly Writing Guide, Prev: Assembly Loop Unrolling, Up: Assembly Coding + +16.8.10 Writing Guide +--------------------- + +This is a guide to writing software pipelined loops for processing limb +vectors in assembly. + + First determine the algorithm and which instructions are needed. +Code it without unrolling or scheduling, to make sure it works. On a +3-operand CPU try to write each new value to a new register, this will +greatly simplify later steps. + + Then note for each instruction the functional unit and/or issue port +requirements. If an instruction can use either of two units, like U0 +or U1 then make a category "U0/U1". Count the total using each unit +(or combined unit), and count all instructions. + + Figure out from those counts the best possible loop time. The goal +will be to find a perfect schedule where instruction latencies are +completely hidden. The total instruction count might be the limiting +factor, or perhaps a particular functional unit. It might be possible +to tweak the instructions to help the limiting factor. + + Suppose the loop time is N, then make N issue buckets, with the +final loop branch at the end of the last. Now fill the buckets with +dummy instructions using the functional units desired. Run this to +make sure the intended speed is reached. + + Now replace the dummy instructions with the real instructions from +the slow but correct loop you started with. The first will typically +be a load instruction. Then the instruction using that value is placed +in a bucket an appropriate distance down. Run the loop again, to check +it still runs at target speed. + + Keep placing instructions, frequently measuring the loop. After a +few you will need to wrap around from the last bucket back to the top +of the loop. If you used the new-register for new-value strategy above +then there will be no register conflicts. If not then take care not to +clobber something already in use. Changing registers at this time is +very error prone. + + The loop will overlap two or more of the original loop iterations, +and the computation of one vector element result will be started in one +iteration of the new loop, and completed one or several iterations +later. + + The final step is to create feed-in and wind-down code for the loop. +A good way to do this is to make a copy (or copies) of the loop at the +start and delete those instructions which don't have valid antecedents, +and at the end replicate and delete those whose results are unwanted +(including any further loads). + + The loop will have a minimum number of limbs loaded and processed, +so the feed-in code must test if the request size is smaller and skip +either to a suitable part of the wind-down or to special code for small +sizes. + + +File: gmp.info, Node: Internals, Next: Contributors, Prev: Algorithms, Up: Top + +17 Internals +************ + +*This chapter is provided only for informational purposes and the +various internals described here may change in future GMP releases. +Applications expecting to be compatible with future releases should use +only the documented interfaces described in previous chapters.* + +* Menu: + +* Integer Internals:: +* Rational Internals:: +* Float Internals:: +* Raw Output Internals:: +* C++ Interface Internals:: + + +File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Internals, Up: Internals + +17.1 Integer Internals +====================== + +`mpz_t' variables represent integers using sign and magnitude, in space +dynamically allocated and reallocated. The fields are as follows. + +`_mp_size' + The number of limbs, or the negative of that when representing a + negative integer. Zero is represented by `_mp_size' set to zero, + in which case the `_mp_d' data is unused. + +`_mp_d' + A pointer to an array of limbs which is the magnitude. These are + stored "little endian" as per the `mpn' functions, so `_mp_d[0]' + is the least significant limb and `_mp_d[ABS(_mp_size)-1]' is the + most significant. Whenever `_mp_size' is non-zero, the most + significant limb is non-zero. + + Currently there's always at least one limb allocated, so for + instance `mpz_set_ui' never needs to reallocate, and `mpz_get_ui' + can fetch `_mp_d[0]' unconditionally (though its value is then + only wanted if `_mp_size' is non-zero). + +`_mp_alloc' + `_mp_alloc' is the number of limbs currently allocated at `_mp_d', + and naturally `_mp_alloc >= ABS(_mp_size)'. When an `mpz' routine + is about to (or might be about to) increase `_mp_size', it checks + `_mp_alloc' to see whether there's enough space, and reallocates + if not. `MPZ_REALLOC' is generally used for this. + + The various bitwise logical functions like `mpz_and' behave as if +negative values were twos complement. But sign and magnitude is always +used internally, and necessary adjustments are made during the +calculations. Sometimes this isn't pretty, but sign and magnitude are +best for other routines. + + Some internal temporary variables are setup with `MPZ_TMP_INIT' and +these have `_mp_d' space obtained from `TMP_ALLOC' rather than the +memory allocation functions. Care is taken to ensure that these are +big enough that no reallocation is necessary (since it would have +unpredictable consequences). + + `_mp_size' and `_mp_alloc' are `int', although `mp_size_t' is +usually a `long'. This is done to make the fields just 32 bits on some +64 bits systems, thereby saving a few bytes of data space but still +providing plenty of range. + + +File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals + +17.2 Rational Internals +======================= + +`mpq_t' variables represent rationals using an `mpz_t' numerator and +denominator (*note Integer Internals::). + + The canonical form adopted is denominator positive (and non-zero), +no common factors between numerator and denominator, and zero uniquely +represented as 0/1. + + It's believed that casting out common factors at each stage of a +calculation is best in general. A GCD is an O(N^2) operation so it's +better to do a few small ones immediately than to delay and have to do +a big one later. Knowing the numerator and denominator have no common +factors can be used for example in `mpq_mul' to make only two cross +GCDs necessary, not four. + + This general approach to common factors is badly sub-optimal in the +presence of simple factorizations or little prospect for cancellation, +but GMP has no way to know when this will occur. As per *Note +Efficiency::, that's left to applications. The `mpq_t' framework might +still suit, with `mpq_numref' and `mpq_denref' for direct access to the +numerator and denominator, or of course `mpz_t' variables can be used +directly. + + +File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rational Internals, Up: Internals + +17.3 Float Internals +==================== + +Efficient calculation is the primary aim of GMP floats and the use of +whole limbs and simple rounding facilitates this. + + `mpf_t' floats have a variable precision mantissa and a single +machine word signed exponent. The mantissa is represented using sign +and magnitude. + + most least + significant significant + limb limb + + _mp_d + |---- _mp_exp ---> | + _____ _____ _____ _____ _____ + |_____|_____|_____|_____|_____| + . <------------ radix point + + <-------- _mp_size ---------> + +The fields are as follows. + +`_mp_size' + The number of limbs currently in use, or the negative of that when + representing a negative value. Zero is represented by `_mp_size' + and `_mp_exp' both set to zero, and in that case the `_mp_d' data + is unused. (In the future `_mp_exp' might be undefined when + representing zero.) + +`_mp_prec' + The precision of the mantissa, in limbs. In any calculation the + aim is to produce `_mp_prec' limbs of result (the most significant + being non-zero). + +`_mp_d' + A pointer to the array of limbs which is the absolute value of the + mantissa. These are stored "little endian" as per the `mpn' + functions, so `_mp_d[0]' is the least significant limb and + `_mp_d[ABS(_mp_size)-1]' the most significant. + + The most significant limb is always non-zero, but there are no + other restrictions on its value, in particular the highest 1 bit + can be anywhere within the limb. + + `_mp_prec+1' limbs are allocated to `_mp_d', the extra limb being + for convenience (see below). There are no reallocations during a + calculation, only in a change of precision with `mpf_set_prec'. + +`_mp_exp' + The exponent, in limbs, determining the location of the implied + radix point. Zero means the radix point is just above the most + significant limb. Positive values mean a radix point offset + towards the lower limbs and hence a value >= 1, as for example in + the diagram above. Negative exponents mean a radix point further + above the highest limb. + + Naturally the exponent can be any value, it doesn't have to fall + within the limbs as the diagram shows, it can be a long way above + or a long way below. Limbs other than those included in the + `{_mp_d,_mp_size}' data are treated as zero. + + The `_mp_size' and `_mp_prec' fields are `int', although the +`mp_size_t' type is usually a `long'. The `_mp_exp' field is usually +`long'. This is done to make some fields just 32 bits on some 64 bits +systems, thereby saving a few bytes of data space but still providing +plenty of precision and a very large range. + + +The following various points should be noted. + +Low Zeros + The least significant limbs `_mp_d[0]' etc can be zero, though + such low zeros can always be ignored. Routines likely to produce + low zeros check and avoid them to save time in subsequent + calculations, but for most routines they're quite unlikely and + aren't checked. + +Mantissa Size Range + The `_mp_size' count of limbs in use can be less than `_mp_prec' if + the value can be represented in less. This means low precision + values or small integers stored in a high precision `mpf_t' can + still be operated on efficiently. + + `_mp_size' can also be greater than `_mp_prec'. Firstly a value is + allowed to use all of the `_mp_prec+1' limbs available at `_mp_d', + and secondly when `mpf_set_prec_raw' lowers `_mp_prec' it leaves + `_mp_size' unchanged and so the size can be arbitrarily bigger than + `_mp_prec'. + +Rounding + All rounding is done on limb boundaries. Calculating `_mp_prec' + limbs with the high non-zero will ensure the application requested + minimum precision is obtained. + + The use of simple "trunc" rounding towards zero is efficient, + since there's no need to examine extra limbs and increment or + decrement. + +Bit Shifts + Since the exponent is in limbs, there are no bit shifts in basic + operations like `mpf_add' and `mpf_mul'. When differing exponents + are encountered all that's needed is to adjust pointers to line up + the relevant limbs. + + Of course `mpf_mul_2exp' and `mpf_div_2exp' will require bit + shifts, but the choice is between an exponent in limbs which + requires shifts there, or one in bits which requires them almost + everywhere else. + +Use of `_mp_prec+1' Limbs + The extra limb on `_mp_d' (`_mp_prec+1' rather than just + `_mp_prec') helps when an `mpf' routine might get a carry from its + operation. `mpf_add' for instance will do an `mpn_add' of + `_mp_prec' limbs. If there's no carry then that's the result, but + if there is a carry then it's stored in the extra limb of space and + `_mp_size' becomes `_mp_prec+1'. + + Whenever `_mp_prec+1' limbs are held in a variable, the low limb + is not needed for the intended precision, only the `_mp_prec' high + limbs. But zeroing it out or moving the rest down is unnecessary. + Subsequent routines reading the value will simply take the high + limbs they need, and this will be `_mp_prec' if their target has + that same precision. This is no more than a pointer adjustment, + and must be checked anyway since the destination precision can be + different from the sources. + + Copy functions like `mpf_set' will retain a full `_mp_prec+1' limbs + if available. This ensures that a variable which has `_mp_size' + equal to `_mp_prec+1' will get its full exact value copied. + Strictly speaking this is unnecessary since only `_mp_prec' limbs + are needed for the application's requested precision, but it's + considered that an `mpf_set' from one variable into another of the + same precision ought to produce an exact copy. + +Application Precisions + `__GMPF_BITS_TO_PREC' converts an application requested precision + to an `_mp_prec'. The value in bits is rounded up to a whole limb + then an extra limb is added since the most significant limb of + `_mp_d' is only non-zero and therefore might contain only one bit. + + `__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the + extra limb from `_mp_prec' before converting to bits. The net + effect of reading back with `mpf_get_prec' is simply the precision + rounded up to a multiple of `mp_bits_per_limb'. + + Note that the extra limb added here for the high only being + non-zero is in addition to the extra limb allocated to `_mp_d'. + For example with a 32-bit limb, an application request for 250 + bits will be rounded up to 8 limbs, then an extra added for the + high being only non-zero, giving an `_mp_prec' of 9. `_mp_d' then + gets 10 limbs allocated. Reading back with `mpf_get_prec' will + take `_mp_prec' subtract 1 limb and multiply by 32, giving 256 + bits. + + Strictly speaking, the fact the high limb has at least one bit + means that a float with, say, 3 limbs of 32-bits each will be + holding at least 65 bits, but for the purposes of `mpf_t' it's + considered simply to be 64 bits, a nice multiple of the limb size. + + +File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Prev: Float Internals, Up: Internals + +17.4 Raw Output Internals +========================= + +`mpz_out_raw' uses the following format. + + +------+------------------------+ + | size | data bytes | + +------+------------------------+ + + The size is 4 bytes written most significant byte first, being the +number of subsequent data bytes, or the twos complement negative of +that when a negative integer is represented. The data bytes are the +absolute value of the integer, written most significant byte first. + + The most significant data byte is always non-zero, so the output is +the same on all systems, irrespective of limb size. + + In GMP 1, leading zero bytes were written to pad the data bytes to a +multiple of the limb size. `mpz_inp_raw' will still accept this, for +compatibility. + + The use of "big endian" for both the size and data fields is +deliberate, it makes the data easy to read in a hex dump of a file. +Unfortunately it also means that the limb data must be reversed when +reading or writing, so neither a big endian nor little endian system +can just read and write `_mp_d'. + + +File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals + +17.5 C++ Interface Internals +============================ + +A system of expression templates is used to ensure something like +`a=b+c' turns into a simple call to `mpz_add' etc. For `mpf_class' the +scheme also ensures the precision of the final destination is used for +any temporaries within a statement like `f=w*x+y*z'. These are +important features which a naive implementation cannot provide. + + A simplified description of the scheme follows. The true scheme is +complicated by the fact that expressions have different return types. +For detailed information, refer to the source code. + + To perform an operation, say, addition, we first define a "function +object" evaluating it, + + struct __gmp_binary_plus + { + static void eval(mpf_t f, mpf_t g, mpf_t h) { mpf_add(f, g, h); } + }; + +And an "additive expression" object, + + __gmp_expr<__gmp_binary_expr > + operator+(const mpf_class &f, const mpf_class &g) + { + return __gmp_expr + <__gmp_binary_expr >(f, g); + } + + The seemingly redundant `__gmp_expr<__gmp_binary_expr<...>>' is used +to encapsulate any possible kind of expression into a single template +type. In fact even `mpf_class' etc are `typedef' specializations of +`__gmp_expr'. + + Next we define assignment of `__gmp_expr' to `mpf_class'. + + template + mpf_class & mpf_class::operator=(const __gmp_expr &expr) + { + expr.eval(this->get_mpf_t(), this->precision()); + return *this; + } + + template + void __gmp_expr<__gmp_binary_expr >::eval + (mpf_t f, mp_bitcnt_t precision) + { + Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); + } + + where `expr.val1' and `expr.val2' are references to the expression's +operands (here `expr' is the `__gmp_binary_expr' stored within the +`__gmp_expr'). + + This way, the expression is actually evaluated only at the time of +assignment, when the required precision (that of `f') is known. +Furthermore the target `mpf_t' is now available, thus we can call +`mpf_add' directly with `f' as the output argument. + + Compound expressions are handled by defining operators taking +subexpressions as their arguments, like this: + + template + __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > + operator+(const __gmp_expr &expr1, const __gmp_expr &expr2) + { + return __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > + (expr1, expr2); + } + + And the corresponding specializations of `__gmp_expr::eval': + + template + void __gmp_expr + <__gmp_binary_expr<__gmp_expr, __gmp_expr, Op> >::eval + (mpf_t f, mp_bitcnt_t precision) + { + // declare two temporaries + mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); + Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); + } + + The expression is thus recursively evaluated to any level of +complexity and all subexpressions are evaluated to the precision of `f'. + + +File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top + +Appendix A Contributors +*********************** + +Torbjo"rn Granlund wrote the original GMP library and is still the main +developer. Code not explicitly attributed to others, was contributed by +Torbjo"rn. Several other individuals and organizations have contributed +GMP. Here is a list in chronological order on first contribution: + + Gunnar Sjo"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 +Scho"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 Torbjo"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 Mo"ller wrote the sub-quadratic GCD and extended GCD code, the +quadratic Hensel division code, and (with Torbjo"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. + + 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 and +mpn_mullo_n. Marco also wrote the functions mpn_invert and +mpn_invertappr. + + 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'. + + Martin Boij wrote `mpn_perfect_power_p'. + + (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, were +supported in part by the ESPRIT-BRA (Basic Research Activities) 6846 +project POSSO (POlynomial System SOlving). + + The development of GMP 2, 3, and 4 was supported in part by the IDA +Center for Computing Sciences. + + Thanks go to Hans Thorsen for donating an SGI system for the GMP +test system environment. + + +File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top + +Appendix B References +********************* + +B.1 Books +========= + + * Jonathan M. Borwein and Peter B. Borwein, "Pi and the AGM: A Study + in Analytic Number Theory and Computational Complexity", Wiley, + 1998. + + * Richard Crandall and Carl Pomerance, "Prime Numbers: A + Computational Perspective", 2nd edition, Springer-Verlag, 2005. + `http://math.dartmouth.edu/~carlp/' + + * Henri Cohen, "A Course in Computational Algebraic Number Theory", + Graduate Texts in Mathematics number 138, Springer-Verlag, 1993. + `http://www.math.u-bordeaux.fr/~cohen/' + + * Donald E. Knuth, "The Art of Computer Programming", volume 2, + "Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998. + `http://www-cs-faculty.stanford.edu/~knuth/taocp.html' + + * John D. Lipson, "Elements of Algebra and Algebraic Computing", The + Benjamin Cummings Publishing Company Inc, 1981. + + * Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, + "Handbook of Applied Cryptography", + `http://www.cacr.math.uwaterloo.ca/hac/' + + * Richard M. Stallman and the GCC Developer Community, "Using the + GNU Compiler Collection", Free Software Foundation, 2008, + available online `http://gcc.gnu.org/onlinedocs/', and in the GCC + package `ftp://ftp.gnu.org/gnu/gcc/' + +B.2 Papers +========== + + * Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP + Square Root", Journal of Automated Reasoning, volume 29, 2002, pp. + 225-252. Also available online as INRIA Research Report 4475, + June 2001, `http://www.inria.fr/rrrt/rr-4475.html' + + * Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division", + Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, + `http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022' + + * Torbjo"rn Granlund and Peter L. Montgomery, "Division by Invariant + Integers using Multiplication", in Proceedings of the SIGPLAN + PLDI'94 Conference, June 1994. Also available + `ftp://ftp.cwi.nl/pub/pmontgom/divcnst.psa4.gz' (and .psl.gz). + + * Niels Mo"ller and Torbjo"rn Granlund, "Improved division by + invariant integers", to appear. + + * Torbjo"rn Granlund and Niels Mo"ller, "Division of integers large + and small", to appear. + + * Tudor Jebelean, "An algorithm for exact division", Journal of + Symbolic Computation, volume 15, 1993, pp. 169-180. Research + report version available + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz' + + * Tudor Jebelean, "Exact Division with Karatsuba Complexity - + Extended Abstract", RISC-Linz technical report 96-31, + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz' + + * Tudor Jebelean, "Practical Integer Division with Karatsuba + Complexity", ISSAC 97, pp. 339-341. Technical report available + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz' + + * Tudor Jebelean, "A Generalization of the Binary GCD Algorithm", + ISSAC 93, pp. 111-116. Technical report version available + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz' + + * Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for + Finding the GCD of Long Integers", Journal of Symbolic + Computation, volume 19, 1995, pp. 145-157. Technical report + version also available + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz' + + * Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer + Division", Journal of Symbolic Computation, volume 21, 1996, pp. + 441-455. Early technical report version also available + `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz' + + * Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A + 623-dimensionally equidistributed uniform pseudorandom number + generator", ACM Transactions on Modelling and Computer Simulation, + volume 8, January 1998, pp. 3-30. Available online + `http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz' + (or .pdf) + + * R. Moenck and A. Borodin, "Fast Modular Transforms via Division", + Proceedings of the 13th Annual IEEE Symposium on Switching and + Automata Theory, October 1972, pp. 90-96. Reprinted as "Fast + Modular Transforms", Journal of Computer and System Sciences, + volume 8, number 3, June 1974, pp. 366-386. + + * Niels Mo"ller, "On Scho"nhage's algorithm and subquadratic integer + GCD computation", in Mathematics of Computation, volume 77, + January 2008, pp. 589-607. + + * Peter L. Montgomery, "Modular Multiplication Without Trial + Division", in Mathematics of Computation, volume 44, number 170, + April 1985. + + * Arnold Scho"nhage and Volker Strassen, "Schnelle Multiplikation + grosser Zahlen", Computing 7, 1971, pp. 281-292. + + * Kenneth Weber, "The accelerated integer GCD algorithm", ACM + Transactions on Mathematical Software, volume 21, number 1, March + 1995, pp. 111-122. + + * Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report + 3805, November 1999, `http://www.inria.fr/rrrt/rr-3805.html' + + * Paul Zimmermann, "A Proof of GMP Fast Division and Square Root + Implementations", + `http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz' + + * Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11: + IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271. + Reprinted as "More on Multiplying and Squaring Large Integers", + IEEE Transactions on Computers, volume 43, number 8, August 1994, + pp. 899-908. + + +File: gmp.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top + +Appendix C GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top + +Concept Index +************* + +[index] +* Menu: + +* #include: Headers and Libraries. + (line 6) +* --build: Build Options. (line 52) +* --disable-fft: Build Options. (line 317) +* --disable-shared: Build Options. (line 45) +* --disable-static: Build Options. (line 45) +* --enable-alloca: Build Options. (line 278) +* --enable-assert: Build Options. (line 327) +* --enable-cxx: Build Options. (line 230) +* --enable-fat: Build Options. (line 164) +* --enable-mpbsd: Build Options. (line 322) +* --enable-profiling <1>: Profiling. (line 6) +* --enable-profiling: Build Options. (line 331) +* --exec-prefix: Build Options. (line 32) +* --host: Build Options. (line 66) +* --prefix: Build Options. (line 32) +* -finstrument-functions: Profiling. (line 66) +* 2exp functions: Efficiency. (line 43) +* 68000: Notes for Particular Systems. + (line 80) +* 80x86: Notes for Particular Systems. + (line 126) +* ABI <1>: Build Options. (line 171) +* ABI: ABI and ISA. (line 6) +* About this manual: Introduction to GMP. (line 58) +* AC_CHECK_LIB: Autoconf. (line 11) +* AIX <1>: ABI and ISA. (line 184) +* AIX <2>: Notes for Particular Systems. + (line 7) +* AIX: ABI and ISA. (line 169) +* Algorithms: Algorithms. (line 6) +* alloca: Build Options. (line 278) +* Allocation of memory: Custom Allocation. (line 6) +* AMD64: ABI and ISA. (line 44) +* Anonymous FTP of latest version: Introduction to GMP. (line 38) +* Application Binary Interface: ABI and ISA. (line 6) +* Arithmetic functions <1>: Float Arithmetic. (line 6) +* Arithmetic functions <2>: Integer Arithmetic. (line 6) +* Arithmetic functions: Rational Arithmetic. (line 6) +* ARM: Notes for Particular Systems. + (line 20) +* Assembly cache handling: Assembly Cache Handling. + (line 6) +* Assembly carry propagation: Assembly Carry Propagation. + (line 6) +* Assembly code organisation: Assembly Code Organisation. + (line 6) +* Assembly coding: Assembly Coding. (line 6) +* Assembly floating Point: Assembly Floating Point. + (line 6) +* Assembly loop unrolling: Assembly Loop Unrolling. + (line 6) +* Assembly SIMD: Assembly SIMD Instructions. + (line 6) +* Assembly software pipelining: Assembly Software Pipelining. + (line 6) +* Assembly writing guide: Assembly Writing Guide. + (line 6) +* Assertion checking <1>: Debugging. (line 79) +* Assertion checking: Build Options. (line 327) +* Assignment functions <1>: Assigning Floats. (line 6) +* Assignment functions <2>: Initializing Rationals. + (line 6) +* Assignment functions <3>: Simultaneous Integer Init & Assign. + (line 6) +* Assignment functions <4>: Simultaneous Float Init & Assign. + (line 6) +* Assignment functions: Assigning Integers. (line 6) +* Autoconf: Autoconf. (line 6) +* Basics: GMP Basics. (line 6) +* Berkeley MP compatible functions <1>: Build Options. (line 322) +* Berkeley MP compatible functions: BSD Compatible Functions. + (line 6) +* Binomial coefficient algorithm: Binomial Coefficients Algorithm. + (line 6) +* Binomial coefficient functions: Number Theoretic Functions. + (line 100) +* Binutils strip: Known Build Problems. + (line 28) +* Bit manipulation functions: Integer Logic and Bit Fiddling. + (line 6) +* Bit scanning functions: Integer Logic and Bit Fiddling. + (line 38) +* Bit shift left: Integer Arithmetic. (line 35) +* Bit shift right: Integer Division. (line 53) +* Bits per limb: Useful Macros and Constants. + (line 7) +* BSD MP compatible functions <1>: Build Options. (line 322) +* BSD MP compatible functions: BSD Compatible Functions. + (line 6) +* Bug reporting: Reporting Bugs. (line 6) +* Build directory: Build Options. (line 19) +* Build notes for binary packaging: Notes for Package Builds. + (line 6) +* Build notes for particular systems: Notes for Particular Systems. + (line 6) +* Build options: Build Options. (line 6) +* Build problems known: Known Build Problems. + (line 6) +* Build system: Build Options. (line 52) +* Building GMP: Installing GMP. (line 6) +* Bus error: Debugging. (line 7) +* C compiler: Build Options. (line 182) +* C++ compiler: Build Options. (line 254) +* C++ interface: C++ Class Interface. (line 6) +* C++ interface internals: C++ Interface Internals. + (line 6) +* C++ istream input: C++ Formatted Input. (line 6) +* C++ ostream output: C++ Formatted Output. + (line 6) +* C++ support: Build Options. (line 230) +* CC: Build Options. (line 182) +* CC_FOR_BUILD: Build Options. (line 217) +* CFLAGS: Build Options. (line 182) +* Checker: Debugging. (line 115) +* checkergcc: Debugging. (line 122) +* Code organisation: Assembly Code Organisation. + (line 6) +* Compaq C++: Notes for Particular Systems. + (line 25) +* Comparison functions <1>: Integer Comparisons. (line 6) +* Comparison functions <2>: Comparing Rationals. (line 6) +* Comparison functions: Float Comparison. (line 6) +* Compatibility with older versions: Compatibility with older versions. + (line 6) +* Conditions for copying GNU MP: Copying. (line 6) +* Configuring GMP: Installing GMP. (line 6) +* Congruence algorithm: Exact Remainder. (line 29) +* Congruence functions: Integer Division. (line 124) +* Constants: Useful Macros and Constants. + (line 6) +* Contributors: Contributors. (line 6) +* Conventions for parameters: Parameter Conventions. + (line 6) +* Conventions for variables: Variable Conventions. + (line 6) +* Conversion functions <1>: Converting Integers. (line 6) +* Conversion functions <2>: Converting Floats. (line 6) +* Conversion functions: Rational Conversions. + (line 6) +* Copying conditions: Copying. (line 6) +* CPPFLAGS: Build Options. (line 208) +* CPU types <1>: Introduction to GMP. (line 24) +* CPU types: Build Options. (line 108) +* Cross compiling: Build Options. (line 66) +* Custom allocation: Custom Allocation. (line 6) +* CXX: Build Options. (line 254) +* CXXFLAGS: Build Options. (line 254) +* Cygwin: Notes for Particular Systems. + (line 43) +* Darwin: Known Build Problems. + (line 51) +* Debugging: Debugging. (line 6) +* Demonstration programs: Demonstration Programs. + (line 6) +* Digits in an integer: Miscellaneous Integer Functions. + (line 23) +* Divisibility algorithm: Exact Remainder. (line 29) +* Divisibility functions: Integer Division. (line 124) +* Divisibility testing: Efficiency. (line 91) +* Division algorithms: Division Algorithms. (line 6) +* Division functions <1>: Rational Arithmetic. (line 22) +* Division functions <2>: Integer Division. (line 6) +* Division functions: Float Arithmetic. (line 33) +* DJGPP <1>: Notes for Particular Systems. + (line 43) +* DJGPP: Known Build Problems. + (line 18) +* DLLs: Notes for Particular Systems. + (line 56) +* DocBook: Build Options. (line 354) +* Documentation formats: Build Options. (line 347) +* Documentation license: GNU Free Documentation License. + (line 6) +* DVI: Build Options. (line 350) +* Efficiency: Efficiency. (line 6) +* Emacs: Emacs. (line 6) +* Exact division functions: Integer Division. (line 102) +* Exact remainder: Exact Remainder. (line 6) +* Example programs: Demonstration Programs. + (line 6) +* Exec prefix: Build Options. (line 32) +* Execution profiling <1>: Profiling. (line 6) +* Execution profiling: Build Options. (line 331) +* Exponentiation functions <1>: Integer Exponentiation. + (line 6) +* Exponentiation functions: Float Arithmetic. (line 41) +* Export: Integer Import and Export. + (line 45) +* Expression parsing demo: Demonstration Programs. + (line 18) +* Extended GCD: Number Theoretic Functions. + (line 45) +* Factor removal functions: Number Theoretic Functions. + (line 90) +* Factorial algorithm: Factorial Algorithm. (line 6) +* Factorial functions: Number Theoretic Functions. + (line 95) +* Factorization demo: Demonstration Programs. + (line 25) +* Fast Fourier Transform: FFT Multiplication. (line 6) +* Fat binary: Build Options. (line 164) +* FFT multiplication <1>: FFT Multiplication. (line 6) +* FFT multiplication: Build Options. (line 317) +* Fibonacci number algorithm: Fibonacci Numbers Algorithm. + (line 6) +* Fibonacci sequence functions: Number Theoretic Functions. + (line 108) +* Float arithmetic functions: Float Arithmetic. (line 6) +* Float assignment functions <1>: Simultaneous Float Init & Assign. + (line 6) +* Float assignment functions: Assigning Floats. (line 6) +* Float comparison functions: Float Comparison. (line 6) +* Float conversion functions: Converting Floats. (line 6) +* Float functions: Floating-point Functions. + (line 6) +* Float initialization functions <1>: Simultaneous Float Init & Assign. + (line 6) +* Float initialization functions: Initializing Floats. (line 6) +* Float input and output functions: I/O of Floats. (line 6) +* Float internals: Float Internals. (line 6) +* Float miscellaneous functions: Miscellaneous Float Functions. + (line 6) +* Float random number functions: Miscellaneous Float Functions. + (line 27) +* Float rounding functions: Miscellaneous Float Functions. + (line 9) +* Float sign tests: Float Comparison. (line 33) +* Floating point mode: Notes for Particular Systems. + (line 34) +* Floating-point functions: Floating-point Functions. + (line 6) +* Floating-point number: Nomenclature and Types. + (line 21) +* fnccheck: Profiling. (line 77) +* Formatted input: Formatted Input. (line 6) +* Formatted output: Formatted Output. (line 6) +* Free Documentation License: GNU Free Documentation License. + (line 6) +* frexp <1>: Converting Floats. (line 23) +* frexp: Converting Integers. (line 42) +* FTP of latest version: Introduction to GMP. (line 38) +* Function classes: Function Classes. (line 6) +* FunctionCheck: Profiling. (line 77) +* GCC Checker: Debugging. (line 115) +* GCD algorithms: Greatest Common Divisor Algorithms. + (line 6) +* GCD extended: Number Theoretic Functions. + (line 45) +* GCD functions: Number Theoretic Functions. + (line 30) +* GDB: Debugging. (line 58) +* Generic C: Build Options. (line 153) +* GMP Perl module: Demonstration Programs. + (line 35) +* GMP version number: Useful Macros and Constants. + (line 12) +* gmp.h: Headers and Libraries. + (line 6) +* gmpxx.h: C++ Interface General. + (line 8) +* GNU Debugger: Debugging. (line 58) +* GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* GNU strip: Known Build Problems. + (line 28) +* gprof: Profiling. (line 41) +* Greatest common divisor algorithms: Greatest Common Divisor Algorithms. + (line 6) +* Greatest common divisor functions: Number Theoretic Functions. + (line 30) +* Hardware floating point mode: Notes for Particular Systems. + (line 34) +* Headers: Headers and Libraries. + (line 6) +* Heap problems: Debugging. (line 24) +* Home page: Introduction to GMP. (line 34) +* Host system: Build Options. (line 66) +* HP-UX: ABI and ISA. (line 107) +* HPPA: ABI and ISA. (line 68) +* I/O functions <1>: I/O of Integers. (line 6) +* I/O functions <2>: I/O of Rationals. (line 6) +* I/O functions: I/O of Floats. (line 6) +* i386: Notes for Particular Systems. + (line 126) +* IA-64: ABI and ISA. (line 107) +* Import: Integer Import and Export. + (line 11) +* In-place operations: Efficiency. (line 57) +* Include files: Headers and Libraries. + (line 6) +* info-lookup-symbol: Emacs. (line 6) +* Initialization functions <1>: Initializing Integers. + (line 6) +* Initialization functions <2>: Initializing Rationals. + (line 6) +* Initialization functions <3>: Random State Initialization. + (line 6) +* Initialization functions <4>: Simultaneous Float Init & Assign. + (line 6) +* Initialization functions <5>: Simultaneous Integer Init & Assign. + (line 6) +* Initialization functions: Initializing Floats. (line 6) +* Initializing and clearing: Efficiency. (line 21) +* Input functions <1>: I/O of Integers. (line 6) +* Input functions <2>: I/O of Rationals. (line 6) +* Input functions <3>: I/O of Floats. (line 6) +* Input functions: Formatted Input Functions. + (line 6) +* Install prefix: Build Options. (line 32) +* Installing GMP: Installing GMP. (line 6) +* Instruction Set Architecture: ABI and ISA. (line 6) +* instrument-functions: Profiling. (line 66) +* Integer: Nomenclature and Types. + (line 6) +* Integer arithmetic functions: Integer Arithmetic. (line 6) +* Integer assignment functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Integer assignment functions: Assigning Integers. (line 6) +* Integer bit manipulation functions: Integer Logic and Bit Fiddling. + (line 6) +* Integer comparison functions: Integer Comparisons. (line 6) +* Integer conversion functions: Converting Integers. (line 6) +* Integer division functions: Integer Division. (line 6) +* Integer exponentiation functions: Integer Exponentiation. + (line 6) +* Integer export: Integer Import and Export. + (line 45) +* Integer functions: Integer Functions. (line 6) +* Integer import: Integer Import and Export. + (line 11) +* Integer initialization functions <1>: Simultaneous Integer Init & Assign. + (line 6) +* Integer initialization functions: Initializing Integers. + (line 6) +* Integer input and output functions: I/O of Integers. (line 6) +* Integer internals: Integer Internals. (line 6) +* Integer logical functions: Integer Logic and Bit Fiddling. + (line 6) +* Integer miscellaneous functions: Miscellaneous Integer Functions. + (line 6) +* Integer random number functions: Integer Random Numbers. + (line 6) +* Integer root functions: Integer Roots. (line 6) +* Integer sign tests: Integer Comparisons. (line 28) +* Integer special functions: Integer Special Functions. + (line 6) +* Interix: Notes for Particular Systems. + (line 51) +* Internals: Internals. (line 6) +* Introduction: Introduction to GMP. (line 6) +* Inverse modulo functions: Number Theoretic Functions. + (line 60) +* IRIX <1>: Known Build Problems. + (line 38) +* IRIX: ABI and ISA. (line 132) +* ISA: ABI and ISA. (line 6) +* istream input: C++ Formatted Input. (line 6) +* Jacobi symbol algorithm: Jacobi Symbol. (line 6) +* Jacobi symbol functions: Number Theoretic Functions. + (line 66) +* Karatsuba multiplication: Karatsuba Multiplication. + (line 6) +* Karatsuba square root algorithm: Square Root Algorithm. + (line 6) +* Kronecker symbol functions: Number Theoretic Functions. + (line 78) +* Language bindings: Language Bindings. (line 6) +* Latest version of GMP: Introduction to GMP. (line 38) +* LCM functions: Number Theoretic Functions. + (line 55) +* Least common multiple functions: Number Theoretic Functions. + (line 55) +* Legendre symbol functions: Number Theoretic Functions. + (line 69) +* libgmp: Headers and Libraries. + (line 22) +* libgmpxx: Headers and Libraries. + (line 27) +* Libraries: Headers and Libraries. + (line 22) +* Libtool: Headers and Libraries. + (line 33) +* Libtool versioning: Notes for Package Builds. + (line 9) +* License conditions: Copying. (line 6) +* Limb: Nomenclature and Types. + (line 31) +* Limb size: Useful Macros and Constants. + (line 7) +* Linear congruential algorithm: Random Number Algorithms. + (line 25) +* Linear congruential random numbers: Random State Initialization. + (line 32) +* Linking: Headers and Libraries. + (line 22) +* Logical functions: Integer Logic and Bit Fiddling. + (line 6) +* Low-level functions: Low-level Functions. (line 6) +* Lucas number algorithm: Lucas Numbers Algorithm. + (line 6) +* Lucas number functions: Number Theoretic Functions. + (line 119) +* MacOS X: Known Build Problems. + (line 51) +* Mailing lists: Introduction to GMP. (line 45) +* Malloc debugger: Debugging. (line 30) +* Malloc problems: Debugging. (line 24) +* Memory allocation: Custom Allocation. (line 6) +* Memory management: Memory Management. (line 6) +* Mersenne twister algorithm: Random Number Algorithms. + (line 17) +* Mersenne twister random numbers: Random State Initialization. + (line 13) +* MINGW: Notes for Particular Systems. + (line 43) +* MIPS: ABI and ISA. (line 132) +* Miscellaneous float functions: Miscellaneous Float Functions. + (line 6) +* Miscellaneous integer functions: Miscellaneous Integer Functions. + (line 6) +* MMX: Notes for Particular Systems. + (line 132) +* Modular inverse functions: Number Theoretic Functions. + (line 60) +* Most significant bit: Miscellaneous Integer Functions. + (line 34) +* mp.h: BSD Compatible Functions. + (line 21) +* MPN_PATH: Build Options. (line 335) +* MS Windows: Notes for Particular Systems. + (line 56) +* MS-DOS: Notes for Particular Systems. + (line 43) +* Multi-threading: Reentrancy. (line 6) +* Multiplication algorithms: Multiplication Algorithms. + (line 6) +* Nails: Low-level Functions. (line 478) +* Native compilation: Build Options. (line 52) +* NeXT: Known Build Problems. + (line 57) +* Next prime function: Number Theoretic Functions. + (line 23) +* Nomenclature: Nomenclature and Types. + (line 6) +* Non-Unix systems: Build Options. (line 11) +* Nth root algorithm: Nth Root Algorithm. (line 6) +* Number sequences: Efficiency. (line 147) +* Number theoretic functions: Number Theoretic Functions. + (line 6) +* Numerator and denominator: Applying Integer Functions. + (line 6) +* obstack output: Formatted Output Functions. + (line 81) +* OpenBSD: Notes for Particular Systems. + (line 86) +* Optimizing performance: Performance optimization. + (line 6) +* ostream output: C++ Formatted Output. + (line 6) +* Other languages: Language Bindings. (line 6) +* Output functions <1>: I/O of Floats. (line 6) +* Output functions <2>: I/O of Rationals. (line 6) +* Output functions <3>: Formatted Output Functions. + (line 6) +* Output functions: I/O of Integers. (line 6) +* Packaged builds: Notes for Package Builds. + (line 6) +* Parameter conventions: Parameter Conventions. + (line 6) +* Parsing expressions demo: Demonstration Programs. + (line 21) +* Particular systems: Notes for Particular Systems. + (line 6) +* Past GMP versions: Compatibility with older versions. + (line 6) +* PDF: Build Options. (line 350) +* Perfect power algorithm: Perfect Power Algorithm. + (line 6) +* Perfect power functions: Integer Roots. (line 27) +* Perfect square algorithm: Perfect Square Algorithm. + (line 6) +* Perfect square functions: Integer Roots. (line 36) +* perl: Demonstration Programs. + (line 35) +* Perl module: Demonstration Programs. + (line 35) +* Postscript: Build Options. (line 350) +* Power/PowerPC <1>: Known Build Problems. + (line 63) +* Power/PowerPC: Notes for Particular Systems. + (line 92) +* Powering algorithms: Powering Algorithms. (line 6) +* Powering functions <1>: Float Arithmetic. (line 41) +* Powering functions: Integer Exponentiation. + (line 6) +* PowerPC: ABI and ISA. (line 167) +* Precision of floats: Floating-point Functions. + (line 6) +* Precision of hardware floating point: Notes for Particular Systems. + (line 34) +* Prefix: Build Options. (line 32) +* Prime testing algorithms: Prime Testing Algorithm. + (line 6) +* Prime testing functions: Number Theoretic Functions. + (line 7) +* printf formatted output: Formatted Output. (line 6) +* Probable prime testing functions: Number Theoretic Functions. + (line 7) +* prof: Profiling. (line 24) +* Profiling: Profiling. (line 6) +* Radix conversion algorithms: Radix Conversion Algorithms. + (line 6) +* Random number algorithms: Random Number Algorithms. + (line 6) +* Random number functions <1>: Integer Random Numbers. + (line 6) +* Random number functions <2>: Miscellaneous Float Functions. + (line 27) +* Random number functions: Random Number Functions. + (line 6) +* Random number seeding: Random State Seeding. + (line 6) +* Random number state: Random State Initialization. + (line 6) +* Random state: Nomenclature and Types. + (line 46) +* Rational arithmetic: Efficiency. (line 113) +* Rational arithmetic functions: Rational Arithmetic. (line 6) +* Rational assignment functions: Initializing Rationals. + (line 6) +* Rational comparison functions: Comparing Rationals. (line 6) +* Rational conversion functions: Rational Conversions. + (line 6) +* Rational initialization functions: Initializing Rationals. + (line 6) +* Rational input and output functions: I/O of Rationals. (line 6) +* Rational internals: Rational Internals. (line 6) +* Rational number: Nomenclature and Types. + (line 16) +* Rational number functions: Rational Number Functions. + (line 6) +* Rational numerator and denominator: Applying Integer Functions. + (line 6) +* Rational sign tests: Comparing Rationals. (line 27) +* Raw output internals: Raw Output Internals. + (line 6) +* Reallocations: Efficiency. (line 30) +* Reentrancy: Reentrancy. (line 6) +* References: References. (line 6) +* Remove factor functions: Number Theoretic Functions. + (line 90) +* Reporting bugs: Reporting Bugs. (line 6) +* Root extraction algorithm: Nth Root Algorithm. (line 6) +* Root extraction algorithms: Root Extraction Algorithms. + (line 6) +* Root extraction functions <1>: Float Arithmetic. (line 37) +* Root extraction functions: Integer Roots. (line 6) +* Root testing functions: Integer Roots. (line 36) +* Rounding functions: Miscellaneous Float Functions. + (line 9) +* Sample programs: Demonstration Programs. + (line 6) +* Scan bit functions: Integer Logic and Bit Fiddling. + (line 38) +* scanf formatted input: Formatted Input. (line 6) +* SCO: Known Build Problems. + (line 38) +* Seeding random numbers: Random State Seeding. + (line 6) +* Segmentation violation: Debugging. (line 7) +* Sequent Symmetry: Known Build Problems. + (line 68) +* Services for Unix: Notes for Particular Systems. + (line 51) +* Shared library versioning: Notes for Package Builds. + (line 9) +* Sign tests <1>: Float Comparison. (line 33) +* Sign tests <2>: Integer Comparisons. (line 28) +* Sign tests: Comparing Rationals. (line 27) +* Size in digits: Miscellaneous Integer Functions. + (line 23) +* Small operands: Efficiency. (line 7) +* Solaris <1>: ABI and ISA. (line 201) +* Solaris: Known Build Problems. + (line 78) +* Sparc: Notes for Particular Systems. + (line 108) +* Sparc V9: ABI and ISA. (line 201) +* Special integer functions: Integer Special Functions. + (line 6) +* Square root algorithm: Square Root Algorithm. + (line 6) +* SSE2: Notes for Particular Systems. + (line 132) +* Stack backtrace: Debugging. (line 50) +* Stack overflow <1>: Debugging. (line 7) +* Stack overflow: Build Options. (line 278) +* Static linking: Efficiency. (line 14) +* stdarg.h: Headers and Libraries. + (line 17) +* stdio.h: Headers and Libraries. + (line 11) +* Stripped libraries: Known Build Problems. + (line 28) +* Sun: ABI and ISA. (line 201) +* SunOS: Notes for Particular Systems. + (line 120) +* Systems: Notes for Particular Systems. + (line 6) +* Temporary memory: Build Options. (line 278) +* Texinfo: Build Options. (line 347) +* Text input/output: Efficiency. (line 153) +* Thread safety: Reentrancy. (line 6) +* Toom multiplication <1>: Other Multiplication. + (line 6) +* Toom multiplication <2>: Toom 4-Way Multiplication. + (line 6) +* Toom multiplication: Toom 3-Way Multiplication. + (line 6) +* Types: Nomenclature and Types. + (line 6) +* ui and si functions: Efficiency. (line 50) +* Unbalanced multiplication: Unbalanced Multiplication. + (line 6) +* Upward compatibility: Compatibility with older versions. + (line 6) +* Useful macros and constants: Useful Macros and Constants. + (line 6) +* User-defined precision: Floating-point Functions. + (line 6) +* Valgrind: Debugging. (line 130) +* Variable conventions: Variable Conventions. + (line 6) +* Version number: Useful Macros and Constants. + (line 12) +* Web page: Introduction to GMP. (line 34) +* Windows: Notes for Particular Systems. + (line 56) +* x86: Notes for Particular Systems. + (line 126) +* x87: Notes for Particular Systems. + (line 34) +* XML: Build Options. (line 354) + + +File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top + +Function and Type Index +*********************** + +[index] +* Menu: + +* __GMP_CC: Useful Macros and Constants. + (line 23) +* __GMP_CFLAGS: Useful Macros and Constants. + (line 24) +* __GNU_MP_VERSION: Useful Macros and Constants. + (line 10) +* __GNU_MP_VERSION_MINOR: Useful Macros and Constants. + (line 11) +* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants. + (line 12) +* _mpz_realloc: Integer Special Functions. + (line 51) +* abs <1>: C++ Interface Rationals. + (line 43) +* abs <2>: C++ Interface Integers. + (line 42) +* abs: C++ Interface Floats. + (line 70) +* ceil: C++ Interface Floats. + (line 71) +* cmp <1>: C++ Interface Floats. + (line 72) +* cmp <2>: C++ Interface Rationals. + (line 44) +* cmp <3>: C++ Interface Integers. + (line 44) +* cmp: C++ Interface Rationals. + (line 45) +* floor: C++ Interface Floats. + (line 80) +* gcd: BSD Compatible Functions. + (line 82) +* gmp_asprintf: Formatted Output Functions. + (line 65) +* gmp_errno: Random State Initialization. + (line 55) +* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization. + (line 55) +* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization. + (line 55) +* gmp_fprintf: Formatted Output Functions. + (line 29) +* gmp_fscanf: Formatted Input Functions. + (line 25) +* GMP_LIMB_BITS: Low-level Functions. (line 508) +* GMP_NAIL_BITS: Low-level Functions. (line 506) +* GMP_NAIL_MASK: Low-level Functions. (line 516) +* GMP_NUMB_BITS: Low-level Functions. (line 507) +* GMP_NUMB_MASK: Low-level Functions. (line 517) +* GMP_NUMB_MAX: Low-level Functions. (line 525) +* gmp_obstack_printf: Formatted Output Functions. + (line 79) +* gmp_obstack_vprintf: Formatted Output Functions. + (line 81) +* gmp_printf: Formatted Output Functions. + (line 24) +* GMP_RAND_ALG_DEFAULT: Random State Initialization. + (line 49) +* GMP_RAND_ALG_LC: Random State Initialization. + (line 49) +* gmp_randclass: C++ Interface Random Numbers. + (line 7) +* gmp_randclass::get_f: C++ Interface Random Numbers. + (line 45) +* gmp_randclass::get_z_bits: C++ Interface Random Numbers. + (line 39) +* gmp_randclass::get_z_range: C++ Interface Random Numbers. + (line 42) +* gmp_randclass::gmp_randclass: C++ Interface Random Numbers. + (line 13) +* gmp_randclass::seed: C++ Interface Random Numbers. + (line 33) +* gmp_randclear: Random State Initialization. + (line 62) +* gmp_randinit: Random State Initialization. + (line 47) +* gmp_randinit_default: Random State Initialization. + (line 7) +* gmp_randinit_lc_2exp: Random State Initialization. + (line 18) +* gmp_randinit_lc_2exp_size: Random State Initialization. + (line 32) +* gmp_randinit_mt: Random State Initialization. + (line 13) +* gmp_randinit_set: Random State Initialization. + (line 43) +* gmp_randseed: Random State Seeding. + (line 7) +* gmp_randseed_ui: Random State Seeding. + (line 9) +* gmp_randstate_t: Nomenclature and Types. + (line 46) +* gmp_scanf: Formatted Input Functions. + (line 21) +* gmp_snprintf: Formatted Output Functions. + (line 46) +* gmp_sprintf: Formatted Output Functions. + (line 34) +* gmp_sscanf: Formatted Input Functions. + (line 29) +* gmp_urandomb_ui: Random State Miscellaneous. + (line 8) +* gmp_urandomm_ui: Random State Miscellaneous. + (line 14) +* gmp_vasprintf: Formatted Output Functions. + (line 66) +* gmp_version: Useful Macros and Constants. + (line 18) +* gmp_vfprintf: Formatted Output Functions. + (line 30) +* gmp_vfscanf: Formatted Input Functions. + (line 26) +* gmp_vprintf: Formatted Output Functions. + (line 25) +* gmp_vscanf: Formatted Input Functions. + (line 22) +* gmp_vsnprintf: Formatted Output Functions. + (line 48) +* gmp_vsprintf: Formatted Output Functions. + (line 35) +* gmp_vsscanf: Formatted Input Functions. + (line 31) +* hypot: C++ Interface Floats. + (line 81) +* itom: BSD Compatible Functions. + (line 29) +* madd: BSD Compatible Functions. + (line 43) +* mcmp: BSD Compatible Functions. + (line 85) +* mdiv: BSD Compatible Functions. + (line 53) +* mfree: BSD Compatible Functions. + (line 105) +* min: BSD Compatible Functions. + (line 89) +* MINT: BSD Compatible Functions. + (line 21) +* mout: BSD Compatible Functions. + (line 94) +* move: BSD Compatible Functions. + (line 39) +* mp_bitcnt_t: Nomenclature and Types. + (line 42) +* mp_bits_per_limb: Useful Macros and Constants. + (line 7) +* mp_exp_t: Nomenclature and Types. + (line 27) +* mp_get_memory_functions: Custom Allocation. (line 93) +* mp_limb_t: Nomenclature and Types. + (line 31) +* mp_set_memory_functions: Custom Allocation. (line 21) +* mp_size_t: Nomenclature and Types. + (line 37) +* mpf_abs: Float Arithmetic. (line 47) +* mpf_add: Float Arithmetic. (line 7) +* mpf_add_ui: Float Arithmetic. (line 9) +* mpf_ceil: Miscellaneous Float Functions. + (line 7) +* mpf_class: C++ Interface General. + (line 20) +* mpf_class::fits_sint_p: C++ Interface Floats. + (line 74) +* mpf_class::fits_slong_p: C++ Interface Floats. + (line 75) +* mpf_class::fits_sshort_p: C++ Interface Floats. + (line 76) +* mpf_class::fits_uint_p: C++ Interface Floats. + (line 77) +* mpf_class::fits_ulong_p: C++ Interface Floats. + (line 78) +* mpf_class::fits_ushort_p: C++ Interface Floats. + (line 79) +* mpf_class::get_d: C++ Interface Floats. + (line 82) +* mpf_class::get_mpf_t: C++ Interface General. + (line 66) +* mpf_class::get_prec: C++ Interface Floats. + (line 100) +* mpf_class::get_si: C++ Interface Floats. + (line 83) +* mpf_class::get_str: C++ Interface Floats. + (line 85) +* mpf_class::get_ui: C++ Interface Floats. + (line 86) +* mpf_class::mpf_class: C++ Interface Floats. + (line 38) +* mpf_class::operator=: C++ Interface Floats. + (line 47) +* mpf_class::set_prec: C++ Interface Floats. + (line 101) +* mpf_class::set_prec_raw: C++ Interface Floats. + (line 102) +* mpf_class::set_str: C++ Interface Floats. + (line 88) +* mpf_clear: Initializing Floats. (line 37) +* mpf_clears: Initializing Floats. (line 41) +* mpf_cmp: Float Comparison. (line 7) +* mpf_cmp_d: Float Comparison. (line 8) +* mpf_cmp_si: Float Comparison. (line 10) +* mpf_cmp_ui: Float Comparison. (line 9) +* mpf_div: Float Arithmetic. (line 29) +* mpf_div_2exp: Float Arithmetic. (line 53) +* mpf_div_ui: Float Arithmetic. (line 33) +* mpf_eq: Float Comparison. (line 17) +* mpf_fits_sint_p: Miscellaneous Float Functions. + (line 20) +* mpf_fits_slong_p: Miscellaneous Float Functions. + (line 18) +* mpf_fits_sshort_p: Miscellaneous Float Functions. + (line 22) +* mpf_fits_uint_p: Miscellaneous Float Functions. + (line 19) +* mpf_fits_ulong_p: Miscellaneous Float Functions. + (line 17) +* mpf_fits_ushort_p: Miscellaneous Float Functions. + (line 21) +* mpf_floor: Miscellaneous Float Functions. + (line 8) +* mpf_get_d: Converting Floats. (line 7) +* mpf_get_d_2exp: Converting Floats. (line 16) +* mpf_get_default_prec: Initializing Floats. (line 12) +* mpf_get_prec: Initializing Floats. (line 62) +* mpf_get_si: Converting Floats. (line 27) +* mpf_get_str: Converting Floats. (line 37) +* mpf_get_ui: Converting Floats. (line 28) +* mpf_init: Initializing Floats. (line 19) +* mpf_init2: Initializing Floats. (line 26) +* mpf_init_set: Simultaneous Float Init & Assign. + (line 16) +* mpf_init_set_d: Simultaneous Float Init & Assign. + (line 19) +* mpf_init_set_si: Simultaneous Float Init & Assign. + (line 18) +* mpf_init_set_str: Simultaneous Float Init & Assign. + (line 25) +* mpf_init_set_ui: Simultaneous Float Init & Assign. + (line 17) +* mpf_inits: Initializing Floats. (line 31) +* mpf_inp_str: I/O of Floats. (line 37) +* mpf_integer_p: Miscellaneous Float Functions. + (line 14) +* mpf_mul: Float Arithmetic. (line 19) +* mpf_mul_2exp: Float Arithmetic. (line 50) +* mpf_mul_ui: Float Arithmetic. (line 21) +* mpf_neg: Float Arithmetic. (line 44) +* mpf_out_str: I/O of Floats. (line 17) +* mpf_pow_ui: Float Arithmetic. (line 41) +* mpf_random2: Miscellaneous Float Functions. + (line 36) +* mpf_reldiff: Float Comparison. (line 29) +* mpf_set: Assigning Floats. (line 10) +* mpf_set_d: Assigning Floats. (line 13) +* mpf_set_default_prec: Initializing Floats. (line 7) +* mpf_set_prec: Initializing Floats. (line 65) +* mpf_set_prec_raw: Initializing Floats. (line 72) +* mpf_set_q: Assigning Floats. (line 15) +* mpf_set_si: Assigning Floats. (line 12) +* mpf_set_str: Assigning Floats. (line 18) +* mpf_set_ui: Assigning Floats. (line 11) +* mpf_set_z: Assigning Floats. (line 14) +* mpf_sgn: Float Comparison. (line 33) +* mpf_sqrt: Float Arithmetic. (line 36) +* mpf_sqrt_ui: Float Arithmetic. (line 37) +* mpf_sub: Float Arithmetic. (line 12) +* mpf_sub_ui: Float Arithmetic. (line 16) +* mpf_swap: Assigning Floats. (line 52) +* mpf_t: Nomenclature and Types. + (line 21) +* mpf_trunc: Miscellaneous Float Functions. + (line 9) +* mpf_ui_div: Float Arithmetic. (line 31) +* mpf_ui_sub: Float Arithmetic. (line 14) +* mpf_urandomb: Miscellaneous Float Functions. + (line 27) +* mpn_add: Low-level Functions. (line 69) +* mpn_add_1: Low-level Functions. (line 64) +* mpn_add_n: Low-level Functions. (line 54) +* mpn_addmul_1: Low-level Functions. (line 148) +* mpn_and_n: Low-level Functions. (line 420) +* mpn_andn_n: Low-level Functions. (line 435) +* mpn_cmp: Low-level Functions. (line 284) +* mpn_com: Low-level Functions. (line 460) +* mpn_copyd: Low-level Functions. (line 469) +* mpn_copyi: Low-level Functions. (line 465) +* mpn_divexact_by3: Low-level Functions. (line 229) +* mpn_divexact_by3c: Low-level Functions. (line 231) +* mpn_divmod: Low-level Functions. (line 224) +* mpn_divmod_1: Low-level Functions. (line 208) +* mpn_divrem: Low-level Functions. (line 182) +* mpn_divrem_1: Low-level Functions. (line 206) +* mpn_gcd: Low-level Functions. (line 289) +* mpn_gcd_1: Low-level Functions. (line 299) +* mpn_gcdext: Low-level Functions. (line 305) +* mpn_get_str: Low-level Functions. (line 346) +* mpn_hamdist: Low-level Functions. (line 410) +* mpn_ior_n: Low-level Functions. (line 425) +* mpn_iorn_n: Low-level Functions. (line 440) +* mpn_lshift: Low-level Functions. (line 260) +* mpn_mod_1: Low-level Functions. (line 255) +* mpn_mul: Low-level Functions. (line 114) +* mpn_mul_1: Low-level Functions. (line 133) +* mpn_mul_n: Low-level Functions. (line 103) +* mpn_nand_n: Low-level Functions. (line 445) +* mpn_neg: Low-level Functions. (line 98) +* mpn_nior_n: Low-level Functions. (line 450) +* mpn_perfect_square_p: Low-level Functions. (line 416) +* mpn_popcount: Low-level Functions. (line 406) +* mpn_random: Low-level Functions. (line 395) +* mpn_random2: Low-level Functions. (line 396) +* mpn_rshift: Low-level Functions. (line 272) +* mpn_scan0: Low-level Functions. (line 380) +* mpn_scan1: Low-level Functions. (line 388) +* mpn_set_str: Low-level Functions. (line 361) +* mpn_sqr: Low-level Functions. (line 125) +* mpn_sqrtrem: Low-level Functions. (line 328) +* mpn_sub: Low-level Functions. (line 90) +* mpn_sub_1: Low-level Functions. (line 85) +* mpn_sub_n: Low-level Functions. (line 76) +* mpn_submul_1: Low-level Functions. (line 159) +* mpn_tdiv_qr: Low-level Functions. (line 171) +* mpn_xnor_n: Low-level Functions. (line 455) +* mpn_xor_n: Low-level Functions. (line 430) +* mpn_zero: Low-level Functions. (line 472) +* mpq_abs: Rational Arithmetic. (line 31) +* mpq_add: Rational Arithmetic. (line 7) +* mpq_canonicalize: Rational Number Functions. + (line 22) +* mpq_class: C++ Interface General. + (line 19) +* mpq_class::canonicalize: C++ Interface Rationals. + (line 37) +* mpq_class::get_d: C++ Interface Rationals. + (line 46) +* mpq_class::get_den: C++ Interface Rationals. + (line 58) +* mpq_class::get_den_mpz_t: C++ Interface Rationals. + (line 68) +* mpq_class::get_mpq_t: C++ Interface General. + (line 65) +* mpq_class::get_num: C++ Interface Rationals. + (line 57) +* mpq_class::get_num_mpz_t: C++ Interface Rationals. + (line 67) +* mpq_class::get_str: C++ Interface Rationals. + (line 47) +* mpq_class::mpq_class: C++ Interface Rationals. + (line 22) +* mpq_class::set_str: C++ Interface Rationals. + (line 49) +* mpq_clear: Initializing Rationals. + (line 16) +* mpq_clears: Initializing Rationals. + (line 20) +* mpq_cmp: Comparing Rationals. (line 7) +* mpq_cmp_si: Comparing Rationals. (line 17) +* mpq_cmp_ui: Comparing Rationals. (line 15) +* mpq_denref: Applying Integer Functions. + (line 18) +* mpq_div: Rational Arithmetic. (line 22) +* mpq_div_2exp: Rational Arithmetic. (line 25) +* mpq_equal: Comparing Rationals. (line 33) +* mpq_get_d: Rational Conversions. + (line 7) +* mpq_get_den: Applying Integer Functions. + (line 24) +* mpq_get_num: Applying Integer Functions. + (line 23) +* mpq_get_str: Rational Conversions. + (line 22) +* mpq_init: Initializing Rationals. + (line 7) +* mpq_inits: Initializing Rationals. + (line 12) +* mpq_inp_str: I/O of Rationals. (line 23) +* mpq_inv: Rational Arithmetic. (line 34) +* mpq_mul: Rational Arithmetic. (line 15) +* mpq_mul_2exp: Rational Arithmetic. (line 18) +* mpq_neg: Rational Arithmetic. (line 28) +* mpq_numref: Applying Integer Functions. + (line 17) +* mpq_out_str: I/O of Rationals. (line 15) +* mpq_set: Initializing Rationals. + (line 24) +* mpq_set_d: Rational Conversions. + (line 17) +* mpq_set_den: Applying Integer Functions. + (line 26) +* mpq_set_f: Rational Conversions. + (line 18) +* mpq_set_num: Applying Integer Functions. + (line 25) +* mpq_set_si: Initializing Rationals. + (line 31) +* mpq_set_str: Initializing Rationals. + (line 36) +* mpq_set_ui: Initializing Rationals. + (line 29) +* mpq_set_z: Initializing Rationals. + (line 25) +* mpq_sgn: Comparing Rationals. (line 27) +* mpq_sub: Rational Arithmetic. (line 11) +* mpq_swap: Initializing Rationals. + (line 56) +* mpq_t: Nomenclature and Types. + (line 16) +* mpz_abs: Integer Arithmetic. (line 42) +* mpz_add: Integer Arithmetic. (line 7) +* mpz_add_ui: Integer Arithmetic. (line 9) +* mpz_addmul: Integer Arithmetic. (line 25) +* mpz_addmul_ui: Integer Arithmetic. (line 27) +* mpz_and: Integer Logic and Bit Fiddling. + (line 11) +* mpz_array_init: Integer Special Functions. + (line 11) +* mpz_bin_ui: Number Theoretic Functions. + (line 98) +* mpz_bin_uiui: Number Theoretic Functions. + (line 100) +* mpz_cdiv_q: Integer Division. (line 13) +* mpz_cdiv_q_2exp: Integer Division. (line 24) +* mpz_cdiv_q_ui: Integer Division. (line 17) +* mpz_cdiv_qr: Integer Division. (line 15) +* mpz_cdiv_qr_ui: Integer Division. (line 21) +* mpz_cdiv_r: Integer Division. (line 14) +* mpz_cdiv_r_2exp: Integer Division. (line 25) +* mpz_cdiv_r_ui: Integer Division. (line 19) +* mpz_cdiv_ui: Integer Division. (line 23) +* mpz_class: C++ Interface General. + (line 18) +* mpz_class::fits_sint_p: C++ Interface Integers. + (line 45) +* mpz_class::fits_slong_p: C++ Interface Integers. + (line 46) +* mpz_class::fits_sshort_p: C++ Interface Integers. + (line 47) +* mpz_class::fits_uint_p: C++ Interface Integers. + (line 48) +* mpz_class::fits_ulong_p: C++ Interface Integers. + (line 49) +* mpz_class::fits_ushort_p: C++ Interface Integers. + (line 50) +* mpz_class::get_d: C++ Interface Integers. + (line 51) +* mpz_class::get_mpz_t: C++ Interface General. + (line 64) +* mpz_class::get_si: C++ Interface Integers. + (line 52) +* mpz_class::get_str: C++ Interface Integers. + (line 53) +* mpz_class::get_ui: C++ Interface Integers. + (line 54) +* mpz_class::mpz_class: C++ Interface Integers. + (line 7) +* mpz_class::set_str: C++ Interface Integers. + (line 56) +* mpz_clear: Initializing Integers. + (line 44) +* mpz_clears: Initializing Integers. + (line 48) +* mpz_clrbit: Integer Logic and Bit Fiddling. + (line 54) +* mpz_cmp: Integer Comparisons. (line 7) +* mpz_cmp_d: Integer Comparisons. (line 8) +* mpz_cmp_si: Integer Comparisons. (line 9) +* mpz_cmp_ui: Integer Comparisons. (line 10) +* mpz_cmpabs: Integer Comparisons. (line 18) +* mpz_cmpabs_d: Integer Comparisons. (line 19) +* mpz_cmpabs_ui: Integer Comparisons. (line 20) +* mpz_com: Integer Logic and Bit Fiddling. + (line 20) +* mpz_combit: Integer Logic and Bit Fiddling. + (line 57) +* mpz_congruent_2exp_p: Integer Division. (line 124) +* mpz_congruent_p: Integer Division. (line 121) +* mpz_congruent_ui_p: Integer Division. (line 123) +* mpz_divexact: Integer Division. (line 101) +* mpz_divexact_ui: Integer Division. (line 102) +* mpz_divisible_2exp_p: Integer Division. (line 112) +* mpz_divisible_p: Integer Division. (line 110) +* mpz_divisible_ui_p: Integer Division. (line 111) +* mpz_even_p: Miscellaneous Integer Functions. + (line 18) +* mpz_export: Integer Import and Export. + (line 45) +* mpz_fac_ui: Number Theoretic Functions. + (line 95) +* mpz_fdiv_q: Integer Division. (line 27) +* mpz_fdiv_q_2exp: Integer Division. (line 38) +* mpz_fdiv_q_ui: Integer Division. (line 31) +* mpz_fdiv_qr: Integer Division. (line 29) +* mpz_fdiv_qr_ui: Integer Division. (line 35) +* mpz_fdiv_r: Integer Division. (line 28) +* mpz_fdiv_r_2exp: Integer Division. (line 39) +* mpz_fdiv_r_ui: Integer Division. (line 33) +* mpz_fdiv_ui: Integer Division. (line 37) +* mpz_fib2_ui: Number Theoretic Functions. + (line 108) +* mpz_fib_ui: Number Theoretic Functions. + (line 106) +* mpz_fits_sint_p: Miscellaneous Integer Functions. + (line 10) +* mpz_fits_slong_p: Miscellaneous Integer Functions. + (line 8) +* mpz_fits_sshort_p: Miscellaneous Integer Functions. + (line 12) +* mpz_fits_uint_p: Miscellaneous Integer Functions. + (line 9) +* mpz_fits_ulong_p: Miscellaneous Integer Functions. + (line 7) +* mpz_fits_ushort_p: Miscellaneous Integer Functions. + (line 11) +* mpz_gcd: Number Theoretic Functions. + (line 30) +* mpz_gcd_ui: Number Theoretic Functions. + (line 35) +* mpz_gcdext: Number Theoretic Functions. + (line 45) +* mpz_get_d: Converting Integers. (line 27) +* mpz_get_d_2exp: Converting Integers. (line 35) +* mpz_get_si: Converting Integers. (line 18) +* mpz_get_str: Converting Integers. (line 46) +* mpz_get_ui: Converting Integers. (line 11) +* mpz_getlimbn: Integer Special Functions. + (line 60) +* mpz_hamdist: Integer Logic and Bit Fiddling. + (line 29) +* mpz_import: Integer Import and Export. + (line 11) +* mpz_init: Initializing Integers. + (line 26) +* mpz_init2: Initializing Integers. + (line 33) +* mpz_init_set: Simultaneous Integer Init & Assign. + (line 27) +* mpz_init_set_d: Simultaneous Integer Init & Assign. + (line 30) +* mpz_init_set_si: Simultaneous Integer Init & Assign. + (line 29) +* mpz_init_set_str: Simultaneous Integer Init & Assign. + (line 34) +* mpz_init_set_ui: Simultaneous Integer Init & Assign. + (line 28) +* mpz_inits: Initializing Integers. + (line 29) +* mpz_inp_raw: I/O of Integers. (line 59) +* mpz_inp_str: I/O of Integers. (line 28) +* mpz_invert: Number Theoretic Functions. + (line 60) +* mpz_ior: Integer Logic and Bit Fiddling. + (line 14) +* mpz_jacobi: Number Theoretic Functions. + (line 66) +* mpz_kronecker: Number Theoretic Functions. + (line 74) +* mpz_kronecker_si: Number Theoretic Functions. + (line 75) +* mpz_kronecker_ui: Number Theoretic Functions. + (line 76) +* mpz_lcm: Number Theoretic Functions. + (line 54) +* mpz_lcm_ui: Number Theoretic Functions. + (line 55) +* mpz_legendre: Number Theoretic Functions. + (line 69) +* mpz_lucnum2_ui: Number Theoretic Functions. + (line 119) +* mpz_lucnum_ui: Number Theoretic Functions. + (line 117) +* mpz_mod: Integer Division. (line 91) +* mpz_mod_ui: Integer Division. (line 93) +* mpz_mul: Integer Arithmetic. (line 19) +* mpz_mul_2exp: Integer Arithmetic. (line 35) +* mpz_mul_si: Integer Arithmetic. (line 20) +* mpz_mul_ui: Integer Arithmetic. (line 22) +* mpz_neg: Integer Arithmetic. (line 39) +* mpz_nextprime: Number Theoretic Functions. + (line 23) +* mpz_odd_p: Miscellaneous Integer Functions. + (line 17) +* mpz_out_raw: I/O of Integers. (line 43) +* mpz_out_str: I/O of Integers. (line 16) +* mpz_perfect_power_p: Integer Roots. (line 27) +* mpz_perfect_square_p: Integer Roots. (line 36) +* mpz_popcount: Integer Logic and Bit Fiddling. + (line 23) +* mpz_pow_ui: Integer Exponentiation. + (line 31) +* mpz_powm: Integer Exponentiation. + (line 8) +* mpz_powm_sec: Integer Exponentiation. + (line 18) +* mpz_powm_ui: Integer Exponentiation. + (line 10) +* mpz_probab_prime_p: Number Theoretic Functions. + (line 7) +* mpz_random: Integer Random Numbers. + (line 42) +* mpz_random2: Integer Random Numbers. + (line 51) +* mpz_realloc2: Initializing Integers. + (line 52) +* mpz_remove: Number Theoretic Functions. + (line 90) +* mpz_root: Integer Roots. (line 7) +* mpz_rootrem: Integer Roots. (line 13) +* mpz_rrandomb: Integer Random Numbers. + (line 31) +* mpz_scan0: Integer Logic and Bit Fiddling. + (line 37) +* mpz_scan1: Integer Logic and Bit Fiddling. + (line 38) +* mpz_set: Assigning Integers. (line 10) +* mpz_set_d: Assigning Integers. (line 13) +* mpz_set_f: Assigning Integers. (line 15) +* mpz_set_q: Assigning Integers. (line 14) +* mpz_set_si: Assigning Integers. (line 12) +* mpz_set_str: Assigning Integers. (line 21) +* mpz_set_ui: Assigning Integers. (line 11) +* mpz_setbit: Integer Logic and Bit Fiddling. + (line 51) +* mpz_sgn: Integer Comparisons. (line 28) +* mpz_si_kronecker: Number Theoretic Functions. + (line 77) +* mpz_size: Integer Special Functions. + (line 68) +* mpz_sizeinbase: Miscellaneous Integer Functions. + (line 23) +* mpz_sqrt: Integer Roots. (line 17) +* mpz_sqrtrem: Integer Roots. (line 20) +* mpz_sub: Integer Arithmetic. (line 12) +* mpz_sub_ui: Integer Arithmetic. (line 14) +* mpz_submul: Integer Arithmetic. (line 30) +* mpz_submul_ui: Integer Arithmetic. (line 32) +* mpz_swap: Assigning Integers. (line 37) +* mpz_t: Nomenclature and Types. + (line 6) +* mpz_tdiv_q: Integer Division. (line 41) +* mpz_tdiv_q_2exp: Integer Division. (line 52) +* mpz_tdiv_q_ui: Integer Division. (line 45) +* mpz_tdiv_qr: Integer Division. (line 43) +* mpz_tdiv_qr_ui: Integer Division. (line 49) +* mpz_tdiv_r: Integer Division. (line 42) +* mpz_tdiv_r_2exp: Integer Division. (line 53) +* mpz_tdiv_r_ui: Integer Division. (line 47) +* mpz_tdiv_ui: Integer Division. (line 51) +* mpz_tstbit: Integer Logic and Bit Fiddling. + (line 60) +* mpz_ui_kronecker: Number Theoretic Functions. + (line 78) +* mpz_ui_pow_ui: Integer Exponentiation. + (line 33) +* mpz_ui_sub: Integer Arithmetic. (line 16) +* mpz_urandomb: Integer Random Numbers. + (line 14) +* mpz_urandomm: Integer Random Numbers. + (line 23) +* mpz_xor: Integer Logic and Bit Fiddling. + (line 17) +* msqrt: BSD Compatible Functions. + (line 63) +* msub: BSD Compatible Functions. + (line 46) +* mtox: BSD Compatible Functions. + (line 98) +* mult: BSD Compatible Functions. + (line 49) +* operator%: C++ Interface Integers. + (line 30) +* operator/: C++ Interface Integers. + (line 29) +* operator<<: C++ Formatted Output. + (line 20) +* operator>> <1>: C++ Formatted Input. (line 11) +* operator>>: C++ Interface Rationals. + (line 77) +* pow: BSD Compatible Functions. + (line 71) +* rpow: BSD Compatible Functions. + (line 79) +* sdiv: BSD Compatible Functions. + (line 55) +* sgn <1>: C++ Interface Rationals. + (line 50) +* sgn <2>: C++ Interface Integers. + (line 57) +* sgn: C++ Interface Floats. + (line 89) +* sqrt <1>: C++ Interface Integers. + (line 58) +* sqrt: C++ Interface Floats. + (line 90) +* trunc: C++ Interface Floats. + (line 91) +* xtom: BSD Compatible Functions. + (line 34) + + -- 2.39.2

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