From 03f8693e90aa261c34e769adfa900fec18a09d43 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 27 Aug 2010 12:34:34 +0200 Subject: [PATCH] oops, forgot libgmp here --- misc/builddeps/dp.linux32/bin/blind_id | Bin 17312 -> 17312 bytes misc/builddeps/dp.linux32/include/gmp.h | 2280 ++++++ .../builddeps/dp.linux32/lib/libd0_blind_id.a | Bin 113272 -> 113304 bytes .../dp.linux32/lib/libd0_blind_id.la | 2 +- .../dp.linux32/lib/libd0_blind_id.so.0.0.0 | Bin 93600 -> 93640 bytes .../builddeps/dp.linux32/lib/libd0_rijndael.a | Bin 31998 -> 31998 bytes .../dp.linux32/lib/libd0_rijndael.la | 2 +- .../dp.linux32/lib/libd0_rijndael.so.0.0.0 | Bin 31122 -> 31162 bytes misc/builddeps/dp.linux32/lib/libgmp.a | Bin 0 -> 788974 bytes misc/builddeps/dp.linux32/lib/libgmp.la | 41 + misc/builddeps/dp.linux32/lib/libgmp.so | 1 + misc/builddeps/dp.linux32/lib/libgmp.so.10 | 1 + .../builddeps/dp.linux32/lib/libgmp.so.10.0.1 | Bin 0 -> 445612 bytes misc/builddeps/dp.linux32/share/info/gmp.info | 178 + .../dp.linux32/share/info/gmp.info-1 | 7084 +++++++++++++++++ .../dp.linux32/share/info/gmp.info-2 | 3489 ++++++++ 16 files changed, 13076 insertions(+), 2 deletions(-) create mode 100644 misc/builddeps/dp.linux32/include/gmp.h create mode 100644 misc/builddeps/dp.linux32/lib/libgmp.a create mode 100755 misc/builddeps/dp.linux32/lib/libgmp.la create mode 120000 misc/builddeps/dp.linux32/lib/libgmp.so create mode 120000 misc/builddeps/dp.linux32/lib/libgmp.so.10 create mode 100755 misc/builddeps/dp.linux32/lib/libgmp.so.10.0.1 create mode 100644 misc/builddeps/dp.linux32/share/info/gmp.info create mode 100644 misc/builddeps/dp.linux32/share/info/gmp.info-1 create mode 100644 misc/builddeps/dp.linux32/share/info/gmp.info-2 diff --git a/misc/builddeps/dp.linux32/bin/blind_id b/misc/builddeps/dp.linux32/bin/blind_id index 04d4a6e84bc033a69b8cb5c1fe44412d40aa00f0..098b1fd7a190c3ff40adec5a78a94d7a708f97af 100755 GIT binary patch delta 220 zcmZ3`&bXkRal;)ZM)Apand})|Cd)GGGn!BKW%g%Oo;;UXo-tzbULad*GB1n1pd2#; z7@T2bU=RYb!Y2E&_y-C>MgIatK%zxJ{)tsA93Z6v3?Ki;1Nk$M_{>1Q&vX_J7NEQ! z13!ZSR35^YU`X5imPM7B$ngf&hWcOkM^CCWa}S6*+|kI6+eU YK$-H%wvy(I^EQ`C?v?;jhDP~<07dRA>;M1& delta 219 zcmZ3`&bXkRal;)ZMzP6vnd}*zC(APHGn!5IW%g%Onmm_To-us#ULad@GB1n1pe!>3 z7@T2bU=RYbLMQvO_y-C?MgIatK%#{}{)tsA93Z6v3?Ki;0r@kK_)I{)&vX_J7NEQ! z13!a4R35^YU`XBkmPM7B(Ri{5$EwMDIs8R`Fo6t$0D;U*UIqpxhRK^1IfVr{K~nrc XnX<{YlIDzaH /* 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 32 +#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 "-m32 -O2 -pedantic -fomit-frame-pointer -mtune=pentium4 -march=pentium4" + +/* 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.linux32/lib/libd0_blind_id.a b/misc/builddeps/dp.linux32/lib/libd0_blind_id.a index b42e4f62082ad84fafc186cac8e19ded12f21b09..a472257a762b07821a38b888363d6b9ea4e9ea77 100644 GIT binary patch delta 989 zcmc&yO-vI}5PtL6wiLE>D-;OSpftM3Pl0U z7-|Mxym`QbiEvpACg@FKh(Mz8VEjouXu`>h5H*JAyya}vlZW}!m+|1rk?VmQ=qFf)Qt27iiJfWbdR*>B9o2l!|gzp1&!ulr(9 zCTRhGi@seCDohv-dEPnpTm#1BcX^EQ)ow=UWpY+z>pPhw2SoNl*tj>J*`!T!Nhy)O z{3&RN6Mfx9f+Iw5mZE5q3XC}=&S8XdWn7|E*)Ubt8+y0}gmG7|#AUcmthhmpaln-D zl$3BgtdZ(Qp%%bl;Ts5l-bGgJSPP3n@fJSl!?|3T9O8}@~ zlWc^gVn^2r(bjFOdZN5?%L;iDWUja@zSy+NV3%;RbIy>suaG_?8Et!rFWfT3lUen{Cd6z~KiT(lKAd~Ro zoL9*ZBXua*mozD!Kd@|nUl=*IBthORhH9s5pXD5J9oK7b7(I2dN{HgaqtD zPlT=L=ulxAgM_E>3}FVZ6J~L)L*>(L==-vt%G)H(;J%0okBrVpuhkjSG?vb$`mzJQ zK&Z)YEFHh4a0!f)=QO@^axHpS5K4`^@k1*X^9J>X7?dx5uZQmZ9bvIE2yd%RcWYpg I4m8sD3;(RybpQYW delta 941 zcmc&zO-NKx6u#&B=1-r_n`U$-XT)%zXWGax&1;@ii-;OEn90Z(TO{d>C^#xLLqUWs zS_CB;2Ya??5sXowZeB2pHf^Fm2W(M68U;nPC|ab@uFid}qgu5%-~G;azI)E$ao_x= z{riS}He}a3_2_QxTFc$3Nydi$V@&H7si!euOkS^Ij6X{=!Z4GIBCGt$Bsng!Rbk^{Cv!*}g-u zJU$WWi<^6zPq-W<(UrZ#kBi%IwKag7 zt;b!|)o1K)n{nKhXNkYXuWi%j z`S$)G#PP+UM{o~sCfnf-_9nf!o>U->a15urR9h*` z*s^h}1YTU}Qs5}Qu}ZdX75o?>EMOmD0xuAzae=T8E8QwDbYkk;b}BdZsBjJs63(0X zo&mc%5lgV~Vt%kV+!0Sib#v{=oWkET^Yp10w|+8BH^wz+Fdq!X a2&A3#z(^_QHCSu0xNbeRaxMeA27dxmmcz#Y diff --git a/misc/builddeps/dp.linux32/lib/libd0_blind_id.la b/misc/builddeps/dp.linux32/lib/libd0_blind_id.la index c3e5833b..5c83fce3 100755 --- a/misc/builddeps/dp.linux32/lib/libd0_blind_id.la +++ b/misc/builddeps/dp.linux32/lib/libd0_blind_id.la @@ -14,7 +14,7 @@ library_names='libd0_blind_id.so.0.0.0 libd0_blind_id.so.0 libd0_blind_id.so' old_library='libd0_blind_id.a' # Libraries that this one depends upon. -dependency_libs=' -L/home/xonotic/dp.linux32/lib /usr/lib/libgmp.la' +dependency_libs=' -L/home/xonotic/dp.linux32/lib /home/xonotic/dp.linux32/lib/libgmp.la' # Version information for libd0_blind_id. current=0 diff --git a/misc/builddeps/dp.linux32/lib/libd0_blind_id.so.0.0.0 b/misc/builddeps/dp.linux32/lib/libd0_blind_id.so.0.0.0 index 1a76fb9ce999d3afaa408109d3d83eb3f0ed6e02..11df4eccfa556390850ecb9fe0fd18535c974849 100755 GIT binary patch delta 14186 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≤~I|=(1>8 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 diff --git a/misc/builddeps/dp.linux32/lib/libd0_rijndael.la b/misc/builddeps/dp.linux32/lib/libd0_rijndael.la index f997bacd..036dd24a 100755 --- a/misc/builddeps/dp.linux32/lib/libd0_rijndael.la +++ b/misc/builddeps/dp.linux32/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=' -L/home/xonotic/dp.linux32/lib /usr/lib/libgmp.la' +dependency_libs=' -L/home/xonotic/dp.linux32/lib /home/xonotic/dp.linux32/lib/libgmp.la' # Version information for libd0_rijndael. current=0 diff --git a/misc/builddeps/dp.linux32/lib/libd0_rijndael.so.0.0.0 b/misc/builddeps/dp.linux32/lib/libd0_rijndael.so.0.0.0 index 64a19c9de4b4d939695d7adc5fe04a29c9fcaf7a..7c59e5cc3e8ec1df6b5a6f0ee75e467107402447 100755 GIT binary patch delta 9171 zcmb_i4RBP|6~1qO!iFsD@)IBtOhU*Hpu+QErHVpppT?;>C6Yx%ae~4WDhUs#jZB3(MFqM)Tlu_inVR}o%`N>`;y%N z+P<0H_s;z}_k8C&_vh@}BOfbIf2sux^+)j#-+?b&L3V25N!()&`L|Q#^^l{mq|(jU zT$aUdgq-h#RTzO}*uoB@j;^^ZlP$o#Y^4w(``H6{jOQ}84h_*hgWZLK8lLIuaH*^L z)2>Swui90;XXmQ@)m7E|Zoh5Sj+%>h-(FR_U%PnK?%QwW`=-V*&nT(6>A>?r z-r(M?JkH;DubSbXn3#Bo`*@+JK=ET{7;-)OLC0``ys6cynS<$>;_LgTM8Dz28@P}}&TN83DF1kKFsyC~3Y_B*>Oea6)( zs>Z*ZsuMH5u6&=*_r0{3OePGr9R&7ec%TXHD9@b#b>R*O$0jCVszIXhEe};6r;@(N z!az5Kv#7Z$ts0+0%?+L}ugCAy<2x5U3)9#mAg`GDRb?gLG4q$#CH?|0^zy_>01o>M zy-E9C&DGE16K{|QUWj}|&u>jk9C%B_f!+jn68TUN(c6uKh@P!kOKvcmA63Kc z1{{X=eeVPf{ZYt)?(n2O9n{AhSJgY<1!X+=1FtPrLp`K`AcT4% zpV2IV$Y1m4)Qe8KPuq9_O0}kEsF5^$oJN3?Nr`EAuQf=Iwtuyuccrj$)Z!#^3bhB` zBx0Oa_F7h|dat4Pz}CL=M}x+-Ys5@eL%o)faIq!uM`kU!%=Ajsi7+|^;aW8mwGl=m zrzFBRXE_kA69@%65@A|ugd3w;%?3m7wGo0M5qC#5JQ1s(p*9s^zm2fp(4&Nq-!nT{ zZxh*1R#FfWkx@0&4rI z)LYb0+(sQwlKXzZLGI08gxt7RQ)%b}XCxQ3i%it^qLQ#7Ck#C<$h|-4AUEM8H?D>f zz)5Os1%pnUgHvGcQbU6_%)wN0VVgq=iVrAq2M?SyBX`&cB^==DH{Sb2 zh#l5C8ZZG2edvtb4yA_kh|TSYp~DCf&XI%sM{{Q?;wyS@0H~m#-1cYN*)=!3we3 z!_|g9f}+T&RP-&PU)#L=B-R!u)=@Ro0<0rWtgTM0ty8c*DzLWNSX)ymAC;7gR_02j zdXE{0Iurc5`8msJnN&kwCKRiFT*ji!HpxIiX z4IL2VhHe?okIyffZ7;@SWFA+t=haJX^5D^|_0T~Yf!UTkaaem>-<~#~5o$wSYu}#c zpwVPdZ%LMpx)$wlyV<*$imiPEPe2qAo9YzGlmu_e&cE2=%o!GjK6XaRPG;w&QWiOF zh7mx6H*11o#{q+55&ew3^_+z_HPmX-h8bcUe1G)_qa8Rp(6~#Eox};!NopKg4Njn#Oi>P)p|OH z;>a{Tt>hgQb5b9d>q#66tR1r1o*T`R2_HWb;X-3eGuGHJLIRS2`3_zq3K2m zAj6YP&oGO%IW|(W6v-ZP#H{B8-~XVn<7;zPUumgmPF2yWm3z|afC@}xQ^hZG)XOau zEmKu!SHe&tfDf9ur#=-8~4`>`}k?oMkn^zr)K>y>Bu z%ejwlqAU=JkF{RC0O9(edRmPmrJ<$6N_w$*9~0rH)`_$RNg*r|In4r9w8|Y4@Oz^%&@cvN*c|
uf5KND`G%8(D7(34+QECYAluP}xs( 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 W&fp6z0+3 zm6ny2Z&_KdnU)$TuV`7JcEMYb-6XB3EUirb-!soM&(1zTY`6FS_WS+j^Lch=&YU@O zJLk-Ow#VSilB{V%I$ad$ZLG0LvB@#98!6^xCWz}R@uzy58;CJ$gN>kYq#-3Zp*o))U@0Ci%=zA@ju}vo! z+g!}pe>O0-J(aN?@r=Eb#Mp=Z7(3XFvCoz=*0h4LuSPTWt%b3p&5RwdX6!^LV=WVz z>C|z|)VY?K®zXD2b!dHb2E=Lu%&y?~hp3}dE&fL$_~nNp52(>UN?i?G~OX1ZxH zGZi&3(+uF;vV@uD9%QD^aL(}2_W zEO4LynVDYvk(pk;f|=GOFw@4Z%(S_W`qj;0rZ?e!=Ot#^eLpk3{|Gbfd7qgMgfmm) zC}#R(G&6k;x=m%wbOhnw;QMX|GyOP?nSOOJKfgxx3t7kf#1~;^e&;P_e&_dNe$nHZ z-$j#|UtB%&OB&7mE&*&faMQ*xzsulGe^>p+u3~=lUAKt&P2A7?CL=8S1oN9VfcX`i z&-{vSV1A`{FuxgFncpoBF~2!$m|q3rD$|(XJ+qnL1DlxNQs6xHD)W2lYv%XtdCc$m z$C=+tz{`G5^|9ice|DH(Z zzyAdD|Du@rA4a_Ix-kDAS1|vRlbPAHftdp$nb|U%nL{g?`P^>I90h+2!ji``^CiX1 zJlw*}wnfZ*X%sV$8O+Srz@E5*nKMT-bI#e!JnaNC=PzdF=@XgRIfj{MEn#NxqWRXP z%v`mAneV7&X7@^FzIz@sKd_LQmmOi|CqeTWxSvD#i`|&{6}VqJ#LU&8z4a(Fzgfx5 zJK=vHboNeT<^xFYV+%8XK8l&YG&6H^3^V`Iz|1Y{_!khgngxU|X93}%Ea3EsETC&O z3pjTg3pl@l1w=QqfQzzOK!JY4;*ieLfP*0O-> zLCcQttQ{<1YB3AA3E_pKSU{3;cBk3u2WlC@_fyo!7{MdYV~KpL`ZHAc6&@hO(f` zC$gZc_OqZH`mvxJyRab0Y0$mLS9=8mM<*Ka%2p% z9BpKlU&pavODGFIWfTiOeKHF^JAwuGSi*v%XR}~yJ_}A}EO^8!7JS7*7Ce3f3(niY zg6Ex3zdMhx;QRKg-?CvWSbWb}STKF-YgzF2l`Oa(H1;;L;Ez+)uQ{6q(|2-(*VpOP zqs;3&cLnQ2U*87xi&@7y4J>Azz{mQRiZJnwv9M0`P3)$AdBa#I`U+R7pQDm>x@9oy zG-ovHbn9&OyS*HC-d6QYlg%epwpAr_*|4tSX z^9&1#t7ahy`&mfxaTapPsVrnz9~LrV2Me)X%|b?{v5?C)u#j}b9XF4KTswe;Tz7(n zOd9R^rbMui*$BJC!9wmn%0ljg{UBo@OBb<_$Ck5@CkL~TXU4IR=RRd2Yx=Q}S5~o* z4RF)9`CS&W6=B<(S;$+JEM)g)7IGw)g?w|6g?tb9u?Z~X=l5Ai%MC2lZ!ZfCEV0|C z78KhvOG|S~9QJ8Bnb|od%nO#AnU}9Z%Ix_$Q*#QlOLA0yp*=fqMnO@w-75KWW@TnM z>{D)z)2QUk%E~Er*D9yzCqx+skrF1h8~EGE$UlFU*;m>ByU*rDe~V zmK>xnBvDG}K}CC^c6M~3YAc?DCnm@%4tqqFcPz3@}>9Cqa2nPYck3dAWW z614=yC9q!9sW}dNK~6zY$;~`1Dr~7nskHr|lFY*Fyuv((hDqM6{G3eD#3IK|+e`DxL=Eaxv@k77fx}*sla&eJ6lZR(&Q^rY3nP=}nX(tipgdkI zF9>A`R11qrb8@nc8S{!&Fh!M7CJaQ#Yj@^pWSxXjgf=ij3Oo=rRH=vO zc!d?0(zcJ9%OL99{giJR># zC>A;Luw1S^XS#rvm@6sSn{++fb@5u&sx5k<%-s%xpb-a7v{tb!x(i3UYcF zA{QtG5Q!ByH8q)Qhf|6VEhli`lmfCmMT66>Cr=*1cBmfsJoQVYN&aMtvOjZ*UXxIu z0*gdRuP~}%JuU9>qDZ(xSr$WpRT?@dw^-Fp6qM&-f0cPW_#VH#By*<72Tx7Y%`z^* zWj|_Gsx{stcq$|}zoe+bJLTFPCAzB4wHFu7lqyk(v&cy4%uKxsb4g#9=0O|{ zp!}l3sYY1ov?6F{Z$xM7xXw1>It_8D(4K}RpQntVh_1FoBvfYC+Z9g1sNAVXDkEmp znUIIczM_&+;vKE47RXX;kR=3>2M{RKxCG9UlFXYWJyd2#KP926K2OvvVswq+%IvC7 zLRSG=8;bA}BZ7B$t6)!RxjZ$Ai3Le75XUO<0`YtpK%U+aRLG;r6ZuNewW}NipAcT| z6auAsM60SkPeu_(YDd-Q6%(OyEff{#si7;9(gtIeIMIoC_#;aP@!nZuP-H-dL#A{n zDvXcQ1bN}NPtDTXT!(q`4-iBiV-hb)8puFjgL>!2qs_}Opeu$bi5%o+W=SPiTT~B2 zy7uXU)yw0>;j)eaP0~1`15~}9T0kHTI<;|nnSEMjL3UoLo={$a z++5V9i&V)SD|>W_$t%QQM`-^t=nvliV*EC9TAmnx>tGKB8UX7)q3Q`w9+7(d9tjc{ zx>}Wxq;l(Mp2FXlnN>7J8zVtC=Gkv5DJsm#x=D;$%g_L=VLFnOpaq-r_Glw@z$c30HT)~Xuv;2#>t3C6OE9?-!*+xg73rBIH$ru? zDqU^h2X4vAEQ}F>eV)_Imh@ReR7x@V*{-7~reR1CVN+tI>B zg?X6R>N8-#Ji`XfqbWi7#6W>N_10B=qK2k>#=FzGn$~zl^W>}RCZInx@Ma$ zjnGuLo(WC$ifCA55Kd}YkJ^}SP$S$gP<1Uaoht>#F2KtT?sFxYUu>g81LilAuZ6RnH zx6pf}g_@9863G)6pO50{nFUD8ewMvRh$D}tfn}(cM=zS5(WjP}-KvdQ`5VZ#gb=F+n3p8R5 z1jt@Zb%1N9Yx)(X1scgimflD3;8w6gXKCq_OlJYQb}27%FAE;y3uStvk`~sR%&X_* zNq9QaLhs=y1T@QAA%N{#K{Sm);#BN(pyw}|sjr=azN}B+^>oatN6(k{Fr?6XtP5ck zDjU46jc>dMG9EZG;2HOzNEoW?spyj_4yUG)gY-eX8Y@3%8dbC2T0{xl521pJ%+c9K z9sOe=z7;lSh1L;>z;wY6TE8p2>Zq5ux&TS@39w0~qa<%uY%J%OJV(|vf#nqd4Nlt! zdd}rQ5n&qgt+NPuI7t=Lif)URQgiGxFp?Abgjq15kb(d5i>I%yh3eqQE2D2VnmKJ z0^*GTdk(fq?AcRG;_Sr*x(pF9uMnNVJRxnO7Zs|<&TncX^iU6TYYM+V}sN+v5&a=|M!=utlJs`b&I*f|wLCwx; z6tsZq;;4|(ma#;#fU}3YlZC%(6Z4EaV@l6 z`rZ|z=Cv&tmfd6;qEI3$RG++yn(pb^jDEE-RH%q2!}L~DD^iPI=#{Q_kf0(%+k&A* z+ojT~wbgX>%%G%NP7LMuE{Kj+;+2vIEb`R`F>gw$&zp<}6Ewj0e55PJ@(X5Oa%6Z4J){b~!t#owmV`$}^a{fa-$P?oq3p{l zD!y4;`=g0k@y&Wy?>Ux$-43WUdvS4rUQJG}he`^?HVK%`vv)6wi8jEX9y(G0FeS4B zC;&KlfiwR)K0-4fYFG=C6vL~hYWx!mKGSt+zsMpZpB>I^luo~9IYh8C4wWIR0V zeU!MBZ(tG*6>~GWQ@+D$?XPcX4k)^aAh8;R_8l}(oCe}s78)#Gh0%_M1{tV9q=*R` zNRF7)pU)fkLXsLYZeV|XC7B@JGf9Hb=w6!OXduHZhM?X9Y=ZD{mSKpg!@b6eZ9-$c zp%~#|fY%B}qdpx-5+jfJ+6ClztQ9actdc)ef&mPVO|< zHag8@GBIIHI2!EnF_x`)a2y<_Hw$4FR&gZMl^PXZRqY6vm&BarirUaEN@|p)E;Y(b zSdY<5R}$3&|2fx|wLbQ~@RA-zg*jDBQF%EghrQ*)-|Wfn%p4~QEO+uu6C8m&5U zdcXAM0$QFJfGM(SPZKVjS{dM=C4d3hnT||0U`lBz8&Fb29>N9{HUNtp1=!?e0}6{A zIRlWB{#-RvRrqSU1CgpbP>Voyey8Rpi&rk}bMR4J2osNh@$e9g;u9W@=(Ap$-yb%a zTGi5j1--t25PnB^F~A}EvG~Xky$iTY{h=`WhHAD7Weisj7?n*J!XYyXpKy~uSoTO^ zr@<}qCh(}d!iZ>O<4S~Xx*-zItTMDcFCUdR93Rz_Oz#LhHo$}t^n_p7GTh9*Z4q#? zy`_fyath=ZwXMeTX903_ga;Y?fjr*?%)r+fHFchZLFJ(K6^8u%@ewZ0`f_|~2Vp3j zX^KJ{)?rj4pCc`G;52Co^X`N-6n?BUa|#^+fWdVTWXJXa;%BFgo^+1#i8P`-QPqp&!9q*sz)3q#?f@DVHlAB9hZEewSV zLDlq#@uYc~T|S`E=DBm@PLsZ`rH-_*y+G47b+*h{43Z@Ml0`Q31aBWO9Mn}|kw;xb z>f;_7|JC>&#KaJd&6A zMH{O8BXq!UDvo9-?_`WRU;}ua+J)qv+Jo@OZPWpz^JOFG8Fc{Ri7>(!Zc0Oz7sB&J z2RuMTBqL}TbpYY{q63Q2rj5YuNC%8Tz1-MFx)O*xMSjThcjy4hCz+o3NQS#|pIWb{ zAw_B@VMwNF>>v#JN&bZ){}6mcD-0je8w;Dpfx@o|qZnHJ)S8fTDxGeI1QFZ@Cj`;gq`LY1 zC^=TW?d!|9VxiWMLQe#vH_f>Anz7Io2QZA-^YxzX`; zU-NT-dqR!!pNh}AJNmDWM5O2@rFr)u*EkGUMp%^NyALT%yFU+ZRz{e2f1zCL$rdsc zsgzojTg-Lfa3nUN+7n2CKR&i;HM9D&;~LUcR3V~gq_+7MpD;qV^Z&RjqSuzL8fd^9DMymRjJk^OYzP-dL?c@suN;ME9$=Jbum_~Q?eU5O z1&TtLFoK@&3tNVFtgGalP@RcdQ>nF{_n5g3p-^fg(k)&B>(MA)SIV$@OP9&?-d~sL zq_+G1q!{02dbOHWW8aUCoobZ#`_rz<|Rx;m5Xk{Tw@UyWm4@VP` zj;GR5e8MBQu`eG5m}~?+V_)7LUJN43yhM0y$%k<~KUGdtqG6N|!txkwtR)=XsYqI@ie<3#Btz4D!rg*h{IPc+R64DrR~R6VwcNyvYN3L$0E z&cbB;U$HRRmR_mQYpZ>|GCM$Bm!vwOW*2&e_?7%Z64t?uX`OC_M3DX=85QPT(CY#Z z(WAJ69?2-!SEpACw`>GG;yFrJUcbCaLL@v2Ptj}8a5MyelZOWQ5nKrwC7; zQwuz@<=%543ONiwl20lh<&R{P>O|BXoNNaIR+B?Bf}ZdTTZaFBJ%!4bOlv(wIrJD> z&!l!DLorEjoy&dd50&G5d=xekAB7KsEewTII|xJm%Y+9u`L8zk$HPx;l8BG!6&b>3 zXnv~4(@=wVz$UlwFNa&yGldI9DAcI9XvwepdhYz{w=F%2f{E)3hDBAc*^YL#Qm6-3 zAl-OSFB{X5rQdO*o#uEn|Dkmo6DpSK(*(hydh|O*UDxqDRh3CURA7OISEAvSX?SzV z1|H`}O#n@p=uthgEbi7`>5^0bT{RFMoMsf&# z{s)Ufc=I-eeK#+hez>3a4#-OfF)dt{IEd#VT>h5xS9|9<4(UB0MZ7hKpox=-JJ z{Rdoxebu=5feDF8$rleAe97ORSszmPE49@BX?^}M2tuPI>XDjY82kK4$WU8a&DiG; z)nrX0qmKuST8;30>GQimjV%JPj{5vn!0Razg)J3Hf_lUMyjCL}>oKk8H31AmXKtvD zsn3@bo#@uH^Ss}OqF%fJ%PzV$6uo#dmLc2Pn@md5wkCbpo9w4mOnbV}^z2)&BtP+= zZ@xX}lBc6jANbM7uIC=;TJhvNJAXO%_TcZ&c)jK(_spNNs$O_;->*}fcK`6`W0x0P zyC)^*uDf45Fmn69-LB4gX^|@7Ixa8Np+XTWwiW1Syg*(VjAQ4d>CN!@Cg&C zIgGMe4Y)6|`jHl2SVCruvPyWq$m#~jv@fzc8bjyaB2m~PT?xdUGW@?GtC*&8GY`K) zR&_xX(kiaZNbj~mUg=b9ZXq4<#Gs@jdBy9%>d?gpdEKFANgs97*kvrX+$^rqSkjz` zla#w0L5~rV;#aj@I89aigwy}}Eq_9${%d;;F9|%aEUhv zkKDa9znGC_!!H{_uP=av-w__=Mdm%C*OojP_ZljICmTV-C{KiUse~x-$dhSq0S}t)WFr@x$S!v4Swxs1g-i3KHU&FgkJ^tk$jE)J zL59~+cvxzE)ppIbt!kg*#T0hpOkPO%PprJi)UoDvc4aiqYnn zUR<;AVT{nA)uF6kv?~!+)y|&S5v6MoURNUk531lA#X>hQRHuoYMC*^Qk^k4m3)J@t zBXogLw~T@ebpcXGx}{hU(riJ`s9V~@i$OeD4hhc}-Ex;9T|vXBTL{k=-7*cjWjSy= z(k&L$i>#YPx`ym{mFe%$Ez~Y#s4YpioW*_WPdF@+Az{d`3X#wXBvJIhntX6?or*O5*JXo1)^)M_oMi@q0V6nUIJ@Np3ps`&VcM5VA?D<`77;YfQN7 zGE2+He?rz;?MM9`E9g*Rx)E~G0}$dFun{-IG+S5#??M2mjXT2Y2OOCPhr!>L{1{iz z?ZA_bpkb6B!m~+;0*`EYyd4V9JisW=zct>b^<>gD!U%f8FKij!vHZw6X={HeK#=7& zjmOc=a6@fG@}o1dEF$WIWu1t}(JT7Q_+g)Jms1C3*NP05GsVH!~TIT&;Ggo!NU88(EryzPy_xG`-isrFV2k8&+n572%2PC zpFfbb80jOkelE_df1rO`Xe|T)GTukzXT@r(n9>{tHznJeqr}F<`F?g&6KOFH!r!GZ ze$^ooi<$ASQ^_iR4xicS@Yzc9&O^!drQIs(LS2bfKRUm$R#((U;(o&xjh&Di9Ww1II0*+6SrLPA0+ z8y=UM7&knXS>qFJ14kqcWU)zUiLnDy2*YNJv&IZ0l+=MKsT^l`T2fqGDj^L_9d1oT z;P6Bc7>GU4lo+6l7;Z~R9cV>hTFi*}WMC%8CMG4?Mx@5Y#U>9=O|&HrOdM#7O-n_V z;**9a#;3(4B&H2d95FB@X?V(r5pfC0G1j=4q_pA43rr$#(o$1XQ{v+itkw|&V-r*2 z(yXb82{DLh8G+g{gb~P7Oo}ZrCSmx%g!ts7R9ix7 ze0*Z8)rQpL(>U#T+rZ(m@hNdhBa)M>w&7{Er1+H7I_L*mljG4ZB!#&x1{d;x5HU>5;n@-)POf4fZ_E zO@V8K8@6u#;_;8+^SU(s{;PJV)iF4g8RvYsA=$0e++>+Gw{fhLiorA0H|ZUU zPk7Xx#<9{mz+@xn8OKWP;l&^_(HCcO3GWVxAcfI4RI>$MDu6#oc$6;TU9H(d(+-29 zLBfmF+*iP+agi|jDDMJzsJvp{K;@l)kLU{11v;?1@W2*fS(2NA6E$5)ZZZPTIF=*4 zQWeDukMKnqC}2OjhGy8b-b3RgDsMPGDubNV4m7kAFkwWx!Y^zY{zt}gR8M56ZcV(# zxR?L5zT+dfPsM5d)&UmXB;$`#_0as4uxTu4+;_N2!l!zeX7KX?AMXg|!6Gdzlx9uK zDQNHCkfirn+j@?kzn{uSoL>K)gnw?}Pf8;X)HbxHXw_`WC*4`jCmW6DARC)3oL^Bb zly?*CZkpX&vq??~K1{PmYxa1}&erT=&7Q5<3p9H%*8~*em@5sB);PoK z(!vSZl@?J)1Zgd&x02Sasyghx>aexdN?MoXI;AjD+{mN^-cXL$adE8JY_2$Da(;K% zMdKHW4cpuk^pIg{e0~ds?teyrY^1B$;!2BjkMCY{IDm#TfYH+uW+h&|p5nT~oV>?z zj@umU#-C_jV^JESw|OU|+<^CWBCfw-3m<8PyJmwZh=8zn4Q)|ITIxosHRSNrkUK4u zkFHWe6|K%(XXYl|j;z>hQZgEqdQ-Kj8i&rXmv;M|sMm_>^LjP6w9JjJb*D!4 ztY~ajwho%q=ty!$EOFTyqZ_=d>u{tLJxh&_I8tPntpPO>?#kGqjKeU~_AYOijBW6F zn#JCwYF}8@^T;i7S@Wg;{DXKaq`ND9f5pe$`OtHBBiNva`AnCsp5kM~YNipZsN;I+Fx@x5D3u?Rn>E1D-L#djG`n7-)(*bmYyDJL#L8at3+tbVQU6YR=r5Mu)! zfR@fFt_+K7ghk^8*RaT)hZNfmWpl;mAr;l#!$xhcIUbo|3lF>P7B#*Sv975YPSJ*k@1gR0H@sr2Z<>vE z=FhQ3_P8W6M)bI|Ff(OrFTSrZFu4mYHvr#Xy@n_cn(_M9Upi=}@f~GZ>%Mp&T#NCS zFkH#PV;nQ%zkB%@jgJ8kZpKGlgmKJl7K9N-hVaPr#YgyJJl7sx3~(raVk}H}XTmQG zh0&Ly*1B`DiTAu?q`8_JUjHAwSXk_W06KS1by7Rf}W<{tr@2i{}bVXP5$o<{*wlO zh*U(v?`rU0VDJw!_^&hgWz94?uMmF|XHOCTw1#(W?IUvv=^ttFm_3b#`Cp6XXK^?G zTT{)=hxnL4FwIY=n&4E=B=F^B`pYY?c|lvZ_|$2I_QtE~QEA}s#^})_`HytO3vKeh z`ilR<5|PxIhnfq+pWE`kj!^N`r*idobG`p+M1JA+_y6T-pK`>U;H94*4M&Eq5X)?II=-!GHgH014=ae5wfB1 z{-xQk!Zu;!`F@g@E{wfTc30>w$c*3Fm|Kwzf4XMpk`3kkI@y?b?bhr@vT-a_6;2rNt zN6_U*Vp`_9B3$ziB6MDGJ;qlDO~>}mKlssV%Y!=) z#Z|iEp=_=7irIw$-~69G0h)8GZ!sMhYpFg7bWI8ef~j8y>+4$F>0C| z7jp+bbFg6QN9)H?uGFY*nAIpBVDd-9It<6FTIS?f_Z=SM3cZcSs<%}m4dsoRFGH+v zDD^dsLA~Z(({CBFvbpA97?pJEH`dJvIMf-i)MczF_)(;7#t?U$ggW<1SA>)*sD`L11$ehgZ+n0+)E>OeY2Dl4e#OZ?U)A-f z{PqQ9)%U0DdERv82mMdKaZ$v-hTiU+dAy=!`|{pn&aGW@TJ65)XFpwEa$9iC)1w~! zEV9CWNyvuVEKfLl?`-^Op7Vv_>FXcvIe&23*20ZnI|je(x8c$ib4mhx-*MC4)nmsW zjcwdmHLB;^w#-vvhX(8zwX1d?d!Xlp_lh14_;_c)kZ#$tbAmJ1&aRIiu%vM22RjR< zhkx}|&acZpc>BPa$3Ok{=e3UTncX%H>|#B3^-o>K_#Zt!Zui?)^sTvLcKU<=vW}ej z?v*{u&fovhuRj-z`r`hnS7sH3p8NAXKW#7makTZ<^1vrQe&Xqm_I$7~{>^?5T+?IQ z)RjMudauWkiRNEIqP~Cnnjb&>kLAOZi+ALds2^Ci_@4e@t{fl0E zRyw5rKp6+>jf%=%Srhe(}p`>j&Os854JW z*#qZ&v+SiiO81BDe|%ER{WDfA8}Y-S`NJ0uXe^!g*5KotCj4v6EmOvS9q{%ex3Y!z zJ+|=R<5z4deeK>6J#Q(>X*jcV_&Xm=O&#<(JAd1lMd2eijh?^q-4_!A?tLNQ-xpTI zq?W#Q_`(m9o_=sk_=Iy4M-1;>^;q^xhpZv%uMN*0lyKt4v3u?akAFOU*>!jK5AA;T z9o=5d4Yd}BKXZFa?6$q<$ES4aJpS9V`iI^9n|e)na8-V6uYHv%PwePXIr_*M{#QPd zeJHx9f9cbo>|Q)z*b__29qF@^KU}jc=b8BpdtTym(oU-k#(=(VQ`l8?v5h~C*>|A( zEzkEEU1ELn)EC$7d}2rVJ0Wv7zBX>e1A~70xjR(TcyQYij z^gD0v^wz~8kDT#n{=UcSJO9x8;)RbqU)kg9i;i5yt~?eS^=0les~5OCXCz(RaO~DQ zpHF{($^N0kcZb-|-IQ7~>&`WGV`E14j~t++^ywb<>V2cquYPeu_<;HS6Gy)_X2`?= zJ2KySHu$W2Pdxwc`8Nz}N?sU#a_;e=uU$Fj(`N(E`{DYzzrOX!ilY3meHV6q=!}f7 z9vw8dC}dZ~j;3F_=2m6Du<6H^^K&WN6M z+qAdeo&CHL`@nY}j{WLb)o>Q|%7WAO2M=ER%qJTzyVrT+gP%-&>Gf|^! zU*mU8<1?CHQ$jDCvge7HcE$F7VBORo$K_S-h8#SyX~{+2P)^3 zt=+hH&JC}Ro4(n4{FAfJwx8@2v20{F$31U9`_8DDpT4$q?q@@mCXX&(eQ-mM9WPpD z=H1k1@AxzK755y~HM{WYjsID-BkHc(epr3(8~3buZuGbzsY9FITTxs5ey8Tf+XgqC zowMlV6S1Ei_-K6gQ&&wdf7U*8z^M;D8ovF}_wIL({`T$CrUh5jRrjCnH}I^Z=Eozh z8}Q3ZN3W|mal2oN|Au+j_4@aZ@6H-t*YoZ@-v;d%oK&7wy=v5xS(d6*C!T8l=JY-< zel_5QF&BO@e8j)EHm3D`d{X0e8Ck1_eYvZ8$ur>(WCwTcJFeepq2{W7^QfdwX6HwPo}V|hVX1xJ>fBwf&M&0ST>WC!n(fi|k1yPC$|rdl zVGGVId?YgT$s^0IEnDJu?U%bZJu~a6-KY2;D4w+R*U$&=eC(dCfsP-_I~C1+=!Maz zfBNbV#V{r@&Rw`+N;KFy0&rs=*P}_B_*`(?cGg7X+>vFdL+|6@yhCUTDf9kEP2L7;b{E5X+Zn*7&#kb@`8Xu5DC)E4XW!L% zWZ>?ve|f{%yZFlWxe51uwZ_?X()7;9C-jQkbozB^U8}5P=fzZ~EjyAh+i$~y;m7;T zJ11iEW#{#+o|(DZ{6W*06MJudJDGKwbNA7ZvTt@axc;>(eMHypA0;nNJJzRm$f14D zozngMszpPtv0Z)SzD2!mSuitu@~3y4{YuKlYr2kmZP`1yrHNPrhz(?bWmH zzTog$wo~HL|YEJaNE%Vcn;TE%f-=_^{nv?b)jJtH<*z}U#`QazBRMb@7KY|)WQ^-~+c4)G1~~0TVoIs6d(pIp{Fokc zvr?i(071{Ve%Brz<%j4AGSzT2VstJ{q~?f$ErFQ@b7@R(dHw=mQ@S+g9E^|X39}p% z(6-j)Y(S9lUZ;twWJH*8U5@ZF+Q5^`K*2|`uSq*=v~EasNclsR@-m3JgO`~BtR;tL zM7qK+Y#IJX*5xPpg3#S&yMT>x(t-3$SS&?JC&h4nRi9 zKLzeJaQD!{ov?+WJXGO(58aTr41Dv2^;!#lpfI`?#6- zmv{X0q`qWjzXE?(mXpoIZ5jOOg!r>|djb9n9RC`MC8;US++6YR=zI^GU&)h?-K(ox zI564fN|L(o&F}CCj5e>_V8Mg0Pa)+(HDB}wD!twPxMsfvo9@yyl8t@nugDI=ni0xP zetJ`Y{9`pg@etj`;cF}4Lt&Pg^YYxWz;;xq6s`UXt7y25fgd79qe{QjnNk#u+#u7<{pP|ZKIF&RzF6o zyGH}2Z3Y2m8FU3;LlkV}$CCGmYP zE&l6>8~Iw){L_XZ@!s$dCBC&Os42f5dyg_kndQ_Z>R5pog`KHxRlhjWdK^aah_+Yk z!?ki;L6cyKYC%)w(j2~j=QkC|hY9~6)BC)zD%z2fOCy&AG|Y{ZC#@tE$4yK$7D1(iP2xv(D76i23leKV3ezY@C|OiRwcY~oPNU^0SbR}w=J~kC z9pyI9ci&B#MLkmh{N#G)_aHTmmSI3j=LV5Uo-vIBh=OP)N=^|Q$;f=&tweSnGFDNW z&zF+m)RrIN(#&6dM(uCzkKM$mn&I*Qx3NE_eVzuuJL-?={JLxeJ!5~|9-gs3COpm% z8c{(n27b9eUIb4hV3a@VO$d+ll(9d47xaATkH0sR1FDf5V}DF|zVyevDO14hs6Xxv zz3Ucn7~02@4fV&g&p?J~P=A@q zed-UTA@;opLjF8*XombVg$FkIs|@~o4gN}OS4rwn>Q9WqctvWXF0?m|edv8pY@zY7QZo4g zv}yKrWMgbqKsLrm#Ls>hOD!iG46}x8D3fZk5wD(X?8`Nh4WfQ%f7*vTk8JF>5&w|? z8nUt9R!BDX+2~Xj?Xx|k+0T%TeX<>7W4|qkIwjR1Xc+r2!Xv&FM&OYRw(uBu7Qsh6fo_WTv84N`AC~8oi-6Z3Fku8e z;TN_H@3;^1$_dhwQ&i7-2)bm`eH}4ApmgXB;U2K5P9a9{<2_K7ndNf>rT8n_JO>UU z;6ZUst?~I*sd}5IRC;qjzqN+PhuXT$laPqNG4YY}S0G1ZWX{LXlizCYgiC9GVuk0w za;sU4Ca4U8YpJ%W=0!UVgIhKN??M2HqdLMfO2IJ1@kI*kz>^K-iHuPS2+tQO_&v9p zp@?-O($xW)Lx%qyQXp1dsEzcM3^1}6+tacIzpqxB?aXU+{=6LyPZEFm=fj&C?`owL z98Pzd@!x%X-Zd_&3+80>rbdLdx@s3re#03K5I-&rIfxWfuz${f_a#WpEI8dbr-}m0 z6X)|j7B=CLyB9uLa`NGqjiA>TKv{Cy!;1l)%w>evmgLYFM#gi&FB=hNlpMmlR6-PZ zWXoDRTkAhaFaK8mLI0Wa*Y_Vnzo;4Y+L9sT80=mVL9>Ny7-fj?eCd6LK{nP<8CfTRD9Ks zj>{n^m@eT^^Tw?e&E1bRxW`Aj(^{&U!xq!Mr06Zy7I%JB7l>4hYeYD%dRX{fsEDYR zF(f-(lDEz{1-%ttBIN7N6?LYHmNCw^aVKF7Ew-@3jrjSCR|@~^i#5d2R82S=$jvbP zmZ(nt%e5X{#-5B`k|d6#kK&UQlH1smtpQ9nLRyVIS$lZKo{aF?l0suowp&gVZo&0N zDI`2!da_kM_GE)mFJfhkvLMnWw`^p1$5JSCno7Z!o=iv~wIxZRtQqv4j0Ddhl?9%T z%0$7~nc?{fP#xNDTdV9sjw$A8Shd%MPspt%jDirI>@UP$t`?W% z7363Vs;^tLBcE10Y~kx@bCy<#D*yGy?n@Azel~mmrD`2-l&$k<=FGIC=AkEm7a2ex z#TI zRj#z)$i4ERvMua|n&kQ!hut^$?>xNj*=L@4=GZ67&YexT3~bt_?1`=ktD=9GwN{&& z-B`MAI_OSV5}YKnr?RA5U}&`t8eYtu|sJ%c2L<_ z)8xmmuFf^R0g5|O5}jf|#qj_m#m<~!fJzbd<0>(`uL#=N^lGn5?}<{jf#SC4dfYnEM(r7jAD- z=JU*MbKjkZth5x03Yx0(`6s-c>V?vW7qGp6!w{JCf zGMV*aFv=+5`68q9 zz=NxSOEOBzzdad^LBX>TE{sT5_=PRQ|A>qVI%KyclR}26o=FBTlp;{O(O8+nqVZ9< z+~yQ637Z(bwSVEWtrLFU*wTMsdaj<5Y|slhHnK5DCq7zs|cWo8+J-cs4Bn!{sa11TImyp7YrVw4AZOg)YepD z;zz1|A=my3j_=pdGtFI+F?W4!?mPZNvx63KzlMJ;b$tey%=|-2!Sh0Gk z3a0j~gW=r=?H?r2&?Iwhon(qfm)F*LjzsYwfDe6Pt(H4gf2ivsT;^zB8;`5vetT#1 zd+Nr(7PBkm1Ws#zt@VEYfWA*2>j)Vz$`t)8f-f>PQEy4rA?O)psy#fTOc9{_=}I8(l;M9z-zQ{>+Ol1lD)pABQnfeJdOr0e73~4w zT%^={dB&CP$x>3h@BNoqs|Z<^#9m!KcHd@4#k*|GJ>KNH(yVN&Io@5_Y<(kovkQ-a zVIR&lGcM;oHB@a6yL7W+GmCo>SfuKrOQg1Mhl=?J$YQR< zI6`)evY6_lEH0I3kyFq!%3^zXMp-00Uu5w$L%M?Zjj~91zR2QYA7znF;Ix%LLw5f5 z{*C%zGSrqNi=DYo{o(x^379_Y)DKdNmxTDsxSAYd$Ic^)VjS6?93~|DzJ9Yt%af2p z{?9A)NXlqjfEp31Sg=mKoz8AyX=a3F%b$^*R(o@Qc3+$1fp|*neNh<*CXC?o9sm#? z*n*oenk_7WM>>=GwvO<`{+ozT^xEP#8iEU+C)^_Xk&Fm4$^+ra<6D78Hbg)--QbxA zALW^NjmklMMSXxM1DtFr@c5|*^1ujss?YN)!#nPqauO(lryDn}CLvs`WtHJ=t%MgI$n zN4k>VpZN&_UCStsVQW*nx2P2TKrzgn2qaOS^3d;|#|~`0drXUxu~4b0Xz~lIycBB8 zH3_s+{ZCdLALfWr_WEZmJbYfoahoHmqRB+B?}kK<=IgeR(#Q{lve^sj|xAJ-p!R! z>*}mz%yXqzD(Q=?+v{vgh>rV)7G+sJip2{b6t=d(l`-$f)Cs8ND^OJfP)WRvE)GH^ z-3>_-m83$=XN6VKg*3gAmQ=NbRh>zL zh*43vRmmsIySQwt`r6hhwhgX~)$WK}m5kM{^mR)5syf?Bjx}j1-kq-enj%bE8n*WI zil6)Q!+*z*eT2VI`MEDV#~Ol;mGPfS!Mo?(#3kVg^w*2sWu5x1T?qJ38CsET2 z{LmIk#-gT$*!bpxLtNb*5`#uzO}kDI2V>WJ5@Ln=E8h=FUtW$A7Jkb2F5B|37q+;& zS&(PYa5)Jh5aF{wv;GqOi!y1YD}4$6`8w29zAd^O&w4L0*;cx2D>1QhWvsMrj^2zX z!ow=*-k7U=9ZoeWM^3=ow^yRN-Dz4wjRTJ!Y*sSf#iQS&;r_VUH7VTX zd{;RyY@@9n2P7A0Mi!h zE}k}cVXjH5T+Y=f2VQDa;I=K09&bO3w67382io!TW>@)s z5RXvbY{v`kL^o8Wi&wDyZR?`xF?Rj!17&k``6}0>hUiHfAb0+@4W@dLS`+lNvlyX)C^wn_dK9)TZQsxEC!)e+bSi^ z?6Pg}CkGz-=JNLyF;TS;KG!7ta{;&v38=eJ8de?0I^2Lp@Sn8GZ9YeT^`6cb8A`4k zL**vh&=ij%8s4Nw$;0tVIlc0YvQf1|qmV8VO{j8TgVtK1ftV+0r-xOYrAvp3^wLj6yMNM*^7aMI2C6a&G@~bT ze&=0o)K6actDBO!a;wDi@>(Bd-M8oKrpBL8f^Rj^ z=haqcYoLUzyP7sZsS!)LZAS!M#a7vL@^~w7(?KFbFKkRYA|46B{~r)U_trF(pn8n- zwlsB<>QGhO{MCH$p%Hg$(|0ICYbgCa0cDx75r6gik#m^EPYyHSHtd}0~ut9#)iKhy;`6Xi&NaM6QpTu*8bF9x_o zPppR!o}d9RcXM{t@CZg`GVrKu!VnEIY50Vj{BsTY6Jf?V2H{;p5i}$4$cBQ@&7u&b z4Im9isXi!gZOyZrLmB%_kL8^w3G9{Ej_28;)>R6v&xKKi%M;WAM8S{s#^Irw#s>4E{F_es#eBlO^v- zl%s?d=G*f#3#aB4<`!X%JIir%agKe8J-z9gqWAnLCq*xNno;T^y? znW@NU;PXQpjvyP%cnfTLxoHHLmCgiTN;Y`#A=vav!3eMpg*!nq^_U63F@xI>^iqV8y}=P!NmcyvW=m+QCeX*~SSfd)P;*6sg)8K!f+N7`-CQwq3>P?DJi*)4KT$rtBP^9rF>^Rn$l#q`e) zbYzCV%18SdIUr1Wj7XMwwlzHR-p-BLB=JY8KJ3*W*D^25ySl#^N{7Z>XSqvEknt$j zc(c;*AdbW1?7pigl!L}taDyQEZR{_8>yEesv%GECS=<+PX^nzE+`^oNPXhXB`~0<` z>Vskb<8n*&Fi|upY$0bxxuv^pBzN=?kGChcix4IoLC+|+?co{amhgO$+ZW_S;cicE z3C|a~T>!bIv^$bpTB+v#9{*FT3-{uOs4jfPyCeA=k9xVTjdUdtcZ&Rw=kJhDY8Nup zmL#9lR>FkCkt95@$v@iQSA|j+Upmf4GZ0mR?Z59lsy6-5q+Wd+ht8*-k2L9gD!ODo zkKq5oBpop5NDm|>YJX_%LqFW0l~2|KUiU*DBZM}OjVm!Yd+;NjJxDS0fizth`ClI& zQ#l7~WhP6=ol%bIjxDu+M{-;&(UR#I<+we(7(|kJp74B;$6zoCSSr=HR*Rr~mvi8TDVE*D%x{|Ahb)2W!6X-{^GeU#lwLC8SQD7)?98D*F7 ze39KJ4CxA4G0HCC`69cseU#m9|6{UCZRxx0%7-vSw~J#)f2ikePj)>AIy#cwWIEi( zO~>asnzinP<70gph7mHa<4md@2T1JoCSF?fqZ z+SE6buAwz~-bYJ|*d5Bb)%QMnzgA9J&b`*H#huJHUHlA?B?xp7ajAd+w7}BMmaLJnR2f>W;XNc$3zeUBl?8h`Kt4Cs6(obKodmGWAEu zm~jqFb3IgfhjZZZ5-oBHdPbRT56>vGgy)OQ%Ku(K=?WP!$}HjeBC}&4vx|TW_WI2| zqDJ6d032aNy23AP8UA<3Eaj67wI#`{agRt74qYUr*Zb|B*9z2sk09CN;nL;Ij{3&L z-|-G)Ezha9EdAehH#5{nd77xzm9W~Ar}prS@#l74V;eWlq)si7kv}G(I^{rFSQ@e$wi@yio~`ky|Fq9w`hh{ZFini$CYIr z6d7Zis9u%kirRjBrxdRfbi*D^loB4cF*RzKI4!Jv5M39x;6mVnMil7v7KequIvkC| z!r0XzVu(3R`DyndoD?pAyEjh%^{)5^2ZkS}M7GiaOT_Q}JI@M#HE3c~>Kr;OJT5BL z^d3q?he1+3i8=0tyBkWY9!jUT&42T#u$(m|2h(S~QRWV1%6E8`u3q^j8N_GzGi^&o zJvbsz2KqxYx^ow$Xs6skAW}*4)EW*Kr$(i^2cu-SqM}m|Z$>>vDfQ~1%CC4GTU)H# z53dlnH&#(?*}Bl+!M4(LzsIC-uYQ)@r(Z)=UctfGttMvO$B#!l z&UdGn2H93R&PMIvH0(-VNf{PJe;>*Qs6`wD*6)q1K%rPu0`gpE`;^=+TSP^5igx<- zDH(&8`PkF(7rD}Xuq5vwC{_9 z_PGDy&S<0?7<3SUjuMxz#!+xrdbrEB{7^0(rrnafHSEqolniEkfWitT7IS4R<)cZ& z)tJm}j(e4aGkUXWmuc6ry&&rfJ&n#W>ZR50eW}|v1*^AHx9SYo86@amx)?XC}p#0@8K}*QcflAY6;o1_{r0LaQ)(GT`UepeSCMTxn|Eoxu)@s!~($v>hYhcI4u87lc34pUBzj+W! zY!Cg!i)mXRBIDi9^mV2hmF=1;(KOVG!#$0>9e1J17w{Wm{K`$x0`r;lM(7*KZ_fO@ z>1T>iZrK{tAJ-(Bf^p>qB@TC$FGVui>3WhPF#00F=uOpVaI{>;Qg_5l3MA`f(*Vu_ z&@_GuRFygE0Kamk9cr*y4ph+%v?f0~zF)pzYmlizy=BFV+!Tu}@Xo7z5tU7qwL1Nh z$9E7;+oC$EH~n;e^!L^uaUbADBnuVZn?i8W2v?5K;&nD&$4v+H6YihtInr+DEzmL) zpdXkgl>d*tw}FqUI`hY8V34R&Z`4$yrW!Q1jG)Z`0@Gj(FHxvOu@dWB8c{*n{M<-A8IMAOMV%!rQtDS$6Yvn!oQ%F=uKwCJ z*IswH6mt1qwDRET`GaK(UjR-2zpC0l`EOugiq8KmF$Ub)2>ud}<{ErICcRF?lQ-q} zn1952ocuDwp!>o#YH2ZoaCGJxJQJK+GmLRR^ARo~pXo6@=6A95p?)k}G1yL(7bE!0 zAN3{(uUrY>*apg}cU6c`&wMu(aJp0P%ryw%sHdo$f};<@>ABU%`+Q3f2~V^k%f_~5 zHmdFL=sN(R_S<}rPNk>9%GcvR&KiW}p!*&Y%6{XcsTZ2s$vjJ7?t6#a>@AvZ_AOkpsAkFH||{19zGS!R%90t4g*`WTPDh3`i{y-FX-2H(WM=FQOmKp*ih&>!yewO}Aq zzyD+mZk`k9qYnf<9%}`{9fHsFD)G#70{@Rb;QmY>-;F{Vek@x520r!t?`IhAHZcsL z(hlkON}p?6#-AqrG18wV{aa!Smw1a_?2&rwUR=$VZrvL$RSHYl*S)jQ7IbRe%d_!c zgCJ=fEt{8PLd*yMg1Tba1U`mT6I@s+CrWWp-X{;rx86PR{OCk{!dH2i*!h~cDdtys z;@sXNPS3lup%U+oyS|3DwZ(T>{+KEEwBi<}(hJUAHuu~Gw;bo|fBI{0&Kegde9~iS z=KRF=U5lS`q?>f+{1m{8QpA&xoC%J3F#R$3(GdsuF?e4P7bQ}YmCqN!N$9kOOh1`0bXM}x% z2zZh*hFnVAPncmEdr@?r)ZftM(H9`CAsA4ik3hTB-tDc3=Xt3(eZ;RO92$5Tu8sUC z^k)3T+;uk|MILmD-U$0kTx!e;w0v-uQyvI+hB{jT@bUL)KNY)6m<~LraBl=+IIb`R zg=2f`PQiTvksJ@%;6?*RAE!(&9qwIdz_DL-r_wNSk8l+lpn{{X<6Z#*cO#Bv9*$oo z+@rlReO#;b@JWi(fw&j&aE*OLTyqDshdUhJzPY#SBRq#WHC!qW z-({auX^DkSALDL}`|rw<3m|bF3DM?g=NqsEkmumGy2}IhZ^AFEfCwOZDvVbg8)+A^ zm*{D*)X`QTq{+fO**Y(1cT%qSWcY>9ldjdk_VBZz_QbUFeK6^i2u#5W7c!7Uk#FeN zgHEu-`sI~>j=z1@&pC>4{%7i+x9_9CqiHBE02Aw6$X(8Y@!ZHh>+*fL3M?;j!2Sy! z%kT)jsyyrRzX*{E&hHnL_&4JdWHOXoLSp%$hWF|wI)R@+s+(UH_%EyBQY`;*5FZEI z582!Ot^Sstlbn+sf4nCUPX;2Jt%lFz4Q%K%ytnFqzyahXZW!i+>5iSD52AM>k)Y!j zN%^gYzhHSDK@sYfK&*qnr%2-kkm(KuwTT}%Yx%K1FJ>#WY=2GYaIR}kK13R#l4HZ;v0dOy0KI=|zmcgJ&VE=_<9|@WS0_0JoxwrdpvC1v;=gsqo zlH&0%#MGLW#|MB=m(1Zz!U9=2MUMvD8EC&M)F(&Nrco^DTmtloE^V*qWr@Gb33=#n zyP{jFLSIBN?ebbp_IZX7%IiLIyELu z{=XdKbtGUouGwwGPd=Y3!wQd;Jy}ExM>sl@|IY+h3RpQT#CL>ChsWkQ;&b$mv@}dS zCfp2>viqk#qpy>KKO@kIIIedN$6IVg#cy|$68|baEowk~c05+C>83K!)`Y@Z^?sOV zTY`N_JU-ohCH~o`>?h?IW;-j#uz8Ncv@PKg0*^RI%AmOYWie^CVIHhG+~LJyYaEs& zg@`1hc*S_(*;(K@GRhz*o8mg*AL(Nqu%15F2fw5b830T{q!>ufN~6YHC=XC(=b5@> zhi0cyRYBY#7XQ#^t^FCwC8-p4dSMmG8R~pBXjgUHPse}nPfYURuCJ*9+*8(x%`boF za|dv$O5YLsZ+!2Ou^URx!j2GkELS2r{8XebdJ6Z4GVKm^3mVkFJ0!MFup19CiNHmt zO4yT?WXq*=7b{9PuQ7Htc5>T^?WjXJG2EwKBBea;w1D9LL=Zu_`Ox#QqIZcqd_5Zt z8i+lJi@{F`BFWS~{`%=tqlf2fNKD+IGwI<*v=DKKEktlO7@tjgNSUT8$^JmGm7Cx8u5cc55>quKJ3eM za*YvQNnAdR?W|lr9`rV0_-6GIKEp22@rWTwkW1y1)o3Xd<_pj0j6vwMONG)2j9sG1 z1Zoz~t64PnR+w+V^9-Fw$4=tRLuo=9q?@u`W zc6DCEp%vp{zfI{nwO=B}L;EEH{Z#ChVa(943ygc>eY<+LF!~6mQ*7@RmQy-KS4=up zh!+z9!}_zU2*+oWPEp>eJC&YEr!v8n;$t}!L^6cSg-)HSf25^h(ka5}IH^9Puk&ra z2s9%OXmMD+Z3F1pJisWY(o+yp@r+}uywctM;-xiYZ>2dr|Ho}ydDktcYLUxZd z$p}TAQi3%MEfY5_&4-nkyXLA5ED6)6M!hG0JLSC(l@bN5h|c**O|~w^t-l{cg7DMvg&`24}Qf2 z!>{*PfP%iB`}z|5LrRQR7lqIY`-y$bFsC~=Cwgg5}bTkol%R?ghOa$RlWa8GjmC7zG zr1vRa7bIp6gLzNr;#d`%7Utk9z!I(oObdI=We`6^L}vr3r2%!&8j+ml@$XM))=(%(EuS3A(EYn@4wL zgl`#i2h!hDXIMg8|6CQ`>g;#jv~If@i^g zD#QNJSd~`&Yd2CU0s91YI$~OpHnB0sRqTTR^d?(IgtsAd0&;}8{Gk;c{sW1E zLc3GR1>(>@l_fl1l~B}n2x`l+B~Qad!KO)6?DJ-v_T=N()=)vQpVR{-qjIQI_^4Cy zSD#7#%8C@I7wI(Xr=)S^c&2uiYI6W!Hd&GaB0`OIOT9kOy<3ITvgiJMeIQzaF1L@|ZFKFMhUZl;+G3>5? z-57>vsF&~={;CnCd{jBUpQ8fs8NSU3FEYZbjj%`Ly*W%$eYJLQb?Y#pA>NJa*YZd) z@r$W!NeoljyyZ*hN9X$HNfnTJbC)h%yc9vcOD7X{MZf9Z2w4fr%Xy6JireX9pm2S` zdF_w%F`s<~ZO{2?6n)HNmq@=7z8_t9we-37MBBTy^wC&9rjLQ!N&h6DZx4Ow(9O9; zGa{hrxMiC6#+2s1|Mdt5IGmdIGVOoefQwIfiU8)fDmtAjxf4}?GRjB${*?J(<_dRO ztIL2(O6-iS`^mVBuPxGUtvQAuu}=E{W*tP?z1;WOV#l_IFolSH`YquXLtC8dVe4Cx|2fHTb;^{PSw^#@P15ecJ`t4j<8J^JzLEoJ%#p;NM+u<#;8TjcGN*7p=K((!`^{4 z*NaY7XYx;&eIm76t+l0So<#7=c4c#o~%@dT#FPN?w48(W!18Rqfubf%{T0OY%|yS$F>~v?K10@VDXyj?jlVJcA~PRBw!y zL}FX(&XPH8Op{Y=>#8?!e5<0Fle>FO0d70kgyo&!An<}sTy&4W%U|7={ChM;-%h(~ zuNXD^cqc-|{zL`$62!)+)|Sa1bJ{+LA}0c8;(h_{oucQ(iV{~z$n?u$I8F`&ak`@9)I29a)5WiJfWr8aO4AWPRaOrp$A+J(E@UK@H$vBmU z$-@v%pN|zBeVvCH2i~q5apYN0^^81B0bX)nQ#qBM3M*fa|KvQ3;#A$#siVd+(y=ee zvta7;9Q#ynLxv}MZ(SZ^su8~22w!i6#f0kd7nofYZ=u=k&$vw@*1d}H@HU(m)gYM~ zwZu-hlY%k~K|@krDfj|(P6fl@AJ)qF52erhe+YL!eee~J%kZ1h=UqMIGgeFgb^72p zSOm>6^lVTOC+!sByaA2TnyjC_LBlEGe!YdX7}hm9e|gg~#{Ink-fbC$b1)8bh7 zw36vq&RtZtvZOrv#l&^~$lF%sZY~%@yA#uX>LX2ZAiY#`5EHSl4bafP=elH%JO9Q0flLP;azVMNJb8|kj-CDbaZv)>E zj&hQYi1c#@mIm_w?^s0Otw_GL`G$7|w`kqUS%VVp_ljv+K7En%&I9mHz_Djl?`X*0> zq7hjNshP*cvMTY<`6uHTv#me zU8Sd{D042%1jjts@yZcSr{n6KITv1R z*KUM9I+h&HU3oSxnLJ>vp@xH9+X22=Xqi(T0DQG;)S^ASC)DoT5wv4X&Qgd=^MnPC zN4T^d!u#wiA036uGb=a5-}hT?`HagPn*KEZF< zdqU6Zi`y17xVN~ShQ+Ng1b|EP?5g!;)f=p}-$N@k9EzQqw9zdvk>bvYR{dQJZV5QJ zEfIQC(O2!-PAmmM<N%BuEPqvx|v*n6KfLPQu~OK z8uNv?8jm*$PHSa{O$jvYdV>8A(fgygkX$Uqt@<*gsIpC7fI!1jiZ`f#2~8}>yWKge z0&~8&Td}e!KFJSF`nv%e`asOpeO>WM$KV3gg@}sRHv8)=E>@>~^8jc3YY^#FHNz-{ zU9~m7@KHanN#9>I=ioTlnwWi0z^-b7-3z<2EwX3jv7tSQ=&u5aZ(y<4f05x% zeH6GVdv!PkVjIDRZ9n|HZWmoTYrU2jeIku&)J))3e;&e#A&dhvf171Ku54YlIO6Hl*w$c65O=F z1(jer8|I=L!ON^Y4|A#g{-{b`&{@6C9tte3J5};D-|hn@!Jvg`+~-!k0SzG>&Zu4o zDN0o{svArMjv+USe$bcr&dG@>hwPykL+6We_XQk%Va(LP&pCDw|Jkz2=GuIxz+rU2 zf#C|Ai0QEpCOIqxdf}$jCcC1EvbJVQF;1s|r)q=$15^cyNmWm%;vPyZZY7E<_^_8& zy%DK>qV6;lH&O5l`#?K+wL=)D6dzSQ0r^qv38!{lqUdq9alS0E)lh`S6{Wt;scmw; zmRfMD;TSYmq_Vkg63XWktkuiEFH+qEc@kbip2UWVHTkzta&-)ZB`toCC}v&Ryy^{H zoH-Pu<5u!%Y!MHU(U2s(o7@fuKib)ICPsaIJ2)4JnVjRC{P@C6uwfEF|2G`K_p+A- zDSLq}HvnrLUgQ}&$3$CWlmlzuh#bUiBzqF$er50Rh+_34O3xp?b1^Jqppqa@Y)X(6 z&|7OQWpD0)5$LFJv3b>-N#69yYm19cEvs&}*8T~VwRgB?MpatKmq@ys zvl@PaFX9Wg3RFg4TlF^}0@M^Vy#7i)4#67jH|U4tYViV;(VZ7#%Nh>xEJa-b=wyJH z3^Pd{YJg@sLy-Zn6q5nzM*I+3WenT5su9+N_-=|?AV%|&HxdLr^OCjpGX#n?B2fYb zzKsIBiox*@$UjosW+j@~%b+N2IKAa%?$KzkYpWYcMrcqc0~x_O$Ri{d#%tS9K3<+O zfS8;Xscf^>Cip6qp!`qxDZQStGEv7x1WZ%MVLfNa3eF@18VGcc6?}jd3~x&W!swra zY_I=>aVs=ud*HjAWaJc+dv zcoW6p4-W;|rKuh+3n7A6IEa#50()INCU>zDd)NtHlDP7aT`*PLZ`}zrA8CuZ8gwT( z)Tw&aWit6^#xMe1(%@8;DQ_8KsqiFAhi`l01|3hV^9JRT~^p? zcoKl52!BW>iNMuuMt1-?T!}urAx%XZ`zz9x>;vT$b6GNvSjVA2b5XuTjo>zt3G}&$ zNPfdxi*LfyfZ@@Y90AayK}Nk7>mcPat;^S7AFv5P;Nir&nd@ynbG^sr0pSqNwKpLH z@G`B-Gr^hba>C`ZE}tsbS}JFjiOyV?6K;n4O8hH0`k)P-E5g2LFG9!ScQ_e!5bbie z_f@J)L5oh2H4MhOT*;`}m+55GpVJD%K0eO~3w<6L$M?FdfnjqWeV*~XSV((|cu(%E zNu!O$JaqNbZg2N1{LiDzT8X~7+CQB5I*jsgUB3h!$@Tud^s(M2L(Q;|U88NjgMrHM zPo=+?KE}k4F;FR^ZU7U=_wOMshJTJ{?vd}NkKeIKlktzxN4QOf-;(}9$ZqF>bD$r&=-UpH~QJR+LI8PRuTU+8j%`2Nw5N0vf#I1Vz#iI`o+fkKUhz7x4% zb!?yn;bIvs#Cuo8N$yWVmfOmOk6QIGe8kHc*#`Q#JVk%ZJ-6BDcaH09^lXi6Tji9%GcuugPsAMgkxW(lQW(p-_v71Dg@I>kS87#!a{FP3^&xd`dp+JSKyiW8k8h3dkp>~g>xWo2~yWRaCqx|=Jh!vZbXx8f8S@-^QvrX&2{*1 zuh`FT?CM@;X`UV1fIS0i?Lxc|iYQ>d@|;ycyVjN8k-@Ea6gC>{*haf@Jw$ZE@NS~E zx4lBhOQ16msa{WU-g+U%S+B%->&q%1tqYEV(!r$rgi%#k34N4|rhYLdMiDG*S{tyarz#i8V&gaBA0sdxacPGU$&e2HigB${wEpH(b$0$!%MZlWrl&f;9CU=JtvW9OC_wx{CP14So!x*c;)eq-|!d!YZ0DiV2y#5X?7v5^E{wJvWK^^^1Gi zxZMyu*>9*=+dVk%uX$4a+VVp-Q z*VmP05KNuJmr$vqV2bh*EWU?8+6TE5ge9$kvdZ-|_ukjcDl}#9N8;Q5BG? zL_vcfTGdVd?RGV^4M!m^aBrdrBEYR6S|^DDw}EI4jW28q#Cu$#^{o%s67P(vW=nu* z9VglkyVZ3kVUt=Ph}+o`ki26cQWCS?mBb7u(K?(!7b7sOKzIEB%GCq(c#Pey@Jixs zqPo|v_R#Blp4eo+qChsR@NT1wrFy+oAXGw=)KxmDtfX~H+@P(}*C!_s>5)XMOr)ww zkk5W|;hYe&&8W6h7z;Z#551gBCU z0lUftmqJ?(GZwJqd|MDI%mVL2B1sVozA2-eK#+e(2q0Z)b>$M#JutW&sd~t&KV1kC zIsvqM8$lS|rc}hSQSF71I8w;M7D)u$(NWuk zw!!?nMs*nFHNVDa1zuQ*y?9{r1TPhB17Qu@hQgYM-8UF=wN3tZC9FBs6;A=TghmO4 zHOl}PiLHmQ<~w+DB`p&uwh<=t!T+!)rD<@__ri`^{Us!Zl6+*ufMN zb0TmSCocB4>|jaJeXQ+o6T#yQVwEy#_r7-smlMeOLXGQ`X=5`W(6~o~Z0D!oZIu&z zG6LpWXaUx#O^DC77CNA%#WXXmg)+gJYaznrvKBg3Ee4n=9OoB0b1g);8SX3bui)r| za(b@!_}pYW-9evEU)QPhyoBU~9zU3CA@*guwa~d*f!N1vXXO|+&rDpcUc%@5Ta55h zBdiuj-rCAtETs|62onq{K4)!3ZJp+-2)Zd4Dvs{Chh{W3*KH@FL%D9dh(7v#9)0xd za{B1Ef2EIc{WVObe4mj1FED5sUO_nz(%DBJ@|oiyKw~`Z|1y4-4A;qU6mg9IuJq4D z-VB$~$9FX{47FY?fcAQC0d?HTSIbX$AJk|g- z$7O?o7l#*K3~#~Vg^HJH5~BL$aBB!m0U&XD0c$Hjg5&Ru^wl1RGYPyQV5|LMWKZp9 zLI-gOAW`r=yNa75VBw!f=3JU?g)g;E5(Q&vw5L;B9=?UQ-tur-$vHyXqr<7{u&bVr z?6wmBhWD6qV5)B``4UoeOr>I_0hs=6f_2T-&w8Ee?$A59Zz0l(%O_CkjzrP-?CR%n zLP31?y!%;-xgM;bp=?nV96BWrYeFhwApMueR&=ennju^*BhEyep=LO2%Vjj@gIg-y zvdLRXSYmwNp}tMd2CoWp82`$0r0foLB#*E0iRCq`<>kad#**+ z-+}fu`=2C7kK4+yc^!R`NhAvX8w98r`Hn;a<<7N1Xcp)5OQh+ND7+?(QjD)1cnpPp zkjdfVnVBWihF+P+Pwgx7AlJaPTn*b+&=5yCR02HZ?XI5J8Pz^TU~l^rBCfBe`$*?^ z*^gp(gT;kYw8x}ne8DR5hhZk*_-xX$S$wHEm7Ynq8{03Sr_0wuhm!Ot3`=NJ$^7~8OVTe?8|igt|AILdGdJ3MKvTD;hT{H*%ZvUPOm%>;r z=Q$_hM#1_wQDLWo*UdSVT~ySCIu@eTfz_!{G<4N_pCGqKuB}a+NPSrdW1ACGAo1@G zJ)J1}lD)HUXTvsE`*b?&7rdMZG(vzGf&^hJ&!rR~*~GZhp>5=cEcJQaJgjvu&--`` z+zlmP;B8yg9X!Li1(kByHpr30-AIXmCtS9xH#rs0+c>UDmBcoeVv_BHF(542A+g}y zT3DkCqYU!GC8x5@mcnI0jz?8=OA&EZn-hQrltnfWHRujO(Aqh+vddcSuoUu)>qcyI zjH-A7;#qmt6)HScWe|lIKwDSoyLjI%USFXd)mkHol0A-17Ne zn@mHSP=&c8c_P`ruH+(kLRH0uoaaHx)`Pf-$8o_UdUP2&Gt9)bRU!3LsOvQaNfA(E zCVL(8_u#x!+5` zve0FlXC}eok68J4)28mpxPFjI#^<3%AfaOU-_7NJ31fa=@P^B8q&UAmk~hwUxNB7htf zH1=;b0wC}Sonq41chTY_5zj6qI6HvPCLjE$mKI)ne6`63XM!umH+m9;)9HhHXP&it zM!jIBa4KlhSiv2tQeNP?x4S&fg@miL0v!bERPI2&EffeL%J%YTHzkiI@kADwa<>Pb3#C4JD@ z8|j0t-kf@cT0j4uiLRE8mCAG3`FE49@=hb&xpsPk&J9>~FU#YCnZiZf_p%aCR|M>5 z!!KE@Tk!=C4N$U4QNbqo_6se4IV=7fKQ1`F@4EA73{vQSeJ_)*ZqIBsA7(xaP4$Fh7o4UHmJ4f|3V>dJWDv z%RF9P{==T{;rbYUlNjemp-d42MBK!jf>-%HH^m>#Dd-al5E6!-nAqTd0YB2$Y;fe2v}{Cr>F6c#U59&C4`}a9dP%qnyjM^@wPNipZH<{o{@iEg=j&SL))#Pr5>mT786*RGxaJg_d-9VTP zNGBV2(};>+t_rK=t3`=NRUQViW2sbtGY;fnlV8s2IoLCl(bsW43qn~3Zi;isiQ%=Z7a?J7XkyW z(Ual_{B@rb%cJYv6M?Pb8ng$SuWx+iX7CLIXaPS$KeDVf57q{5WRSNEE_Pgq2fxZO+1( z;LKT=aOv>coP}Rf8A@N_k%`xY%Vid(=KkG)#n3$LEF3_^N$-?X`Kqw;_4w>~{n2M( zwQ6A>saco^l!B-*<3YSymTqS+171y>AUF1Mz^mJ2C3U=VIr#wg&I+9c*nq3cqZq!k zuhVX6NuFiz!#zV2TcT$H6UH{Y9xcB6egA2@;?MYTu(a+%yDQ!n5IpiPh+p+jMPC=z z@cQG!yBc1%9&Ck001q^FmEiWno57`r0ws{qkD64HD7e_a4Q2$BE$^RYcZBzaIwFBn zmVbZg7r?7S4DFl%EyEy>Hsbjd7c0d8wJz^U-hr(9b|n|XV`qMR>vw~Wqipxzu#D0v z+#7)~yGG%tFqWi%;43&2M>D~hI7+x&aP%BGK2+8!XyPd0a>3Eg9C38k5r(7eBM(P` zj43#}Y`)lN8#8x>cZ0d&m&a$m*)V5qre@jb3P)+#)y2^wu(RWUr{Yd>XGPE%i7Ude z@+<_43m&+D;=Mg6IT+gliZpL1DG(}6&}Vup{=2iHw?tmC5`PbXCyMbG>cBVLC(jGv z7{~X>L?3nJ*dwo!23^)KOdnG3dL18ZSv>S@q+Ue=QV;8j?X54evOtEUVG`8{COt0QhcK) zLAZ1@!sO4F>mO-pm^6ZLx$x)2{S8Pb8-LCUrlUFdG{xz~%RY}Qit8qk3x5v5n{ez) z(ug7%rbqt!JR>~82=@~YkE(EIp5(;k!WY#nU3T02dFk&2Tj0Jzn&i#Nmp?@xjrRe4 zFc}nHeni@ovs93$hUv1=rrUzhxrF^6+L7$1O|Rn1OtfiEWRI1gJWvn-$o4`96;Z0_ zCrTAQP^Fc>gwzmZ>7ai*QY!>U0E&VWR0d(X3@=M@;L9USLRr!yOfP7JX|zX}Lga#A zC{cWiV`75F-T6~crvK83rlM%_LwnjkpkOYAx-~6@5qg2dC zqEWY^&q<@GA43{-h(2i4oST-V)jS#>PA@x{s0`!hu*P{8dC=)JN+>VpV{d{gf+e^N z8tjqXI`->pXM!{FnQ*z_^MB}>;yDvO z6D}8grtF{*uo#kul^qnIUDA~gpQSie9!3rZ&%s>=I`$>;S>IJ4&mj=XLsejx!cupy z()T5R5D#HoG3p+^hk!&*dXztMIy4sOGSWW#&*Zfkn49RnV^8*`!UiNHhl_MT^s20Xlt z{Un{j8xs$w<%ow5tAvd7Ogzj4XW}8@(v5SI_y2{FuNwE}yh^xS@Niv@cvy0T;UW7n zEgllVJUsMF`6%ryaa$7ca2c*Pzg@#bB|jj#rQL7)gr}kOZtK^)#Zf0P=g^h?N z7j^h`-CEonLq*y`SBVzahIAuD4XPkE{Ls=^Q1IMtWv8MiPjJkRs(4vx({?%qL!hG| z)Tf|i721rOZJ>%P^k}J^3Ppj>GjOGQJSz4%r9$f-mapuB^~w%c1i7>4MY~^P6#jTp5U4Ii2seJq2{7J zl+&70MG0Sz9}GT%{0<%alJv{mTRg{oE&kcZV~p@+MpzOukKzfsmdbmGjm1SZxX2PJ zsY~5=hL&j-^;6{e6n>XMLxz;?iZ}SvWTn-?QQT3YCzNp2@Rhf-`v*!sWuVe8?7<==F0}s z@$70KT7g)yUriIPRnFIguBKp1__&AAn0QIJT=23fN4zXWyPV&jZ3_Nr(JAqRftM%9%-EO2%VI5a!Cz^} zmWrGydj%3haT^)FS8Iz~<}IjMvUKjvTw-L!(T^|}ZjxoxaTMb6z!OyVh<|XQHFa~m z`Qny+!~U6ott5d*1wN6FRZfk6lef)vo|}b)R2ocEJ)8J6TV*JH1!v+D;c~$zohC5J zO!!2&T=0n|!5aY!cI&V*vX=oj9WctNd{tQadi-GElfW5d#(pC{jg%R)T~FjlBy;K^ zhKEricJ916u?10qGLl2RMMlkAQnO(G!kfga`OBygN1oZA=O(vgsX(z}IuFk>+>jF) zD^+H5kfn{3jiuw6lBH3I4R!kgDCc}JvM>52dpPf>fdYO9Mcgh+x;z-!zH+26e8yFD zBJd-&30J4~xROJkWjooI29;1vh}xdAX0+PS27n|yv@;R-wgeWMusuILDsb9iy`)pP zW#aTh7#18i=uUwzgyXX*_ijd7~OXHlYr;7-8M1cP1VYu0jJ;aP)yXo-0D&ZiHCo;rOv09Dl?sRR=u! z9tPYwe2`A1r^3qD6c5j$tFdg(G2BDsIN^`|OgKKDE5oYy zrXj35m7Y1rWP&Tj$ND%TTsqt^_jGR7Gu6^Caf5KV%rUga)(F^abIex2P1o|)%dSPI z)G0e|sMd5-$VH!vcuU8=)cHoniFYZ8;312M{V04R>⋘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⋙$c@qTpjAz+ogjYtKnZz0JcF2I0v{Tg4Kzu_X#Hm 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 z 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 literal 0 HcmV?d00001 diff --git a/misc/builddeps/dp.linux32/lib/libgmp.la b/misc/builddeps/dp.linux32/lib/libgmp.la new file mode 100755 index 00000000..f1f45dba --- /dev/null +++ b/misc/builddeps/dp.linux32/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.linux32/lib' diff --git a/misc/builddeps/dp.linux32/lib/libgmp.so b/misc/builddeps/dp.linux32/lib/libgmp.so new file mode 120000 index 00000000..f27b16a2 --- /dev/null +++ b/misc/builddeps/dp.linux32/lib/libgmp.so @@ -0,0 +1 @@ +libgmp.so.10.0.1 \ No newline at end of file diff --git a/misc/builddeps/dp.linux32/lib/libgmp.so.10 b/misc/builddeps/dp.linux32/lib/libgmp.so.10 new file mode 120000 index 00000000..f27b16a2 --- /dev/null +++ b/misc/builddeps/dp.linux32/lib/libgmp.so.10 @@ -0,0 +1 @@ +libgmp.so.10.0.1 \ No newline at end of file diff --git a/misc/builddeps/dp.linux32/lib/libgmp.so.10.0.1 b/misc/builddeps/dp.linux32/lib/libgmp.so.10.0.1 new file mode 100755 index 0000000000000000000000000000000000000000..e420f31604a5f876afa64cd5a016ac7341b8d84b GIT binary patch literal 445612 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

PVvGounY(a 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�#}q}C1+3YnBZH9% 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 Lp2xV#7y literal 0 HcmV?d00001 diff --git a/misc/builddeps/dp.linux32/share/info/gmp.info b/misc/builddeps/dp.linux32/share/info/gmp.info new file mode 100644 index 00000000..d65ab795 --- /dev/null +++ b/misc/builddeps/dp.linux32/share/info/gmp.info @@ -0,0 +1,178 @@ +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 + + +Indirect: +gmp.info-1: 981 +gmp.info-2: 300864 + +Tag Table: +(Indirect) +Node: Top981 +Node: Copying3211 +Node: Introduction to GMP5062 +Node: Installing GMP7773 +Node: Build Options8505 +Node: ABI and ISA24573 +Node: Notes for Package Builds34251 +Node: Notes for Particular Systems37338 +Node: Known Build Problems43895 +Node: Performance optimization47429 +Node: GMP Basics48563 +Node: Headers and Libraries49211 +Node: Nomenclature and Types50635 +Node: Function Classes52632 +Node: Variable Conventions54325 +Node: Parameter Conventions55934 +Node: Memory Management57990 +Node: Reentrancy59118 +Node: Useful Macros and Constants60991 +Node: Compatibility with older versions61989 +Node: Demonstration Programs62950 +Node: Efficiency64815 +Node: Debugging72439 +Node: Profiling78997 +Node: Autoconf82988 +Node: Emacs84767 +Node: Reporting Bugs85373 +Node: Integer Functions87916 +Node: Initializing Integers88692 +Node: Assigning Integers90839 +Node: Simultaneous Integer Init & Assign92426 +Node: Converting Integers94051 +Node: Integer Arithmetic96973 +Node: Integer Division98559 +Node: Integer Exponentiation104869 +Node: Integer Roots106309 +Node: Number Theoretic Functions107983 +Node: Integer Comparisons114126 +Node: Integer Logic and Bit Fiddling115504 +Node: I/O of Integers118051 +Node: Integer Random Numbers120935 +Node: Integer Import and Export123546 +Node: Miscellaneous Integer Functions127556 +Node: Integer Special Functions129416 +Node: Rational Number Functions132503 +Node: Initializing Rationals133696 +Node: Rational Conversions136157 +Node: Rational Arithmetic137888 +Node: Comparing Rationals139192 +Node: Applying Integer Functions140559 +Node: I/O of Rationals142042 +Node: Floating-point Functions143902 +Node: Initializing Floats146787 +Node: Assigning Floats150874 +Node: Simultaneous Float Init & Assign153441 +Node: Converting Floats154969 +Node: Float Arithmetic158217 +Node: Float Comparison160230 +Node: I/O of Floats161811 +Node: Miscellaneous Float Functions164409 +Node: Low-level Functions166303 +Node: Random Number Functions190437 +Node: Random State Initialization191505 +Node: Random State Seeding194363 +Node: Random State Miscellaneous195752 +Node: Formatted Output196393 +Node: Formatted Output Strings196638 +Node: Formatted Output Functions201852 +Node: C++ Formatted Output205927 +Node: Formatted Input208609 +Node: Formatted Input Strings208845 +Node: Formatted Input Functions213497 +Node: C++ Formatted Input216466 +Node: C++ Class Interface218369 +Node: C++ Interface General219370 +Node: C++ Interface Integers222440 +Node: C++ Interface Rationals225871 +Node: C++ Interface Floats229548 +Node: C++ Interface Random Numbers234830 +Node: C++ Interface Limitations237236 +Node: BSD Compatible Functions240056 +Node: Custom Allocation244767 +Node: Language Bindings249085 +Node: Algorithms253038 +Node: Multiplication Algorithms253738 +Node: Basecase Multiplication254710 +Node: Karatsuba Multiplication256618 +Node: Toom 3-Way Multiplication260243 +Node: Toom 4-Way Multiplication266657 +Node: FFT Multiplication268029 +Node: Other Multiplication273365 +Node: Unbalanced Multiplication275839 +Node: Division Algorithms276627 +Node: Single Limb Division277006 +Node: Basecase Division279897 +Node: Divide and Conquer Division281100 +Node: Block-Wise Barrett Division283169 +Node: Exact Division283821 +Node: Exact Remainder286986 +Node: Small Quotient Division289213 +Node: Greatest Common Divisor Algorithms290811 +Node: Binary GCD291108 +Node: Lehmer's Algorithm293957 +Node: Subquadratic GCD296177 +Node: Extended GCD298636 +Node: Jacobi Symbol299948 +Node: Powering Algorithms300864 +Node: Normal Powering Algorithm301127 +Node: Modular Powering Algorithm301655 +Node: Root Extraction Algorithms302435 +Node: Square Root Algorithm302750 +Node: Nth Root Algorithm304891 +Node: Perfect Square Algorithm305676 +Node: Perfect Power Algorithm307762 +Node: Radix Conversion Algorithms308383 +Node: Binary to Radix308759 +Node: Radix to Binary312688 +Node: Other Algorithms314776 +Node: Prime Testing Algorithm315128 +Node: Factorial Algorithm316312 +Node: Binomial Coefficients Algorithm317715 +Node: Fibonacci Numbers Algorithm318609 +Node: Lucas Numbers Algorithm321083 +Node: Random Number Algorithms321804 +Node: Assembly Coding323925 +Node: Assembly Code Organisation324885 +Node: Assembly Basics325852 +Node: Assembly Carry Propagation327002 +Node: Assembly Cache Handling328833 +Node: Assembly Functional Units330994 +Node: Assembly Floating Point332607 +Node: Assembly SIMD Instructions336385 +Node: Assembly Software Pipelining337367 +Node: Assembly Loop Unrolling338429 +Node: Assembly Writing Guide340644 +Node: Internals343409 +Node: Integer Internals343921 +Node: Rational Internals346177 +Node: Float Internals347415 +Node: Raw Output Internals354829 +Node: C++ Interface Internals356023 +Node: Contributors359309 +Node: References364267 +Node: GNU Free Documentation License369925 +Node: Concept Index395094 +Node: Function Index441276 + +End Tag Table diff --git a/misc/builddeps/dp.linux32/share/info/gmp.info-1 b/misc/builddeps/dp.linux32/share/info/gmp.info-1 new file mode 100644 index 00000000..d1360599 --- /dev/null +++ b/misc/builddeps/dp.linux32/share/info/gmp.info-1 @@ -0,0 +1,7084 @@ +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: Top, Next: Copying, Prev: (dir), Up: (dir) + +GNU MP +****** + + 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::. + + +* Menu: + +* Copying:: GMP Copying Conditions (LGPL). +* Introduction to GMP:: Brief introduction to GNU MP. +* Installing GMP:: How to configure and compile the GMP library. +* GMP Basics:: What every GMP user should know. +* Reporting Bugs:: How to usefully report bugs. +* Integer Functions:: Functions for arithmetic on signed integers. +* Rational Number Functions:: Functions for arithmetic on rational numbers. +* Floating-point Functions:: Functions for arithmetic on floats. +* Low-level Functions:: Fast functions for natural numbers. +* Random Number Functions:: Functions for generating random numbers. +* Formatted Output:: `printf' style output. +* Formatted Input:: `scanf' style input. +* C++ Class Interface:: Class wrappers around GMP types. +* BSD Compatible Functions:: All functions found in BSD MP. +* Custom Allocation:: How to customize the internal allocation. +* Language Bindings:: Using GMP from other languages. +* Algorithms:: What happens behind the scenes. +* Internals:: How values are represented behind the scenes. + +* Contributors:: Who brings you this library? +* References:: Some useful papers and books to read. +* GNU Free Documentation License:: +* Concept Index:: +* Function Index:: + + +File: gmp.info, Node: Copying, Next: Introduction to GMP, Prev: Top, Up: Top + +GNU MP Copying Conditions +************************* + +This library is "free"; this means that everyone is free to use it and +free to redistribute it on a free basis. The library is not in the +public domain; it is copyrighted and there are restrictions on its +distribution, but these restrictions are designed to permit everything +that a good cooperating citizen would want to do. What is not allowed +is to try to prevent others from further sharing any version of this +library that they might get from you. + + Specifically, we want to make sure that you have the right to give +away copies of the library, that you receive source code or else can +get it if you want it, that you can change this library or use pieces +of it in new free programs, and that you know you can do these things. + + To make sure that everyone has such rights, we have to forbid you to +deprive anyone else of these rights. For example, if you distribute +copies of the GNU MP library, you must give the recipients all the +rights that you have. You must make sure that they, too, receive or +can get the source code. And you must tell them their rights. + + Also, for our own protection, we must make certain that everyone +finds out that there is no warranty for the GNU MP library. If it is +modified by someone else and passed on, we want their recipients to +know that what they have is not what we distributed, so that any +problems introduced by others will not reflect on our reputation. + + The precise conditions of the license for the GNU MP library are +found in the Lesser General Public License version 3 that accompanies +the source code, see `COPYING.LIB'. Certain demonstration programs are +provided under the terms of the plain General Public License version 3, +see `COPYING'. + + +File: gmp.info, Node: Introduction to GMP, Next: Installing GMP, Prev: Copying, Up: Top + +1 Introduction to GNU MP +************************ + +GNU MP is a portable library written in C for arbitrary precision +arithmetic on integers, rational numbers, and floating-point numbers. +It aims to provide the fastest possible arithmetic for all applications +that need higher precision than is directly supported by the basic C +types. + + Many applications use just a few hundred bits of precision; but some +applications may need thousands or even millions of bits. GMP is +designed to give good performance for both, by choosing algorithms +based on the sizes of the operands, and by carefully keeping the +overhead at a minimum. + + The speed of GMP is achieved by using fullwords as the basic +arithmetic type, by using sophisticated algorithms, by including +carefully optimized assembly code for the most common inner loops for +many different CPUs, and by a general emphasis on speed (as opposed to +simplicity or elegance). + + There is assembly code for these CPUs: ARM, DEC Alpha 21064, 21164, +and 21264, AMD 29000, AMD K6, K6-2, Athlon, and Athlon64, Hitachi +SuperH and SH-2, HPPA 1.0, 1.1 and 2.0, Intel Pentium, Pentium +Pro/II/III, Pentium 4, generic x86, Intel IA-64, i960, Motorola +MC68000, MC68020, MC88100, and MC88110, Motorola/IBM PowerPC 32 and 64, +National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7, SuperSPARC, +generic SPARCv8, UltraSPARC, DEC VAX, and Zilog Z8000. Some +optimizations also for Cray vector systems, Clipper, IBM ROMP (RT), and +Pyramid AP/XP. + +For up-to-date information on GMP, please see the GMP web pages at + + `http://gmplib.org/' + +The latest version of the library is available at + + `ftp://ftp.gnu.org/gnu/gmp/' + + Many sites around the world mirror `ftp.gnu.org', please use a mirror +near you, see `http://www.gnu.org/order/ftp.html' for a full list. + + There are three public mailing lists of interest. One for release +announcements, one for general questions and discussions about usage of +the GMP library and one for bug reports. For more information, see + + `http://gmplib.org/mailman/listinfo/'. + + The proper place for bug reports is . 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.linux32/share/info/gmp.info-2 b/misc/builddeps/dp.linux32/share/info/gmp.info-2 new file mode 100644 index 00000000..45846232 --- /dev/null +++ b/misc/builddeps/dp.linux32/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