[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / runtime / gmp / gmp.texi
diff --git a/ghc/runtime/gmp/gmp.texi b/ghc/runtime/gmp/gmp.texi
deleted file mode 100644 (file)
index 7aaa88b..0000000
+++ /dev/null
@@ -1,1291 +0,0 @@
-\input texinfo    @c -*-texinfo-*-
-@comment %**start of header
-@setfilename gmp.info
-@settitle GNU MP 1.3.2
-@synindex tp fn
-@c footnotestyle separate
-@c paragraphindent 2
-@comment %**end of header
-
-@c smallbook
-
-@iftex
-@finalout
-@end iftex
-
-@c Note: the edition number is listed in *three* places; please update
-@c all three.  Also, update the month and year where appropriate.
-
-@c ==> Update edition number for settitle and subtitle, and in the
-@c ==> following paragraph; update date, too.
-
-@ifinfo
-This file documents GNU MP, a library for arbitrary-precision integer
-and rational number arithmetic.
-
-This is a draft edition of the documentation, last updated May 20 1993.
-
-Copyright (C) 1991, 1993 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-@setchapternewpage odd
-@titlepage
-@c  use the new format for titles
-
-@title GNU MP
-@subtitle The GNU Multiple Precision Arithmetic Library
-@subtitle Edition 1.3.2
-@subtitle May 1993
-
-@author by Torbj@"orn Granlund
-
-@comment   Include the Distribution inside the titlepage so
-@c that headings are turned off.
-
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1991, 1993 Free Software Foundation, Inc.
-
-@sp 2
-
-Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA @*
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, Copying, (dir), (dir)
-@end ifinfo
-
-@menu
-* Copying::                  GMP Copying Conditions.
-* Intro::                    Introduction to GMP.
-* Nomenclature::             Terminology and basic data types.
-* Initialization::           Initialization of multi-precision number objects.
-* Integer Functions::        Functions for arithmetic on signed integers.
-* Rational Number Functions:: Functions for arithmetic on rational numbers.
-* Low-level Functions::      Fast functions for natural numbers.
-* BSD Compatible Functions:: All functions found in BSD MP (somewhat faster).
-* Miscellaneous Functions::  Functions that do particular things.
-* Custom Allocation::        How to customize the internal allocation.
-* Reporting Bugs::           Help us to improve this library.
-
-* References::
-* Concept Index::
-* Function Index::
-@end menu
-
-@node Copying, Intro, Top, Top
-@comment  node-name, next, previous,  up
-@unnumbered GNU MP Copying Conditions
-@cindex Copying conditions
-@cindex Conditions for copying GNU MP
-
-This library is @dfn{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.@refill
-
-  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.@refill
-
-  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 GMP 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.@refill
-
-  Also, for our own protection, we must make certain that everyone finds
-out that there is no warranty for the GMP 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.@refill
-
-  The precise conditions of the license for the GMP library are found in
-the General Public License that accompany the source code.@refill
-
-@node Intro, Initialization, Copying, Top
-@comment  node-name,  next,  previous,  up
-@chapter Introduction to MP
-@cindex Introduction
-@cindex Overview
-
-GNU MP is a portable library for arbitrary precision integer and
-rational number arithmetic.@footnote{The limit of the precision is set by the
-available memory in your computer.}  It aims to provide the fastest
-possible arithmetic for all applications that need more than two words
-of integer precision.
-
-Most often, applications tend to use just a few words of precision;
-but some applications may need thousands of words.  GNU MP is designed
-to give good performance for both kinds of applications, by choosing
-algorithms based on the sizes of the operands.
-
-There are five groups of functions in the MP library:
-
-@enumerate
-@item
-Functions for signed integer arithmetic, with names
-beginning with @code{mpz_}.
-
-@item
-Functions for rational number arithmetic, with names beginning with
-@code{mpq_}.
-
-@item
-Functions compatible with Berkeley MP, such as @code{itom}, @code{madd},
-and @code{mult}.
-
-@item
-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 @code{mpn_}.
-
-@item
-Miscellaneous functions.
-@end enumerate
-
-As a general rule, all MP functions expect output arguments before input
-arguments.  This notation is based on an analogy with the assignment
-operator.  (The BSD MP compatibility functions disobey this rule, having
-the output argument(s) last.)  Multi-precision numbers, whether
-output or input, are always passed as addresses to the declared type.
-
-@menu
-* Nomenclature::
-* Thanks::
-@end menu
-
-@node Nomenclature, Thanks, Intro, Intro
-@comment  node-name,  next,  previous,  up
-@section Nomenclature and Data Types
-@cindex nomenclature
-
-@cindex integer
-@tindex @code{MP_INT}
-In this manual, @dfn{integer} means a multiple precision integer, as
-used in the MP package.  The C data type for such integers is
-@code{MP_INT}.  For example:
-
-@example
-MP_INT sum;
-
-struct foo @{ MP_INT x, y; @};
-
-MP_INT vec[20];
-@end example
-
-@cindex rational number
-@tindex @code{MP_RAT}
-@dfn{Rational number} means a multiple precision fraction.  The C data
-type for these fractions is @code{MP_RAT}.  For example:
-
-@example
-MP_RAT quotient;
-@end example
-
-@cindex limb
-A @dfn{limb} means the part of a multi-precision number that fits in a
-single 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 contains 32 bits.
-
-@node Thanks,, Nomenclature, Intro
-@comment  node-name,  next,  previous,  up
-@section Thanks
-
-I would like to thank Gunnar Sjoedin and Hans Riesel for their help with
-mathematical problems, Richard Stallman for his help with design issues
-and for revising this manual, Brian Beuning and Doug Lea for their
-testing of various versions of the library, and Joachim Hollman for
-his many valuable suggestions.
-
-Special thanks to Brian Beuning, he has shaked out many bugs from early
-versions of the code!
-
-John Amanatides of York University in Canada contributed the function
-@code{mpz_probab_prime_p}.
-
-@node Initialization, Integer Functions, Intro, Top
-@comment  node-name,  next,  previous,  up
-@chapter Initialization
-
-Before you can use a variable or object of type @code{MP_INT} or
-@code{MP_RAT}, you must initialize it.  This fills in the components
-that point to dynamically allocated space for the limbs of the number.
-
-When you are finished using the object, you should clear out the object.
-This frees the dynamic space that it points to, so the space can be used
-again.
-
-Once you have initialized the object, you need not be concerned about
-allocating additional space.  The functions in the MP package
-automatically allocate additional space when the object does not already
-have enough space.  They do not, however, reduce the space in use when a
-smaller number is stored in the object.  Most of the time, this policy
-is best, since it avoids frequent re-allocation.  If you want to reduce
-the space in an object to the minimum needed, you can do
-@code{_mpz_realloc (&@var{object}, mpz_size (&@var{object}))}.
-
-The functions to initialize numbers are @code{mpz_init} (for @code{MP_INT}) and
-@code{mpq_init} (for @code{MP_RAT}).
-
-@code{mpz_init} allocates space for the limbs, and stores a pointer
-to that space in the @code{MP_INT} object.  It also stores the value 0
-in the object.
-
-In the same manner, @code{mpq_init} allocates space for the numerator
-and denominator limbs, and stores pointers to these spaces in the @code{MP_RAT}
-object.
-
-To clear out a number object, use @code{mpz_clear} and @code{mpq_clear},
-respectively.
-
-Here is an example of use:
-
-@example
-@{
-  MP_INT temp;
-  mpz_init (&temp);
-
-  @dots{} @r{store and read values in @code{temp} zero or more times} @dots{}
-
-  mpz_clear (&temp):
-@}
-@end example
-
-You might be tempted to copy an integer from one object to another like
-this:
-
-@example
-MP_INT x, y;
-
-x = y;
-@end example
-
-Although valid C, @strong{this is an error.} Rather than copying the
-integer value from @code{y} to @code{x} it will make the two variables
-share storage.  Subsequent assignments to one variable would change the
-other mysteriously.  And if you were to clear out both variables
-subsequently, you would confuse @code{malloc} and cause your program to
-crash.
-
-To copy the value properly, you must use the function @code{mpz_set}.
-(@pxref{Assigning Integers})
-
-@node Integer Functions, Rational Number Functions, Initialization, Top
-@comment  node-name,  next,  previous,  up
-@chapter Integer Functions
-@cindex Integer functions
-
-This chapter describes the MP functions for performing integer arithmetic.
-
-The integer functions use arguments and values of type
-pointer-to-@code{MP_INT} (@pxref{Nomenclature}).  The type @code{MP_INT}
-is a structure, but applications should not refer directly to its
-components.  Include the header @file{gmp.h} to get the definition of
-@code{MP_INT}.
-
-@menu
-* Initializing Integers::
-* Assigning Integers::
-* Simultaneous Integer Init & Assign::
-* Converting Integers::
-* Integer Arithmetic::
-* Logic on Integers::
-* I/O of Integers::
-@end menu
-
-@node Initializing Integers, Assigning Integers, , Integer Functions
-@comment  node-name,  next,  previous,  up
-@section Initializing Integer Objects
-
-Most of the functions for integer arithmetic assume that the output is
-stored in an object already initialized.  For example, @code{mpz_add}
-stores the result of addition (@pxref{Integer Arithmetic}).  Thus, you
-must initialize the object before storing the first value in it.  You
-can do this separately by calling the function @code{mpz_init}.
-
-@deftypefun void mpz_init (MP_INT *@var{integer})
-Initialize @var{integer} with limb space and set the initial numeric
-value to 0.  Each variable should normally only be initialized once,
-or at least cleared out (using @code{mpz_clear}) between each initialization.
-@end deftypefun
-
-Here is an example of using @code{mpz_init}:
-
-@example
-@{
-  MP_INT integ;
-  mpz_init (&integ);
-  @dots{}
-  mpz_add (&integ, @dots{});
-  @dots{}
-  mpz_sub (&integ, @dots{});
-
-  /* Unless you are now exiting the program, do ... */
-  mpz_clear (&integ);
-@}
-@end example
-
-@noindent
-As you can see, you can store new values any number of times, once an
-object is initialized.
-
-@deftypefun void mpz_clear (MP_INT *@var{integer})
-Free the limb space occupied by @var{integer}.  Make sure to call this
-function for all @code{MP_INT} variables when you are done with them.
-@end deftypefun
-
-@deftypefun {void *} _mpz_realloc (MP_INT *@var{integer}, mp_size @var{new_alloc})
-Change the limb space allocation to @var{new_alloc} limbs.  This
-function is not normally called from user code, but it can be used to
-give memory back to the heap, or to increase the space of a variable to
-avoid repeated automatic re-allocation.
-@end deftypefun
-
-@deftypefun void mpz_array_init (MP_INT @var{integer_array}[], size_t @var{array_size}, mp_size @var{fixed_num_limbs})
-Allocate @strong{fixed} limb space for all @var{array_size} integers in
-@var{integer_array}.  The fixed allocation for each integer in the array
-is @var{fixed_num_limbs}.  This function is useful for decreasing the
-working set for some algorithms that use large integer arrays.  If the
-fixed space will be insufficient for storing the result of a subsequent
-calculation, the result is unpredictable.
-
-There is no way to de-allocate the storage allocated by this function.  Don't
-call @code{mpz_clear}!
-@end deftypefun
-
-
-@node Assigning Integers, Simultaneous Integer Init & Assign, Initializing Integers, Integer Functions
-@comment  node-name,  next,  previous,  up
-@subsection Integer Assignment Functions
-@cindex Integer assignment functions
-
-These functions assign new values to already initialized integers
-(@pxref{Initializing Integers}).
-
-@deftypefun void mpz_set (MP_INT *@var{dest_integer}, MP_INT *@var{src_integer})
-Assign @var{dest_integer} from @var{src_integer}.
-@end deftypefun
-
-@deftypefun void mpz_set_ui (MP_INT *@var{integer}, unsigned long int @var{initial_value})
-Set the value of @var{integer} from @var{initial_value}.
-@end deftypefun
-
-@deftypefun void mpz_set_si (MP_INT *@var{integer}, signed long int @var{initial_value})
-Set the value of @var{integer} from @var{initial_value}.
-@end deftypefun
-
-@deftypefun int mpz_set_str (MP_INT *@var{integer}, char *@var{initial_value}, int @var{base})
-Set the value of @var{integer} from @var{initial_value},
-a '\0'-terminated C string in base @var{base}.  White space is allowed in
-the string, and is simply ignored.  The base may vary from 2 to 36.  If
-@var{base} is 0, the actual base is determined from the leading characters: if
-the first two characters are `0x' or `0X', hexadecimal is assumed,
-otherwise if the first character is `0', octal is assumed, otherwise
-decimal is assumed.
-
-This function returns 0 if the entire string up to the '\0' is a valid
-number in base @var{base}.  Otherwise it returns @minus{}1.
-@end deftypefun
-
-
-@node Simultaneous Integer Init & Assign, Converting Integers, Assigning Integers, Integer Functions
-@comment  node-name,  next,  previous,  up
-@subsection Combined Initialization and Assignment Functions
-@cindex Initialization and assignment functions, combined
-
-For your convenience, MP provides a parallel series of
-initialize-and-set arithmetic functions which initialize the output and
-then store the value there.  These functions' names have the form
-@code{mpz_init_set@dots{}}.
-
-Here is an example of using one:
-
-@example
-@{
-  MP_INT integ;
-  mpz_init_set_str (&integ, "3141592653589793238462643383279502884", 10);
-  @dots{}
-  mpz_sub (&integ, @dots{});
-
-  mpz_clear (&integ);
-@}
-@end example
-
-Once the integer has been initialized by any of the
-@code{mpz_init_set@dots{}} 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!
-
-@deftypefun void mpz_init_set (MP_INT *@var{dest_integer}, MP_INT *@var{src_integer})
-Initialize @var{dest_integer} with limb space and set the initial numeric
-value from @var{src_integer}.
-@end deftypefun
-
-@deftypefun void mpz_init_set_ui (MP_INT *@var{dest_integer}, unsigned long int @var{src_ulong})
-Initialize @var{dest_integer} with limb space and set the initial numeric
-value from @var{src_ulong}.
-@end deftypefun
-
-@deftypefun void mpz_init_set_si (MP_INT *@var{dest_integer}, signed long int @var{src_slong})
-Initialize @var{dest_integer} with limb space and set the initial numeric
-value from @var{src_slong}.
-@end deftypefun
-
-@deftypefun int mpz_init_set_str (MP_INT *@var{dest_integer}, char *@var{src_cstring}, int @var{base})
-Initialize @var{dest_integer} with limb space and set the initial
-numeric value from @var{src_cstring}, a '\0'-terminated C string in base
-@var{base}.  The base may vary from 2 to 36.  There may be white space
-in the string.
-
-If the string is a correct base @var{base} number, the function returns
-0; if an error occurs it returns @minus{}1.  @var{dest_integer} is
-initialized even if an error occurs.  (I.e., you have to call mpz_clear
-for it.)
-@end deftypefun
-
-
-@node Converting Integers,  Integer Arithmetic, Simultaneous Integer Init & Assign, Integer Functions
-@comment  node-name,  next,  previous,  up
-@section Conversion Functions
-@cindex Conversion functions
-
-@deftypefun {unsigned long int} mpz_get_ui (MP_INT *@var{src_integer})
-Return the least significant limb from @var{src_integer}.  This
-function together with @*
-@code{mpz_div_2exp(@dots{}, @var{src_integer}, CHAR_BIT*sizeof(unsigned
-long int))} can be used to extract the limbs of an integer efficiently.
-@end deftypefun
-
-@deftypefun {signed long int} mpz_get_si (MP_INT *@var{src_integer})
-If @var{src_integer} fits into a @code{signed long int} return the value
-of @var{src_integer}.  Otherwise return the least significant bits of
-@var{src_integer}, with the same sign as @var{src_integer}.
-@end deftypefun
-
-@deftypefun {char *} mpz_get_str (char *@var{string}, int @var{base}, MP_INT *@var{integer})
-Convert @var{integer} to a '\0'-terminated C string in @var{string},
-using base @var{base}.  The base may vary from 2 to 36.  If @var{string}
-is NULL, space for the string is allocated using the default allocation
-function.
-
-If @var{string} is not NULL, it should point to a block of storage
-enough large for the result.  To find out the right amount of space to
-provide for @var{string}, use @code{mpz_sizeinbase (@var{integer},
-@var{base}) + 2}.  The "+ 2" is for a possible minus sign, and for the
-terminating null character.  (@pxref{Miscellaneous Functions}).
-
-This function returns a pointer to the result string.
-@end deftypefun
-
-
-@node     Integer Arithmetic, Logic on Integers, Converting Integers, Integer Functions
-@comment  node-name,  next,  previous,  up
-@section Integer Arithmetic Functions
-@cindex Integer arithmetic functions
-@cindex Arithmetic functions
-
-@deftypefun void mpz_add (MP_INT *@var{sum}, MP_INT *@var{addend1}, MP_INT *@var{addend2})
-@end deftypefun
-@deftypefun void mpz_add_ui (MP_INT *@var{sum}, MP_INT *@var{addend1}, unsigned long int @var{addend2})
-Set @var{sum} to @var{addend1} + @var{addend2}.
-@end deftypefun
-
-@deftypefun void mpz_sub (MP_INT *@var{difference}, MP_INT *@var{minuend}, MP_INT *@var{subtrahend})
-@end deftypefun
-@deftypefun void mpz_sub_ui (MP_INT *@var{difference}, MP_INT *@var{minuend}, unsigned long int @var{subtrahend})
-Set @var{difference} to @var{minuend} @minus{} @var{subtrahend}.
-@end deftypefun
-
-@deftypefun void mpz_mul (MP_INT *@var{product}, MP_INT *@var{multiplicator}, MP_INT *@var{multiplicand})
-@end deftypefun
-@deftypefun void mpz_mul_ui (MP_INT *@var{product}, MP_INT *@var{multiplicator}, unsigned long int @var{multiplicand})
-Set @var{product} to @var{multiplicator} times @var{multiplicand}.
-@end deftypefun
-
-Division is undefined if the divisor is zero, and passing a zero divisor
-to the divide or modulo functions, as well passing a zero mod argument
-to the powm functions, will make these functions intentionally divide by
-zero.  This gives the user the possibility to handle arithmetic
-exceptions in these functions in the same manner as other arithmetic
-exceptions.
-
-@deftypefun void mpz_div (MP_INT *@var{quotient}, MP_INT *@var{dividend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun void mpz_div_ui (MP_INT *@var{quotient}, MP_INT *@var{dividend}, unsigned long int @var{divisor})
-Set @var{quotient} to @var{dividend} / @var{divisor}.  The quotient is
-rounded towards 0.
-@end deftypefun
-
-@deftypefun void mpz_mod (MP_INT *@var{remainder}, MP_INT *@var{divdend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun void mpz_mod_ui (MP_INT *@var{remainder}, MP_INT *@var{divdend}, unsigned long int @var{divisor})
-Divide @var{dividend} and @var{divisor} and put the remainder in
-@var{remainder}.  The remainder has the same sign as the dividend, and
-its absolute value is less than the absolute value of the divisor.
-@end deftypefun
-
-@deftypefun void mpz_divmod (MP_INT *@var{quotient}, MP_INT *@var{remainder}, MP_INT *@var{dividend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun void mpz_divmod_ui (MP_INT *@var{quotient}, MP_INT *@var{remainder}, MP_INT *@var{dividend}, unsigned long int @var{divisor})
-Divide @var{dividend} and @var{divisor} and put the quotient in
-@var{quotient} and the remainder in @var{remainder}.  The quotient is
-rounded towards 0.  The remainder has the same sign as the dividend,
-and its absolute value is less than the absolute value of the divisor.
-
-If @var{quotient} and @var{remainder} are the same variable, the results
-are not defined.
-@end deftypefun
-
-@deftypefun void mpz_mdiv (MP_INT *@var{quotient}, MP_INT *@var{dividend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun void mpz_mdiv_ui (MP_INT *@var{quotient}, MP_INT *@var{dividend}, unsigned long int @var{divisor})
-Set @var{quotient} to @var{dividend} / @var{divisor}.  The quotient is
-rounded towards @minus{}infinity.
-@end deftypefun
-
-@deftypefun void mpz_mmod (MP_INT *@var{remainder}, MP_INT *@var{divdend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun {unsigned long int} mpz_mmod_ui (MP_INT *@var{remainder}, MP_INT *@var{divdend}, unsigned long int @var{divisor})
-Divide @var{dividend} and @var{divisor} and put the remainder in
-@var{remainder}.  The remainder is always positive, and its value is
-less than the value of the divisor.
-
-For @code{mpz_mmod_ui} the remainder is returned, and if @var{remainder} is
-not NULL, also stored there.
-@end deftypefun
-
-@deftypefun void mpz_mdivmod (MP_INT *@var{quotient}, MP_INT *@var{remainder}, MP_INT *@var{dividend}, MP_INT *@var{divisor})
-@end deftypefun
-@deftypefun {unsigned long int} mpz_mdivmod_ui (MP_INT *@var{quotient}, MP_INT *@var{remainder}, MP_INT *@var{dividend}, unsigned long int @var{divisor})
-Divide @var{dividend} and @var{divisor} and put the quotient in
-@var{quotient} and the remainder in @var{remainder}.  The quotient is
-rounded towards @minus{}infinity.  The remainder is always positive, and its
-value is less than the value of the divisor.
-
-For @code{mpz_mdivmod_ui} the remainder is small enough to fit in an
-@code{unsigned long int}, and is therefore returned.  If @var{remainder}
-is not NULL, the remainder is also stored there.
-
-If @var{quotient} and @var{remainder} are the same variable, the results
-are not defined.
-@end deftypefun
-
-@deftypefun void mpz_sqrt (MP_INT *@var{root}, MP_INT *@var{operand})
-Set @var{root} to the square root of @var{operand}.  The result is
-rounded towards zero.
-@end deftypefun
-
-@deftypefun void mpz_sqrtrem (MP_INT *@var{root}, MP_INT *@var{remainder}, MP_INT *@var{operand})
-Set @var{root} to the square root of @var{operand}, as with
-@code{mpz_sqrt}.  Set @var{remainder} to
-@ifinfo
-@var{operand}@minus{}@var{root}*@var{root},
-@end ifinfo
-@iftex
-@tex
-$operand - root^2$,
-@end tex
-@end iftex
-(i.e@. zero if @var{operand} is a perfect square).
-
-If @var{root} and @var{remainder} are the same variable, the results are
-not defined.
-@end deftypefun
-
-@deftypefun int mpz_perfect_square_p (MP_INT *@var{square})
-Return non-zero if @var{square} is perfect, i.e@. if the square root of
-@var{square} is integral.  Return zero otherwise.
-@end deftypefun
-
-@deftypefun int mpz_probab_prime_p (MP_INT *@var{n}, int @var{reps})
-An implementation of the probabilistic primality test found in Knuth's
-Seminumerical Algorithms book.  If the function
-@code{mpz_probab_prime_p(@var{n}, @var{reps})} returns 0 then @var{n} is
-not prime.  If it returns 1, then @var{n} is `probably' prime.  The
-probability of a false positive is (1/4)**@var{reps}, where @var{reps}
-is the number of internal passes of the probabilistic algorithm.  Knuth
-indicates that 25 passes are reasonable.
-@end deftypefun
-
-@deftypefun void mpz_powm (MP_INT *@var{res}, MP_INT *@var{base}, MP_INT *@var{exp}, MP_INT *@var{mod})
-@end deftypefun
-@deftypefun void mpz_powm_ui (MP_INT *@var{res}, MP_INT *@var{base}, unsigned long int @var{exp}, MP_INT *@var{mod})
-Set @var{res} to (@var{base} raised to @var{exp}) modulo @var{mod}.
-If @var{exp} is negative, the result is undefined.
-@end deftypefun
-
-@deftypefun void mpz_pow_ui (MP_INT *@var{res}, MP_INT *@var{base}, unsigned long int @var{exp})
-Set @var{res} to @var{base} raised to @var{exp}.
-@end deftypefun
-
-@deftypefun void mpz_fac_ui (MP_INT *@var{res}, unsigned long int @var{n})
-Set @var{res} @var{n}!, the factorial of n.
-@end deftypefun
-
-@deftypefun void mpz_gcd (MP_INT *@var{res}, MP_INT *@var{operand1}, MP_INT *@var{operand2})
-Set @var{res} to the greatest common divisor of @var{operand1} and
-@var{operand2}.
-@end deftypefun
-
-@deftypefun void mpz_gcdext (MP_INT *@var{g}, MP_INT *@var{s}, MP_INT *@var{t}, MP_INT *@var{a}, MP_INT *@var{b})
-Compute @var{g}, @var{s}, and @var{t}, such that @var{a}@var{s} +
-@var{b}@var{t} = @var{g} = @code{gcd} (@var{a}, @var{b}).  If @var{t} is
-NULL, that argument is not computed.
-@end deftypefun
-
-@deftypefun void mpz_neg (MP_INT *@var{negated_operand}, MP_INT *@var{operand})
-Set @var{negated_operand} to @minus{}@var{operand}.
-@end deftypefun
-
-@deftypefun void mpz_abs (MP_INT *@var{positive_operand}, MP_INT *@var{signed_operand})
-Set @var{positive_operand} to the absolute value of @var{signed_operand}.
-@end deftypefun
-
-@deftypefun int mpz_cmp (MP_INT *@var{operand1}, MP_INT *@var{operand2})
-@end deftypefun
-@deftypefun int mpz_cmp_ui (MP_INT *@var{operand1}, unsigned long int @var{operand2})
-@end deftypefun
-@deftypefun int mpz_cmp_si (MP_INT *@var{operand1}, signed long int @var{operand2})
-Compare @var{operand1} and @var{operand2}.  Return a positive value if
-@var{operand1} > @var{operand2}, zero if @var{operand1} = @var{operand2},
-and a negative value if @var{operand1} < @var{operand2}.
-@end deftypefun
-
-@deftypefun void mpz_mul_2exp (MP_INT *@var{product}, MP_INT *@var{multiplicator}, unsigned long int @var{exponent_of_2})
-Set @var{product} to @var{multiplicator} times 2 raised to
-@var{exponent_of_2}.  This operation can also be defined as a left shift,
-@var{exponent_of_2} steps.
-@end deftypefun
-
-@deftypefun void mpz_div_2exp (MP_INT *@var{quotient}, MP_INT *@var{dividend}, unsigned long int @var{exponent_of_2})
-Set @var{quotient} to @var{dividend} divided by 2 raised to
-@var{exponent_of_2}.  This operation can also be defined as a right
-shift, @var{exponent_of_2} steps, but unlike the >> operator in
-C, the result is rounded towards 0.
-@end deftypefun
-
-@deftypefun void mpz_mod_2exp (MP_INT *@var{remainder}, MP_INT *@var{dividend}, unsigned long int @var{exponent_of_2})
-Set @var{remainder} to @var{dividend} mod (2 raised to
-@var{exponent_of_2}).  The sign of @var{remainder} will have the same sign
-as @var{dividend}.
-
-This operation can also be defined as a masking of the
-@var{exponent_of_2} least significant bits.
-@end deftypefun
-
-@node Logic on Integers, I/O of Integers, Integer Arithmetic, Integer Functions
-@comment  node-name,  next,  previous,  up
-@section Logical Functions
-@cindex Logical functions
-
-@deftypefun void mpz_and (MP_INT *@var{conjunction}, MP_INT *@var{operand1}, MP_INT *@var{operand2})
-Set @var{conjunction} to @var{operand1} logical-and @var{operand2}.
-@end deftypefun
-
-@deftypefun void mpz_ior (MP_INT *@var{disjunction}, MP_INT *@var{operand1}, MP_INT *@var{operand2})
-Set @var{disjunction} to @var{operand1} inclusive-or @var{operand2}.
-@end deftypefun
-
-@deftypefun void mpz_xor (MP_INT *@var{disjunction}, MP_INT *@var{operand1}, MP_INT *@var{operand2})
-Set @var{disjunction} to @var{operand1} exclusive-or @var{operand2}.
-
-This function is missing in the current release.
-@end deftypefun
-
-@deftypefun void mpz_com (MP_INT *@var{complemented_operand}, MP_INT *@var{operand})
-Set @var{complemented_operand} to the one's complement of @var{operand}.
-@end deftypefun
-
-@node I/O of Integers,, Logic on Integers, Integer Functions
-@comment  node-name,  next,  previous,  up
-@section Input and Output Functions
-@cindex Input and output functions
-@cindex Output functions
-@cindex I/O functions
-
-Functions that perform input from a standard I/O stream, and functions for
-output conversion.
-
-@deftypefun void mpz_inp_raw (MP_INT *@var{integer}, FILE *@var{stream})
-Input from standard I/O stream @var{stream} in the format written by
-@code{mpz_out_raw}, and put the result in @var{integer}.
-@end deftypefun
-
-@deftypefun void mpz_inp_str (MP_INT *@var{integer}, FILE *@var{stream}, int @var{base})
-Input a string in base @var{base} from standard I/O stream @var{stream},
-and put the read integer in @var{integer}.  The base may vary from 2 to
-36.  If @var{base} is 0, the actual base is determined from the leading
-characters: if the first two characters are `0x' or `0X', hexadecimal is
-assumed, otherwise if the first character is `0', octal is assumed,
-otherwise decimal is assumed.
-@end deftypefun
-
-
-@deftypefun void mpz_out_raw (FILE *@var{stream}, MP_INT *@var{integer})
-Output @var{integer} on standard I/O stream @var{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.
-@end deftypefun
-
-@deftypefun void mpz_out_str (FILE *@var{stream}, int @var{base}, MP_INT *@var{integer})
-Output @var{integer} on standard I/O stream @var{stream}, as a string of
-digits in base @var{base}.  The base may vary from 2 to 36.
-@end deftypefun
-
-
-@node Rational Number Functions, Low-level Functions, Integer Functions, Top
-@comment  node-name,  next,  previous,  up
-@chapter Rational Number Functions
-@cindex Rational number functions
-
-All rational arithmetic functions canonicalize the result, so that the
-denominator and the numerator have no common factors.  Zero has the
-unique representation 0/1.
-
-The set of functions is quite small.  Maybe it will be extended in a
-future release.
-
-@deftypefun void mpq_init (MP_RAT *@var{dest_rational})
-Initialize @var{dest_rational} with limb space and set the initial
-numeric value to 0/1.  Each variable should normally only be initialized
-once, or at least cleared out (using the function @code{mpq_clear})
-between each initialization.
-@end deftypefun
-
-@deftypefun void mpq_clear (MP_RAT *@var{rational_number})
-Free the limb space occupied by @var{rational_number}.  Make sure to
-call this function for all @code{MP_RAT} variables when you are done
-with them.
-@end deftypefun
-
-@deftypefun void mpq_set (MP_RAT *@var{dest_rational}, MP_RAT *@var{src_rational})
-Assign @var{dest_rational} from @var{src_rational}.
-@end deftypefun
-
-@deftypefun void mpq_set_ui (MP_RAT *@var{rational_number}, unsigned long int @var{numerator}, unsigned long int @var{denominator})
-Set the value of @var{rational_number} to
-@var{numerator}/@var{denominator}.  If @var{numerator} and
-@var{denominator} have common factors, they are divided out before
-@var{rational_number} is assigned.
-@end deftypefun
-
-@deftypefun void mpq_set_si (MP_RAT *@var{rational_number}, signed long int @var{numerator}, unsigned long int @var{denominator})
-Like @code{mpq_set_ui}, but @var{numerator} is signed.
-@end deftypefun
-
-@deftypefun void mpq_add (MP_RAT *@var{sum}, MP_RAT *@var{addend1}, MP_RAT *@var{addend2})
-Set @var{sum} to @var{addend1} + @var{addend2}.
-@end deftypefun
-
-@deftypefun void mpq_sub (MP_RAT *@var{difference}, MP_RAT *@var{minuend}, MP_RAT *@var{subtrahend})
-Set @var{difference} to @var{minuend} @minus{} @var{subtrahend}.
-@end deftypefun
-
-@deftypefun void mpq_mul (MP_RAT *@var{product}, MP_RAT *@var{multiplicator}, MP_RAT *@var{multiplicand})
-Set @var{product} to @var{multiplicator} * @var{multiplicand}
-@end deftypefun
-
-@deftypefun void mpq_div (MP_RAT *@var{quotient}, MP_RAT *@var{dividend}, MP_RAT *@var{divisor})
-Set @var{quotient} to @var{dividend} / @var{divisor}.
-@end deftypefun
-
-@deftypefun void mpq_neg (MP_RAT *@var{negated_operand}, MP_RAT *@var{operand})
-Set @var{negated_operand} to @minus{}@var{operand}.
-@end deftypefun
-
-@deftypefun int mpq_cmp (MP_RAT *@var{operand1}, MP_RAT *@var{operand2})
-Compare @var{operand1} and @var{operand2}.  Return a positive value if
-@var{operand1} > @var{operand2}, zero if @var{operand1} = @var{operand2},
-and a negative value if @var{operand1} < @var{operand2}.
-@end deftypefun
-
-@deftypefun void mpq_inv (MP_RAT *@var{inverted_number}, MP_RAT *@var{number})
-Invert @var{number} by swapping the numerator and denominator.  If the
-new denominator becomes zero, this routine will divide by zero.
-@end deftypefun
-
-@deftypefun void mpq_set_num (MP_RAT *@var{rational_number}, MP_INT *@var{numerator})
-Make @var{numerator} become the numerator of @var{rational_number} by
-copying.
-@end deftypefun
-
-@deftypefun void mpq_set_den (MP_RAT *@var{rational_number}, MP_INT *@var{denominator})
-Make @var{denominator} become the denominator of @var{rational_number}
-by copying.  If @var{denominator} < 0 the denominator of
-@var{rational_number} is set to the absolute value of @var{denominator},
-and the sign of the numerator of @var{rational_number} is changed.
-@end deftypefun
-
-@deftypefun void mpq_get_num (MP_INT *@var{numerator}, MP_RAT *@var{rational_number})
-Copy the numerator of @var{rational_number} to the integer
-@var{numerator}, to prepare for integer operations on the numerator.
-@end deftypefun
-
-@deftypefun void mpq_get_den (MP_INT *@var{denominator}, MP_RAT *@var{rational_number})
-Copy the denominator of @var{rational_number} to the integer
-@var{denominator}, to prepare for integer operations on the denominator.
-@end deftypefun
-
-
-@node Low-level Functions, BSD Compatible Functions, Rational Number Functions, Top
-@comment  node-name,  next,  previous,  up
-@chapter Low-level Functions
-@cindex Low-level functions
-
-@c 1. Some of these function clobber input operands.
-@c 
-
-@strong{The next release of the GNU MP library (2.0) will include
-changes to some mpn functions.  Programs that use these functions
-according to the descriptions below will therefore not work with the
-next release.}
-
-The low-level function layer is designed to be as fast as possible,
-@strong{not} to provide a coherent calling interface.  The different
-functions have similar interfaces, but there are variations that might
-be confusing.  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 responsability of the caller to ensure that the destination
-has enough space for storing the result.
-
-With this way of specifying source operands, it is possible to perform
-computations on subranges of an argument, and store the result into a
-subrange of a destination.
-
-All these functions require that the operands are normalized in the
-sense that the most significant limb must be non-zero.  (A future release
-of might drop this requirement.)
-
-The low-level layer is the base for the implementation of the
-@code{mpz_} and @code{mpq_} layers.
-
-The code below adds the number beginning at @var{src1_ptr} and the
-number beginning at @var{src2_ptr} and writes the sum at @var{dest_ptr}.
-A constraint for @code{mpn_add} is that @var{src1_size} must not be
-smaller that @var{src2_size}.
-
-@example
-mpn_add (dest_ptr, src1_ptr, src1_size, src2_ptr, src2_size)
-@end example
-
-In the description below, a source operand is identified by the pointer
-to the least significant limb, and the limb count in braces.
-
-@deftypefun mp_size mpn_add (mp_ptr @var{dest_ptr}, mp_srcptr @var{src1_ptr}, mp_size @var{src1_size}, mp_srcptr @var{src2_ptr}, mp_size @var{src2_size})
-Add @{@var{src1_ptr}, @var{src1_size}@} and @{@var{src2_ptr},
-@var{src2_size}@}, and write the @var{src1_size} least significant limbs
-of the result to @var{dest_ptr}.  Carry-out, either 0 or 1, is returned.
-
-This function requires that @var{src1_size} is greater than or equal to
-@var{src2_size}.
-@end deftypefun
-
-@deftypefun mp_size mpn_sub (mp_ptr @var{dest_ptr}, mp_srcptr @var{src1_ptr}, mp_size @var{src1_size}, mp_srcptr @var{src2_ptr}, mp_size @var{src2_size})
-Subtarct @{@var{src2_ptr}, @var{src2_size}@} from @{@var{src1_ptr},
-@var{src1_size}@}, and write the result to @var{dest_ptr}.
-
-Return 1 if the minuend < the subtrahend.  Otherwise, return the
-negative difference between the number of words in the result and the
-minuend.  I.e@. return 0 if the result has @var{src1_size} words, @minus{}1 if
-it has @var{src1_size} @minus{} 1 words, etc.
-
-This function requires that @var{src1_size} is greater than or equal to
-@var{src2_size}.
-@end deftypefun
-
-@deftypefun mp_size mpn_mul (mp_ptr @var{dest_ptr}, mp_srcptr @var{src1_ptr}, mp_size @var{src1_size}, mp_srcptr @var{src2_ptr}, mp_size @var{src2_size})
-Multiply @{@var{src1_ptr}, @var{src1_size}@} and @{@var{src2_ptr},
-@var{src2_size}@}, and write the result to @var{dest_ptr}.  The exact
-size of the result is returned.
-
-The destination has to have space for @var{src1_size} + @var{src1_size}
-limbs, even if the result might be one limb smaller.
-
-This function requires that @var{src1_size} is greater than or equal to
-@var{src2_size}.  The destination must be distinct from either input
-operands.
-@end deftypefun
-
-@deftypefun mp_size mpn_div (mp_ptr @var{dest_ptr}, mp_ptr @var{src1_ptr}, mp_size @var{src1_size}, mp_srcptr @var{src2_ptr}, mp_size @var{src2_size})
-Divide @{@var{src1_ptr}, @var{src1_size}@} by @{@var{src2_ptr},
-@var{src2_size}@}, and write the quotient to @var{dest_ptr}, and the
-remainder to @var{src1_ptr}.
-
-Return 0 if the quotient size is at most (@var{src1_size} @minus{}
-@var{src2_size}), and 1 if the quotient size is at most (@var{src1_size}
-@minus{} @var{src2_size} + 1).  The caller has to check the most significant limb
-to find out the exact size.
-
-The most significant bit of the most significant limb of the divisor
-has to be set.
-
-This function requires that @var{src1_size} is greater than or equal to
-@var{src2_size}.  The quotient, pointed to by @var{dest_ptr}, must be
-distinct from either input operands.
-@end deftypefun
-
-@deftypefun mp_limb mpn_lshift (mp_ptr @var{dest_ptr}, mp_srcptr @var{src_ptr}, mp_size @var{src_size}, unsigned long int @var{count})
-Shift @{@var{src_ptr}, @var{src_size}@} @var{count} bits to the left, and
-write the @var{src_size} least significant limbs of the result to
-@var{dest_ptr}.  @var{count} might be in the range 1 to n @minus{} 1, on an n-bit
-machine. The limb shifted out is returned.
-
-Overlapping of the destination space and the source space is allowed in this
-function, provdied @var{dest_ptr} >= @var{src_ptr}.
-@end deftypefun
-
-@deftypefun mp_size mpn_rshift (mp_ptr @var{dest_ptr}, mp_srcptr @var{src_ptr}, mp_size @var{src_size}, unsigned long int @var{count})
-Shift @{@var{src_ptr}, @var{src_size}@} @var{count} bits to the right, and
-write the @var{src_size} least significant limbs of the result to
-@var{dest_ptr}.  @var{count} might be in the range 1 to n @minus{} 1, on an n-bit
-machine. The size of the result is returned.
-
-Overlaping of the destination space and the source space is allowed in this
-function, provdied @var{dest_ptr} <= @var{src_ptr}.
-@end deftypefun
-
-@deftypefun mp_size mpn_rshiftci (mp_ptr @var{dest_ptr}, mp_srcptr @var{src_ptr}, mp_size @var{src_size}, unsigned long int @var{count}, mp_limb @var{inlimb})
-Like mpn_rshift, but use @var{inlimb} to feed the least significant end
-of the destination.
-@end deftypefun
-
-@deftypefun int mpn_cmp (mp_srcptr @var{src1_ptr}, mp_srcptr @var{src2_ptr}, mp_size @var{size})
-Compare @{@var{src1_ptr}, @var{size}@} and @{@var{src2_ptr}, @var{size}@}
-and return a positive value if src1 > src2, 0 of they are equal,
-and a negative value if src1 < src2.
-@end deftypefun
-
-
-@node BSD Compatible Functions, Miscellaneous Functions, Low-level Functions, Top
-@comment  node-name,  next,  previous,  up
-@chapter Berkeley MP Compatible Functions
-@cindex BSD 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 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 @code{MINT} objects is more error prone, and the
-@code{pow} function collides with @code{pow} in @file{libm.a}.
-
-Include the header @file{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 @file{mp.h} if you are going to link the GNU @file{libmp.a}
-to you program.  This means that you probably need to give the -I<dir>
-option to the compiler, where <dir> is the directory where you have GNU
-@file{mp.h}.
-
-@deftypefun {MINT *} itom (signed short int @var{initial_value})
-Allocate an integer consisting of a @code{MINT} object and dynamic limb
-space.  Initialize the integer to @var{initial_value}.  Return a pointer
-to the @code{MINT} object.
-@end deftypefun
-
-@deftypefun {MINT *} xtom (char *@var{initial_value})
-Allocate an integer consisting of a @code{MINT} object and dynamic limb
-space.  Initialize the integer from @var{initial_value}, a hexadecimal,
-'\0'-terminate C string.  Return a pointer to the @code{MINT} object.
-@end deftypefun
-
-@deftypefun void move (MINT *@var{src}, MINT *@var{dest})
-Set @var{dest} to @var{src} by copying.  Both variables must be
-previously initialized.
-@end deftypefun
-
-@deftypefun void madd (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
-Add @var{src_1} and @var{src_2} and put the sum in @var{destination}.
-@end deftypefun
-
-@deftypefun void msub (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
-Subtract @var{src_2} from @var{src_1} and put the difference in
-@var{destination}.
-@end deftypefun
-
-@deftypefun void mult (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
-Multiply @var{src_1} and @var{src_2} and put the product in
-@var{destination}.
-@end deftypefun
-
-@deftypefun void mdiv (MINT *@var{dividend}, MINT *@var{divisor}, MINT *@var{quotient}, MINT *@var{remainder})
-@end deftypefun
-@deftypefun void sdiv (MINT *@var{dividend}, signed short int @var{divisor}, MINT *@var{quotient}, signed short int *@var{remainder})
-Set @var{quotient} to @var{dividend} / @var{divisor}, and
-@var{remainder} to @var{dividend} mod @var{divisor}.  The quotient is
-rounded towards zero; the remainder has the same sign as the dividend.
-
-Some implementations of this function return a remainder whose sign is
-inverted if the divisor is negative.  Such a definition makes little
-sense from a mathematical point of view.  GNU MP might be considered
-incompatible with the traditional MP in this respect.
-@end deftypefun
-
-@deftypefun void msqrt (MINT *@var{operand}, MINT *@var{root}, MINT *@var{remainder})
-Set @var{root} to the square root of @var{operand}, as with
-@code{mpz_sqrt}.  Set @var{remainder} to
-@ifinfo
-@var{operand}-@var{root}*@var{root},
-@end ifinfo
-@iftex
-@tex
-$operand - root^2$,
-@end tex
-@end iftex
-(i.e@. zero if @var{operand} is a perfect square).
-@end deftypefun
-
-@deftypefun void pow (MINT *@var{base}, MINT *@var{exp}, MINT *@var{mod}, MINT *@var{dest})
-Set @var{dest} to (@var{base} raised to @var{exp}) modulo @var{mod}.
-@end deftypefun
-
-@deftypefun void rpow (MINT *@var{base}, signed short int @var{exp}, MINT *@var{dest})
-Set @var{dest} to @var{base} raised to @var{exp}.
-@end deftypefun
-
-@deftypefun void gcd (MINT *@var{operand1}, MINT *@var{operand2}, MINT *@var{res})
-Set @var{res} to the greatest common divisor of @var{operand1} and
-@var{operand2}.
-@end deftypefun
-
-@deftypefun int mcmp (MINT *@var{operand1}, MINT *@var{operand2})
-Compare @var{operand1} and @var{operand2}.  Return a positive value if
-@var{operand1} > @var{operand2}, zero if @var{operand1} =
-@var{operand2}, and a negative value if @var{operand1} < @var{operand2}.
-@end deftypefun
-
-@deftypefun void min (MINT *@var{dest})
-Input a decimal string from stdin, and put the read integer in
-@var{dest}.  SPC and TAB are allowed in the number string, and are
-ignored.
-@end deftypefun
-
-@deftypefun void mout (MINT *@var{src})
-Output @var{src} to stdout, as a decimal string.  Also output a newline.
-@end deftypefun
-
-@deftypefun {char *} mtox (MINT *@var{operand})
-Convert @var{operand} to a hexadecimal string, and return a pointer to
-the string.  The returned string is allocated using the default memory
-allocation function, @code{malloc} by default. (@xref{Initialization},
-for an explanation of the memory allocation in MP).
-@end deftypefun
-
-@deftypefun void mfree (MINT *@var{operand})
-De-allocate, the space used by @var{operand}.  @strong{This function
-should only be passed a value returned by @code{itom} or @code{xtom}.}
-@end deftypefun
-
-@node Miscellaneous Functions, Custom Allocation, BSD Compatible Functions, Top
-@comment  node-name,  next,  previous,  up
-@chapter Miscellaneous Functions
-@cindex Miscellaneous functions
-
-@deftypefun void mpz_random (MP_INT *@var{random_integer}, mp_size @var{max_size})
-Generate a random integer of at most @var{max_size} limbs.  The generated
-random number doesn't satisfy any particular requirements of randomness.
-@end deftypefun
-
-@deftypefun void mpz_random2 (MP_INT *@var{random_integer}, mp_size @var{max_size})
-Generate a random integer of at most @var{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 bugs.
-@end deftypefun
-
-@deftypefun size_t mpz_size (MP_INT *@var{integer})
-Return the size of @var{integer} measured in number of limbs.  If
-@var{integer} is zero, the returned value will be zero, if @var{integer}
-has one limb, the returned value will be one, etc.
-(@xref{Nomenclature}, for an explanation of the concept @dfn{limb}.)
-@end deftypefun
-
-@deftypefun size_t mpz_sizeinbase (MP_INT *@var{integer}, int @var{base})
-Return the size of @var{integer} measured in number of digits in base
-@var{base}.  The base may vary from 2 to 36.  The returned value will be
-exact or 1 too big.  If @var{base} is a power of 2, the returned value
-will always be exact.
-
-This function is useful in order to allocate the right amount of space
-before converting @var{integer} to a string.  The right amount of
-allocation is normally two more than the value returned by
-@code{mpz_sizeinbase} (one extra for a minus sign and one for the
-terminating '\0').
-@end deftypefun
-
-@node Custom Allocation, Reporting Bugs, Miscellaneous Functions, Top
-@comment  node-name,  next,  previous,  up
-@section Custom Allocation
-
-By default, the initialization functions use @code{malloc},
-@code{realloc}, and @code{free} to do their work.  If @code{malloc} or
-@code{realloc} fails, the MP package terminates execution after a
-printing fatal error message on standard error.
-
-In some applications, you may wish to allocate memory in other ways, or
-you may not want to have a fatal error when there is no more memory
-available.  To accomplish this, you can specify alternative functions
-for allocating and de-allocating memory.  Use
-@code{mp_set_memory_functions} to do this.
-
-@findex mp_set_memory_functions
-@code{mp_set_memory_functions} has three arguments,
-@var{allocate_function}, @var{reallocate_function}, and
-@var{deallocate_function}, in that order.  If an argument is NULL,
-the corresponding default function is retained.
-
-The functions you supply should fit the following declarations:
-
-@table @code
-@item void * @var{allocate_function} (size_t @var{alloc_size})
-This function should return a pointer to newly allocated space with at
-least @var{alloc_size} storage units.
-
-@item void * @var{reallocate_function} (void *@var{ptr}, size_t @var{old_size}, size_t @var{new_size})
-This function should return a pointer to newly allocated space of at
-least @var{new_size} storage units, after copying the first
-@var{old_size} storage units from @var{ptr}.  It should also de-allocate the
-space at @var{ptr}.
-
-You can assume that the space at @var{ptr} was formely returned from
-@var{allocate_function} or @var{reallocate_function}, for a
-request for @var{old_size} storage units.
-
-@item void @var{deallocate_function} (void *@var{ptr}, size_t @var{size})
-De-allocate the space pointed to by @var{ptr}.
-
-You can assume that the space at @var{ptr} was formely returned from
-@var{allocate_function} or @var{reallocate_function}, for a
-request for @var{size} storage units.
-@end table
-
-(A @dfn{storage unit} is the unit in which the @code{sizeof} operator
-returns the size of an object, normally an 8 bit byte.)
-
-@strong{NOTE: call @code{mp_set_memory_functions} only before calling
-any other MP functions.} Otherwise, the user-defined allocation
-functions may be asked to re-allocate or de-allocate something
-previously allocated by the default allocation functions.
-
-@node Reporting Bugs, , Custom Allocation, Top
-@comment  node-name,  next,  previous,  up
-@chapter Reporting Bugs
-@cindex Reporting bugs
-
-If you think you have found a bug in the GNU MP library, please
-investigate it and report it.  We have made this library available to
-you, and it is not to ask too much from you, to ask you to report the
-bugs that you find.
-
-Please make sure that the bug is really in the GNU MP library.
-
-You have to send us a test case that makes it possible for us to
-reproduce the bug.
-
-You also have to explain what is wrong; if you get a crash, or if the
-results printed are not good and in that case, in what way.
-
-Make sure that the bug report includes all information you would
-need to fix this kind of bug for someone else.  Think twice.
-
-If your bug report is good, we will do our best to help you to get a
-corrected version of the library; if the bug report is poor, we won't do
-anything about it (aside of chiding you to send better bug reports).
-
-Send your bug report to: tege@@gnu.ai.mit.edu.
-
-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.
-
-
-@node References, , , Top
-@comment  node-name,  next,  previous,  up
-@unnumbered References
-
-@itemize @bullet
-
-@item
-Donald E@. Knuth, "The Art of Computer Programming", vol 2,
-"Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981.
-
-@item
-John D@. Lipson, "Elements of Algebra and Algebraic Computing",
-The Benjamin Cummins Publishing Company Inc, 1981.
-
-@item
-Richard M@. Stallman, "Using and Porting GCC", Free Software Foundation,
-1993.
-
-@item
-Peter L@. Montgomery, "Modular Multiplication Without Trial Division",
-Mathematics of Computation, volume 44, number 170, April 1985.
-
-@end itemize
-
-@node Concept Index, , , Top
-@comment  node-name,  next,  previous,  up
-@unnumbered Concept Index
-@printindex cp
-
-@node Function Index, , , Top
-@comment  node-name,  next,  previous,  up
-@unnumbered Function and Type Index
-@printindex fn
-
-
-@contents
-@bye