Convert to keyserv, telnetd and telnet to libcrypto's BIGNUM
[dragonfly.git] / contrib / libgmp / gmp.texi
1 \input texinfo    @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename gmp.info
4 @settitle GNU MP 2.0.2
5 @synindex tp fn
6 @iftex
7 @afourpaper
8 @end iftex
9 @comment %**end of header
10
11 @ifinfo
12 @format
13 START-INFO-DIR-ENTRY
14 * gmp: (gmp).                   GNU Multiple Precision Arithmetic Library.
15 END-INFO-DIR-ENTRY
16 @end format
17 @end ifinfo
18
19 @c smallbook
20
21 @iftex
22 @finalout
23 @end iftex
24
25 @c Note: the edition number is listed in *three* places; please update
26 @c all three.  Also, update the month and year where appropriate.
27
28 @c ==> Update edition number for settitle and subtitle, and in the
29 @c ==> following paragraph; update date, too.
30
31
32 @ifinfo
33 This file documents GNU MP, a library for arbitrary-precision arithmetic.
34
35 Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
36
37 Permission is granted to make and distribute verbatim copies of
38 this manual provided the copyright notice and this permission notice
39 are preserved on all copies.
40
41 @ignore
42 Permission is granted to process this file through TeX and print the
43 results, provided the printed document carries copying permission
44 notice identical to this one except for the removal of this paragraph
45 (this paragraph not being relevant to the printed manual).
46
47 @end ignore
48 Permission is granted to copy and distribute modified versions of this
49 manual under the conditions for verbatim copying, provided that the entire
50 resulting derived work is distributed under the terms of a permission
51 notice identical to this one.
52
53 Permission is granted to copy and distribute translations of this manual
54 into another language, under the above conditions for modified versions,
55 except that this permission notice may be stated in a translation approved
56 by the Foundation.
57 @end ifinfo
58
59 @setchapternewpage on
60 @titlepage
61 @c  use the new format for titles
62
63 @title GNU MP
64 @subtitle The GNU Multiple Precision Arithmetic Library
65 @subtitle Edition 2.0.2
66 @subtitle June 1996
67
68 @author by Torbj@"orn Granlund, TMG Datakonsult
69
70 @c Include the Distribution inside the titlepage so
71 @c that headings are turned off.
72
73 @tex
74 \global\parindent=0pt
75 \global\parskip=8pt
76 \global\baselineskip=13pt
77 @end tex
78
79 @page
80 @vskip 0pt plus 1filll
81 Copyright @copyright{} 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
82
83 @sp 2
84
85 Published by the Free Software Foundation @*
86 59 Temple Place - Suite 330 @*
87 Boston, MA 02111-1307, USA @*
88
89 Permission is granted to make and distribute verbatim copies of
90 this manual provided the copyright notice and this permission notice
91 are preserved on all copies.
92
93 Permission is granted to copy and distribute modified versions of this
94 manual under the conditions for verbatim copying, provided that the entire
95 resulting derived work is distributed under the terms of a permission
96 notice identical to this one.
97
98 Permission is granted to copy and distribute translations of this manual
99 into another language, under the above conditions for modified versions,
100 except that this permission notice may be stated in a translation approved
101 by the Foundation.
102 @end titlepage
103 @headings double
104
105 @ifinfo
106 @node Top, Copying, (dir), (dir)
107
108 @top GNU MP
109
110 This manual documents how to install and use the GNU multiple precision
111 arithmetic library, version 2.0.2.
112
113 @end ifinfo
114
115 @menu
116 * Copying::                   GMP Copying Conditions (LGPL).
117 * Introduction to MP::        Brief introduction to GNU MP.
118 * Installing MP::             How to configure and compile the MP library.
119 * MP Basics::                 What every MP user should now.
120 * Reporting Bugs::            How to usefully report bugs.
121 * Integer Functions::         Functions for arithmetic on signed integers.
122 * Rational Number Functions:: Functions for arithmetic on rational numbers.
123 * Floating-point Functions::  Functions for arithmetic on floats.
124 * Low-level Functions::       Fast functions for natural numbers.
125 * BSD Compatible Functions::  All functions found in BSD MP.
126 * Custom Allocation::         How to customize the internal allocation.
127
128 * Contributors::
129 * References::
130 * Concept Index::
131 * Function Index::
132 @end menu
133
134 @node Copying, Introduction to MP, Top, Top
135 @comment  node-name, next, previous,  up
136 @unnumbered GNU MP Copying Conditions
137 @cindex Copying conditions
138 @cindex Conditions for copying GNU MP
139
140 This library is @dfn{free}; this means that everyone is free to use it and
141 free to redistribute it on a free basis.  The library is not in the public
142 domain; it is copyrighted and there are restrictions on its distribution, but
143 these restrictions are designed to permit everything that a good cooperating
144 citizen would want to do.  What is not allowed is to try to prevent others
145 from further sharing any version of this library that they might get from
146 you.@refill
147
148 Specifically, we want to make sure that you have the right to give away copies
149 of the library, that you receive source code or else can get it if you want
150 it, that you can change this library or use pieces of it in new free programs,
151 and that you know you can do these things.@refill
152
153 To make sure that everyone has such rights, we have to forbid you to deprive
154 anyone else of these rights.  For example, if you distribute copies of the GNU
155 MP library, you must give the recipients all the rights that you have.  You
156 must make sure that they, too, receive or can get the source code.  And you
157 must tell them their rights.@refill
158
159 Also, for our own protection, we must make certain that everyone finds out
160 that there is no warranty for the GNU MP library.  If it is modified by
161 someone else and passed on, we want their recipients to know that what they
162 have is not what we distributed, so that any problems introduced by others
163 will not reflect on our reputation.@refill
164
165 The precise conditions of the license for the GNU MP library are found in the
166 Library General Public License that accompany the source code.@refill
167
168 @node Introduction to MP, Installing MP, Copying, Top
169 @comment  node-name,  next,  previous,  up
170 @chapter Introduction to GNU MP
171
172
173 GNU MP is a portable library written in C for arbitrary precision arithmetic
174 on integers, rational numbers, and floating-point numbers.  It aims to provide
175 the fastest possible arithmetic for all applications that need higher
176 precision than is directly supported by the basic C types.
177
178 Many applications use just a few hundred bits of precision; but some
179 applications may need thousands or even millions of bits.  MP is designed to
180 give good performance for both, by choosing algorithms based on the sizes of
181 the operands, and by carefully keeping the overhead at a minimum.
182
183 The speed of MP is achieved by using fullwords as the basic arithmetic type,
184 by using sophisticated algorithms, by including carefully optimized assembly
185 code for the most common inner loops for many different CPUs, and by a general
186 emphasis on speed (as opposed to simplicity or elegance).
187
188 There is carefully optimized assembly code for these CPUs: DEC Alpha, Amd
189 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, Intel i960, Motorola
190 MC68000, MC68020, MC88100, and MC88110, Motorola/IBM PowerPC, National
191 NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7, SuperSPARC, generic SPARCv8,
192 and DEC VAX.  Some optimizations also for ARM, Clipper, IBM ROMP (RT), and
193 Pyramid AP/XP.
194
195 This version of MP is released under a more liberal license than previous
196 versions.  It is now permitted to link MP to non-free programs, as long as MP
197 source code is provided when distributing the non-free program.
198
199
200 @section How to use this Manual
201
202 Everyone should read @ref{MP Basics}.  If you need to install the library
203 yourself, you need to read @ref{Installing MP}, too.
204
205 The rest of the manual can be used for later reference, although it is
206 probably a good idea to glance through it.
207
208
209 @node Installing MP, MP Basics, Introduction to MP, Top
210 @comment  node-name,  next,  previous,  up
211 @chapter Installing MP
212 @cindex Installation
213
214 To build MP, you first have to configure it for your CPU and operating system.
215 You need a C compiler, preferably GCC, but any reasonable compiler should
216 work.  And you need a standard Unix @samp{make} program, plus some other
217 standard Unix utility programs.
218
219 (If you're on an MS-DOS machine, your can build MP using @file{make.bat}.  It
220 requires that djgpp is installed.  It does not require configuration, nor is
221 @samp{make} needed; @file{make.bat} both configures and builds the library.)
222
223 Here are the steps needed to install the library on Unix systems:
224
225 @enumerate
226 @item
227 In most cases, @samp{./configure --target=cpu-vendor-os}, should work both for
228 native and cross-compilation.  If you get error messages, your machine might
229 not be supported.
230
231 If you want to compile in a separate object directory, cd to that directory,
232 and prefix the configure command with the path to the MP source directory.
233 Not all @samp{make} programs have the necessary features to support this.  In
234 particular, SunOS and Slowaris @samp{make} have bugs that makes them unable to
235 build from a separate object directory.  Use GNU @samp{make} instead.
236
237 In addition to the standard cpu-vendor-os tuples, MP recognizes sparc8 and
238 supersparc as valid CPU names.  Specifying these CPU names for relevant
239 systems will improve performance significantly.
240
241 In general, if you want a library that runs as fast as possible, you should
242 make sure you configure MP for the exact CPU type your system uses.
243
244 If you have @code{gcc} in your @code{PATH}, it will be used by default.  To
245 override this, pass @samp{-with-gcc=no} to @file{configure}.
246
247 @item
248 @samp{make}
249
250 This will compile MP, and create a library archive file @file{libgmp.a} in the
251 working directory.
252
253 @item
254 @samp{make check}
255
256 This will make sure MP was built correctly.  If you get error messages, please
257 report this to @samp{bug-gmp@@prep.ai.mit.edu}.  (@xref{Reporting Bugs}, for
258 information on what to include in useful bug reports.)
259
260 @item
261 @samp{make install}
262
263 This will copy the file @file{gmp.h} and @file{libgmp.a}, as well as the info
264 files, to @file{/usr/local} (or if you passed the @samp{--prefix} option to
265 @file{configure}, to the directory given as argument to @samp{--prefix}).
266 @end enumerate
267
268 @noindent
269 If you wish to build and install the BSD MP compatible functions, use
270 @samp{make libmp.a} and @samp{make install-bsdmp}.
271
272 There are some other useful make targets:
273
274 @itemize @bullet
275 @item
276 @samp{doc}
277
278 Create a DVI version of the manual, in @file{gmp.dvi} and a set of info files,
279 in @file{gmp.info}, @file{gmp.info-1}, @file{gmp.info-2}, etc.
280
281 @item
282 @samp{ps}
283
284 Create a Postscript version of the manual, in @file{gmp.ps}.
285
286 @item
287 @samp{html}
288
289 Create a HTML version of the manual, in @file{gmp.html}.
290
291 @item
292 @samp{clean}
293
294 Delete all object files and archive files, but not the configuration files.
295
296 @item
297 @samp{distclean}
298
299 Delete all files not included in the distribution.
300
301 @item
302 @samp{uninstall}
303
304 Delete all files copied by @samp{make install}.
305 @end itemize
306
307
308 @section Known Build Problems
309
310 GCC 2.7.2 (as well as 2.6.3) for the RS/6000 and PowerPC can not be used to
311 compile MP, due to a bug in GCC.  If you want to use GCC for these machines,
312 you need to apply the patch below to GCC, or use a later version of the
313 compiler.
314
315 If you are on a Sequent Symmetry, use the GNU assembler instead of the
316 system's assembler, since the latter has serious bugs.
317
318 The system compiler on NeXT is a massacred and old gcc, even if the compiler
319 calls itself @file{cc}.  This compiler cannot be used to build MP.  You need
320 to get a real gcc, and install that before you compile MP.  (NeXT might have
321 fixed this in newer releases of their system.)
322
323 The system C compiler under SunOS 4 has a bug that makes it miscompile
324 mpq/get_d.c.  This will make @samp{make check} fail.
325
326 Please report other problems to @samp{bug-gmp@@prep.ai.mit.edu}.
327 @xref{Reporting Bugs}.
328
329
330 Patch to apply to GCC 2.6.3 and 2.7.2:
331
332 @example
333 *** config/rs6000/rs6000.md     Sun Feb 11 08:22:11 1996
334 --- config/rs6000/rs6000.md.new Sun Feb 18 03:33:37 1996
335 ***************
336 *** 920,926 ****
337      (set (match_operand:SI 0 "gpc_reg_operand" "=r")
338         (not:SI (match_dup 1)))]
339     ""
340 !   "nor. %0,%2,%1"
341     [(set_attr "type" "compare")])
342   
343   (define_insn ""
344 --- 920,926 ----
345      (set (match_operand:SI 0 "gpc_reg_operand" "=r")
346         (not:SI (match_dup 1)))]
347     ""
348 !   "nor. %0,%1,%1"
349     [(set_attr "type" "compare")])
350   
351   (define_insn ""
352 @end example
353
354 @node MP Basics, Reporting Bugs, Installing MP, Top
355 @comment  node-name,  next,  previous,  up
356 @chapter MP Basics
357
358
359 @cindex @file{gmp.h}
360 All declarations needed to use MP are collected in the include file
361 @file{gmp.h}.  It is designed to work with both C and C++ compilers.
362
363
364 @section Nomenclature and Types
365
366 @cindex Integer
367 @tindex @code{mpz_t}
368 @noindent
369 In this manual, @dfn{integer} usually means a multiple precision integer, as
370 defined by the MP library.  The C data type for such integers is @code{mpz_t}.
371 Here are some examples of how to declare such integers:
372
373 @example
374 mpz_t sum;
375
376 struct foo @{ mpz_t x, y; @};
377
378 mpz_t vec[20];
379 @end example
380
381 @cindex Rational number
382 @tindex @code{mpq_t}
383 @noindent
384 @dfn{Rational number} means a multiple precision fraction.  The C data type
385 for these fractions is @code{mpq_t}.  For example:
386
387 @example
388 mpq_t quotient;
389 @end example
390
391 @cindex Floating-point number
392 @tindex @code{mpf_t}
393 @noindent
394 @dfn{Floating point number} or @dfn{Float} for short, is an arbitrary precision
395 mantissa with an limited precision exponent.  The C data type for such objects
396 is @code{mpf_t}.
397
398 @cindex Limb
399 @tindex @code{mp_limb_t}
400 @noindent
401 A @dfn{limb} means the part of a multi-precision number that fits in a single
402 word.  (We chose this word because a limb of the human body is analogous to a
403 digit, only larger, and containing several digits.)  Normally a limb contains
404 32 or 64 bits.  The C data type for a limb is @code{mp_limb_t}.
405
406
407 @section Function Classes
408
409 There are six classes of functions in the MP library:
410
411 @enumerate
412 @item
413 Functions for signed integer arithmetic, with names beginning with
414 @code{mpz_}.  The associated type is @code{mpz_t}.  There are about 100
415 functions in this class.
416
417 @item
418 Functions for rational number arithmetic, with names beginning with
419 @code{mpq_}.  The associated type is @code{mpq_t}.  There are about 20
420 functions in this class, but the functions in the previous class can be used
421 for performing arithmetic on the numerator and denominator separately.
422
423 @item
424 Functions for floating-point arithmetic, with names beginning with
425 @code{mpf_}.  The associated type is @code{mpf_t}.  There are about 50
426 functions is this class.
427
428 @item
429 Functions compatible with Berkeley MP, such as @code{itom}, @code{madd}, and
430 @code{mult}.  The associated type is @code{MINT}.
431
432 @item
433 Fast low-level functions that operate on natural numbers.  These are used by
434 the functions in the preceding groups, and you can also call them directly
435 from very time-critical user programs.  These functions' names begin with
436 @code{mpn_}.  There are about 30 (hard-to-use) functions in this class.
437
438 The associated type is array of @code{mp_limb_t}.
439
440 @item
441 Miscellaneous functions.  Functions for setting up custom allocation.
442 @end enumerate
443
444
445 @section MP Variable Conventions
446
447 As a general rule, all MP functions expect output arguments before input
448 arguments.  This notation is based on an analogy with the assignment operator.
449 (The BSD MP compatibility functions disobey this rule, having the output
450 argument(s) last.)
451
452 MP allows you to use the same variable for both input and output in the same
453 expression.  For example, the main function for integer multiplication,
454 @code{mpz_mul}, can be used like this: @code{mpz_mul (x, x, x)}.  This
455 computes the square of @var{x} and puts the result back in @var{x}.
456
457 Before you can assign to an MP variable, you need to initialize it by calling
458 one of the special initialization functions.  When you're done with a
459 variable, you need to clear it out, using one of the functions for that
460 purpose.  Which function to use depends on the type of variable.  See the
461 chapters on integer functions, rational number functions, and floating-point
462 functions for details.
463
464 A variable should only be initialized once, or at least cleared out between
465 each initialization.  After a variable has been initialized, it may be
466 assigned to any number of times.
467
468 For efficiency reasons, avoid to initialize and clear out a variable in loops.
469 Instead, initialize it before entering the loop, and clear it out after the
470 loop has exited.
471
472 You don't need to be concerned about allocating additional space for MP
473 variables.  All functions in MP automatically allocate additional space when a
474 variable does not already have enough space.  They do not, however, reduce the
475 space when a smaller number is stored in the object.  Most of the time, this
476 policy is best, since it avoids frequent re-allocation.
477
478
479 @section Useful Macros and Constants
480
481 @deftypevr {Global Constant} {const int} mp_bits_per_limb
482 The number of bits per limb.
483 @end deftypevr
484
485 @defmac __GNU_MP_VERSION
486 @defmacx __GNU_MP_VERSION_MINOR
487 The major and minor MP version, respectively, as integers.
488 @end defmac
489
490 @section Compatibility with Version 1.x
491
492 This version of MP is upward compatible with previous versions of MP, with a
493 few exceptions.
494
495 @enumerate
496 @item Integer division functions round the result differently.  The old
497 functions (@code{mpz_div}, @code{mpz_divmod}, @code{mpz_mdiv},
498 @code{mpz_mdivmod}, etc) now all use floor rounding (i.e., they round the
499 quotient to @minus{}infinity).  There are a lot of new functions for integer
500 division, giving the user better control over the rounding.
501
502 @item The function @code{mpz_mod} now compute the true @strong{mod} function.
503
504 @item The functions @code{mpz_powm} and @code{mpz_powm_ui} now use
505 @strong{mod} for reduction.
506
507 @item The assignment functions for rational numbers do no longer canonicalize
508 their results.  In the case a non-canonical result could arise from an
509 assignment, the user need to insert an explicit call to
510 @code{mpq_canonicalize}.  This change was made for efficiency.
511
512 @item Output generated by @code{mpz_out_raw} in this release cannot be read
513 by @code{mpz_inp_raw} in previous releases.  This change was made for making
514 the file format truly portable between machines with different word sizes.
515
516 @item Several @code{mpn} functions have changed.  But they were intentionally
517 undocumented in previous releases.
518
519 @item The functions @code{mpz_cmp_ui}, @code{mpz_cmp_si}, and @code{mpq_cmp_ui}
520 are now implementated as macros, and thereby sometimes evaluate their
521 arguments multiple times.
522
523 @item The functions @code{mpz_pow_ui} and @code{mpz_ui_pow_ui} now yield 1
524 for 0^0.  (In version 1, they yielded 0.)
525
526 @end enumerate
527
528
529 @section Getting the Latest Version of MP
530
531 The latest version of the MP library is available by anonymous ftp from
532 from @samp{prep.ai.mit.edu}.  The file name is
533 @file{/pub/gnu/gmp-M.N.tar.gz}.  Many sites around the world mirror
534 @samp{prep}; please use a mirror site near you.
535
536 @node Reporting Bugs, Integer Functions, MP Basics, Top
537 @comment  node-name,  next,  previous,  up
538 @chapter Reporting Bugs
539 @cindex Reporting bugs
540
541 If you think you have found a bug in the MP library, please investigate it and
542 report it.  We have made this library available to you, and it is not to ask
543 too much from you, to ask you to report the bugs that you find.
544
545 There are a few things you should think about when you put your bug report
546 together.
547
548 You have to send us a test case that makes it possible for us to reproduce the
549 bug.  Include instructions on how to run the test case.
550
551 You also have to explain what is wrong; if you get a crash, or if the results
552 printed are incorrect and in that case, in what way.
553
554 It is not uncommon that an observed problem is actually due to a bug in the
555 compiler used when building MP; the MP code tends to explore interesting
556 corners in compilers.  Therefore, please include compiler version information
557 in your bug report.  This can be extracted using @samp{what `which cc`}, or,
558 if you're using gcc, @samp{gcc -v}.  Also, include the output from @samp{uname
559 -a}.
560
561 If your bug report is good, we will do our best to help you to get a corrected
562 version of the library; if the bug report is poor, we won't do anything about
563 it (aside of chiding you to send better bug reports).
564
565 Send your bug report to: @samp{bug-gmp@@prep.ai.mit.edu}.
566
567 If you think something in this manual is unclear, or downright incorrect, or if
568 the language needs to be improved, please send a note to the same address.
569
570
571 @node Integer Functions, Rational Number Functions, Reporting Bugs, Top
572 @comment  node-name,  next,  previous,  up
573 @chapter Integer Functions
574 @cindex Integer functions
575
576 This chapter describes the MP functions for performing integer arithmetic.
577 These functions start with the prefix @code{mpz_}.
578
579 Arbitrary precision integers are stored in objects of type @code{mpz_t}.
580
581 @menu
582 * Initializing Integers::
583 * Assigning Integers::
584 * Simultaneous Integer Init & Assign::
585 * Converting Integers::
586 * Integer Arithmetic::
587 * Comparison Functions::
588 * Integer Logic and Bit Fiddling::
589 * I/O of Integers::
590 * Miscellaneous Integer Functions::
591 @end menu
592
593 @node Initializing Integers, Assigning Integers, , Integer Functions
594 @comment  node-name,  next,  previous,  up
595 @section Initialization and Assignment Functions
596
597 The functions for integer arithmetic assume that all integer objects are
598 initialized.  You do that by calling the function @code{mpz_init}.
599
600 @deftypefun void mpz_init (mpz_t @var{integer})
601 Initialize @var{integer} with limb space and set the initial numeric value to
602 0.  Each variable should normally only be initialized once, or at least cleared
603 out (using @code{mpz_clear}) between each initialization.
604 @end deftypefun
605
606 Here is an example of using @code{mpz_init}:
607
608 @example
609 @{
610   mpz_t integ;
611   mpz_init (integ);
612   @dots{}
613   mpz_add (integ, @dots{});
614   @dots{}
615   mpz_sub (integ, @dots{});
616
617   /* Unless the program is about to exit, do ... */
618   mpz_clear (integ);
619 @}
620 @end example
621
622 @noindent
623 As you can see, you can store new values any number of times, once an
624 object is initialized.
625
626 @deftypefun void mpz_clear (mpz_t @var{integer})
627 Free the limb space occupied by @var{integer}.  Make sure to call this
628 function for all @code{mpz_t} variables when you are done with them.
629 @end deftypefun
630
631 @deftypefun {void *} _mpz_realloc (mpz_t @var{integer}, mp_size_t @var{new_alloc})
632 Change the limb space allocation to @var{new_alloc} limbs.  This function is
633 not normally called from user code, but it can be used to give memory back to
634 the heap, or to increase the space of a variable to avoid repeated automatic
635 re-allocation.
636 @end deftypefun
637
638 @deftypefun void mpz_array_init (mpz_t @var{integer_array}[], size_t @var{array_size}, mp_size_t @var{fixed_num_bits})
639 Allocate @strong{fixed} limb space for all @var{array_size} integers in
640 @var{integer_array}.  The fixed allocation for each integer in the array is
641 enough to store @var{fixed_num_bits}.  If the fixed space will be insufficient
642 for storing the result of a subsequent calculation, the result is
643 unpredictable.
644
645 This function is useful for decreasing the working set for some algorithms
646 that use large integer arrays.
647
648 There is no way to de-allocate the storage allocated by this function.
649 Don't call @code{mpz_clear}!
650 @end deftypefun
651
652
653 @node Assigning Integers, Simultaneous Integer Init & Assign, Initializing Integers, Integer Functions
654 @comment  node-name,  next,  previous,  up
655 @subsection Assignment Functions
656 @cindex Integer assignment functions
657
658 These functions assign new values to already initialized integers
659 (@pxref{Initializing Integers}).
660
661 @deftypefun void mpz_set (mpz_t @var{rop}, mpz_t @var{op})
662 @deftypefunx void mpz_set_ui (mpz_t @var{rop}, unsigned long int @var{op})
663 @deftypefunx void mpz_set_si (mpz_t @var{rop}, signed long int @var{op})
664 @deftypefunx void mpz_set_d (mpz_t @var{rop}, double @var{op})
665 @deftypefunx void mpz_set_q (mpz_t @var{rop}, mpq_t @var{op})
666 @deftypefunx void mpz_set_f (mpz_t @var{rop}, mpf_t @var{op})
667 Set the value of @var{rop} from @var{op}.
668 @end deftypefun
669
670 @deftypefun int mpz_set_str (mpz_t @var{rop}, char *@var{str}, int @var{base})
671 Set the value of @var{rop} from @var{str}, a '\0'-terminated C string in base
672 @var{base}.  White space is allowed in the string, and is simply ignored.  The
673 base may vary from 2 to 36.  If @var{base} is 0, the actual base is determined
674 from the leading characters: if the first two characters are `0x' or `0X',
675 hexadecimal is assumed, otherwise if the first character is `0', octal is
676 assumed, otherwise decimal is assumed.
677
678 This function returns 0 if the entire string up to the '\0' is a valid
679 number in base @var{base}.  Otherwise it returns @minus{}1.
680 @end deftypefun
681
682
683 @node Simultaneous Integer Init & Assign, Converting Integers, Assigning Integers, Integer Functions
684 @comment  node-name,  next,  previous,  up
685 @subsection Combined Initialization and Assignment Functions
686 @cindex Initialization and assignment functions
687
688 For convenience, MP provides a parallel series of initialize-and-set functions
689 which initialize the output and then store the value there.  These functions'
690 names have the form @code{mpz_init_set@dots{}}
691
692 Here is an example of using one:
693
694 @example
695 @{
696   mpz_t pie;
697   mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10);
698   @dots{}
699   mpz_sub (pie, @dots{});
700   @dots{}
701   mpz_clear (pie);
702 @}
703 @end example
704
705 @noindent
706 Once the integer has been initialized by any of the @code{mpz_init_set@dots{}}
707 functions, it can be used as the source or destination operand for the ordinary
708 integer functions.  Don't use an initialize-and-set function on a variable
709 already initialized!
710
711 @deftypefun void mpz_init_set (mpz_t @var{rop}, mpz_t @var{op})
712 @deftypefunx void mpz_init_set_ui (mpz_t @var{rop}, unsigned long int @var{op})
713 @deftypefunx void mpz_init_set_si (mpz_t @var{rop}, signed long int @var{op})
714 @deftypefunx void mpz_init_set_d (mpz_t @var{rop}, double @var{op})
715 Initialize @var{rop} with limb space and set the initial numeric value from
716 @var{op}.
717 @end deftypefun
718
719 @deftypefun int mpz_init_set_str (mpz_t @var{rop}, char *@var{str}, int @var{base})
720 Initialize @var{rop} and set its value like @code{mpz_set_str} (see its
721 documentation above for details).
722
723 If the string is a correct base @var{base} number, the function returns 0;
724 if an error occurs it returns @minus{}1.  @var{rop} is initialized even if
725 an error occurs.  (I.e., you have to call @code{mpz_clear} for it.)
726 @end deftypefun
727
728
729 @node Converting Integers,  Integer Arithmetic, Simultaneous Integer Init & Assign, Integer Functions
730 @comment  node-name,  next,  previous,  up
731 @section Conversion Functions
732 @cindex Integer conversion functions
733 @cindex Conversion functions
734
735 This section describes functions for converting arbitrary precision integers
736 to standard C types.  Functions for converting @emph{to} arbitrary
737 precision integers are described in @ref{Assigning Integers} and @ref{I/O of
738 Integers}.
739
740 @deftypefun {unsigned long int} mpz_get_ui (mpz_t @var{op})
741 Return the least significant part from @var{op}.  This function combined
742 with @* @code{mpz_tdiv_q_2exp(@dots{}, @var{op}, CHAR_BIT*sizeof(unsigned
743 long int))} can be used to extract the limbs of an integer.
744 @end deftypefun
745
746 @deftypefun {signed long int} mpz_get_si (mpz_t @var{op})
747 If @var{op} fits into a @code{signed long int} return the value of @var{op}.
748 Otherwise return the least significant part of @var{op}, with the same sign
749 as @var{op}.
750
751 If @var{op} is too large to fit in a @code{signed long int}, the returned
752 result is probably not very useful.  @c To find out if the value will fit, use
753 @c the function @code{mpz_fits_si}.
754 @end deftypefun
755
756 @deftypefun double mpz_get_d (mpz_t @var{op})
757 Convert @var{op} to a double.
758 @end deftypefun
759
760 @deftypefun {char *} mpz_get_str (char *@var{str}, int @var{base}, mpz_t @var{op})
761 Convert @var{op} to a string of digits in base @var{base}.  The base may vary
762 from 2 to 36.
763
764 If @var{str} is NULL, space for the result string is allocated using the
765 default allocation function, and a pointer to the string is returned.
766
767 If @var{str} is not NULL, it should point to a block of storage enough large
768 for the result.  To find out the right amount of space to provide for
769 @var{str}, use @code{mpz_sizeinbase (@var{op}, @var{base}) + 2}.  The two
770 extra bytes are for a possible minus sign, and for the terminating null
771 character.
772 @end deftypefun
773
774
775 @node Integer Arithmetic, Comparison Functions, Converting Integers, Integer Functions
776 @comment  node-name,  next,  previous,  up
777 @section Arithmetic Functions
778 @cindex Integer arithmetic functions
779 @cindex Arithmetic functions
780
781 @deftypefun void mpz_add (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
782 @deftypefunx void mpz_add_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
783 @ifinfo
784 Set @var{rop} to @var{op1} + @var{op2}.
785 @end ifinfo
786 @iftex
787 @tex
788 Set @var{rop} to $@var{op1} + @var{op2}$.
789 @end tex
790 @end iftex
791 @end deftypefun
792
793 @deftypefun void mpz_sub (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
794 @deftypefunx void mpz_sub_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
795 Set @var{rop} to @var{op1} @minus{} @var{op2}.
796 @end deftypefun
797
798 @deftypefun void mpz_mul (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
799 @deftypefunx void mpz_mul_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
800 @ifinfo
801 Set @var{rop} to @var{op1} times @var{op2}.
802 @end ifinfo
803 @iftex
804 @tex
805 Set @var{rop} to $@var{op1} \times @var{op2}$.
806 @end tex
807 @end iftex
808 @end deftypefun
809
810 @deftypefun void mpz_mul_2exp (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
811 @ifinfo
812 Set @var{rop} to @var{op1} times 2 raised to @var{op2}.  This operation can
813 also be defined as a left shift, @var{op2} steps.
814 @end ifinfo
815 @iftex
816 @tex
817 Set @var{rop} to $@var{op1} \times 2^{op2}$.  This operation can also be
818 defined as a left shift, @var{op2} steps.
819 @end tex
820 @end iftex
821 @end deftypefun
822
823 @deftypefun void mpz_neg (mpz_t @var{rop}, mpz_t @var{op})
824 Set @var{rop} to @minus{}@var{op}.
825 @end deftypefun
826
827 @deftypefun void mpz_abs (mpz_t @var{rop}, mpz_t @var{op})
828 Set @var{rop} to the absolute value of @var{op}.
829 @end deftypefun
830
831 @deftypefun void mpz_fac_ui (mpz_t @var{rop}, unsigned long int @var{op})
832 Set @var{rop} to @var{op}!, the factorial of @var{op}.
833 @end deftypefun
834
835 @subsection Division functions
836
837 Division is undefined if the divisor is zero, and passing a zero divisor to
838 the divide or modulo functions, as well passing a zero mod argument to the
839 @code{mpz_powm} and @code{mpz_powm_ui} functions, will make these functions
840 intentionally divide by zero.  This gives the user the possibility to handle
841 arithmetic exceptions in these functions in the same manner as other
842 arithmetic exceptions.
843
844 There are three main groups of division functions:
845 @itemize @bullet
846 @item
847 Functions that truncate the quotient towards 0.  The names of these
848 functions start with @code{mpz_tdiv}.  The @samp{t} in the name is short for
849 @samp{truncate}.
850 @item
851 Functions that round the quotient towards @minus{}infinity.  The names of
852 these routines start with @code{mpz_fdiv}.  The @samp{f} in the name is
853 short for @samp{floor}.
854 @item
855 Functions that round the quotient towards +infinity.  The names of
856 these routines start with @code{mpz_cdiv}.  The @samp{c} in the name is
857 short for @samp{ceil}.
858 @end itemize
859
860 For each rounding mode, there are a couple of variants.  Here @samp{q} means
861 that the quotient is computed, while @samp{r} means that the remainder is
862 computed.  Functions that compute both the quotient and remainder have
863 @samp{qr} in the name.
864
865 @deftypefun void mpz_tdiv_q (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
866 @deftypefunx void mpz_tdiv_q_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
867 Set @var{rop} to [@var{op1}/@var{op2}].  The quotient is truncated towards
868 0.
869 @end deftypefun
870
871 @deftypefun void mpz_tdiv_r (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
872 @deftypefunx void mpz_tdiv_r_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
873 Set @var{rop} to (@var{op1} - [@var{op1}/@var{op2}] * @var{op2}).
874 Unless the remainder is zero, it has the same sign as the dividend.
875 @end deftypefun
876
877 @deftypefun void mpz_tdiv_qr (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, mpz_t @var{op2})
878 @deftypefunx void mpz_tdiv_qr_ui (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, unsigned long int @var{op2})
879 Divide @var{op1} by @var{op2} and put the quotient in @var{rop1} and the
880 remainder in @var{rop2}.  The quotient is rounded towards 0.  Unless the
881 remainder is zero, it has the same sign as the dividend.
882
883 If @var{rop1} and @var{rop2} are the same variable, the results are
884 undefined.
885 @end deftypefun
886
887 @deftypefun void mpz_fdiv_q (mpz_t @var{rop1}, mpz_t @var{op1}, mpz_t @var{op2})
888 @deftypefunx void mpz_fdiv_q_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
889 @ifinfo
890 Set @var{rop} to @var{op1}/@var{op2}.  The quotient is rounded towards
891 @minus{}infinity.
892 @end ifinfo
893 @iftex
894 @tex
895 Set @var{rop} to $\lfloor@var{op1}/@var{op2}\rfloor$.  (I.e., round
896 the quotient towards $-\infty$.)
897 @end tex
898 @end iftex
899 @end deftypefun
900
901 @deftypefun void mpz_fdiv_r (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
902 @deftypefunx {unsigned long int} mpz_fdiv_r_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
903 Divide @var{op1} by @var{op2} and put the remainder in @var{rop}.  Unless
904 the remainder is zero, it has the same sign as the divisor.
905
906 For @code{mpz_fdiv_r_ui} the remainder is small enough to fit in an
907 @code{unsigned long int}, and is therefore returned.
908 @end deftypefun
909
910 @deftypefun void mpz_fdiv_qr (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, mpz_t @var{op2})
911 @deftypefunx {unsigned long int} mpz_fdiv_qr_ui (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, unsigned long int @var{op2})
912 Divide @var{op1} by @var{op2} and put the quotient in @var{rop1} and the
913 remainder in @var{rop2}.  The quotient is rounded towards @minus{}infinity.
914 Unless the remainder is zero, it has the same sign as the divisor.
915
916 For @code{mpz_fdiv_qr_ui} the remainder is small enough to fit in an
917 @code{unsigned long int}, and is therefore returned.
918
919 If @var{rop1} and @var{rop2} are the same variable, the results are
920 undefined.
921 @end deftypefun
922
923 @deftypefun {unsigned long int} mpz_fdiv_ui (mpz_t @var{op1}, unsigned long int @var{op2})
924 This function is similar to @code{mpz_fdiv_r_ui}, but the remainder is only
925 returned; it is not stored anywhere.
926 @end deftypefun
927
928 @deftypefun void mpz_cdiv_q (mpz_t @var{rop1}, mpz_t @var{op1}, mpz_t @var{op2})
929 @deftypefunx void mpz_cdiv_q_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
930 @ifinfo
931 Set @var{rop} to @var{op1}/@var{op2}.  The quotient is rounded towards
932 +infinity.
933 @end ifinfo
934 @iftex
935 @tex
936 Set @var{rop} to $\lceil@var{op1}/@var{op2}\rceil$.  (I.e., round the
937 quotient towards $+\infty$.)
938 @end tex
939 @end iftex
940 @end deftypefun
941
942 @deftypefun void mpz_cdiv_r (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
943 @deftypefunx {unsigned long int} mpz_cdiv_r_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
944 Divide @var{op1} by @var{op2} and put the remainder in @var{rop}.  Unless
945 the remainder is zero, it has the opposite sign as the divisor.
946
947 For @code{mpz_cdiv_r_ui} the negated remainder is small enough to fit in an
948 @code{unsigned long int}, and it is therefore returned.
949 @end deftypefun
950
951 @deftypefun void mpz_cdiv_qr (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, mpz_t @var{op2})
952 @deftypefunx {unsigned long int} mpz_cdiv_qr_ui (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op1}, unsigned long int @var{op2})
953 Divide @var{op1} by @var{op2} and put the quotient in @var{rop1} and the
954 remainder in @var{rop2}.  The quotient is rounded towards +infinity.  Unless
955 the remainder is zero, it has the opposite sign as the divisor.
956
957 For @code{mpz_cdiv_qr_ui} the negated remainder is small enough to fit in an
958 @code{unsigned long int}, and it is therefore returned.
959
960 If @var{rop1} and @var{rop2} are the same variable, the results are
961 undefined.
962 @end deftypefun
963
964 @deftypefun {unsigned long int} mpz_cdiv_ui (mpz_t @var{op1}, unsigned long int @var{op2})
965 Return the negated remainder, similar to @code{mpz_cdiv_r_ui}.  (The
966 difference is that this function doesn't store the remainder anywhere.)
967 @end deftypefun
968
969 @deftypefun void mpz_mod (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
970 @deftypefunx {unsigned long int} mpz_mod_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
971 Set @var{rop} to @var{op1} @code{mod} @var{op2}.  The sign of the divisor is
972 ignored, and the result is always non-negative.
973
974 For @code{mpz_mod_ui} the remainder is small enough to fit in an
975 @code{unsigned long int}, and is therefore returned.
976 @end deftypefun
977
978 @deftypefun void mpz_divexact (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
979 Set @var{rop} to @var{op1}/@var{op2}.  This function produces correct
980 results only when it is known in advance that @var{op2} divides
981 @var{op1}.
982
983 Since mpz_divexact is much faster than any of the other routines that produce
984 the quotient (@pxref{References} Jebelean), it is the best choice for
985 instances in which exact division is known to occur, such as reducing a
986 rational to lowest terms.
987 @end deftypefun
988
989 @deftypefun void mpz_tdiv_q_2exp (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
990 @ifinfo
991 Set @var{rop} to @var{op1} divided by 2 raised to @var{op2}.  The quotient is
992 rounded towards 0.
993 @end ifinfo
994 @iftex
995 @tex
996 Set @var{rop} to $@var{op1}/2^{op2}$.  The quotient is rounded towards 0.
997 @end tex
998 @end iftex
999 @end deftypefun
1000
1001 @deftypefun void mpz_tdiv_r_2exp (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
1002 @ifinfo
1003 Divide @var{op1} by (2 raised to @var{op2}) and put the remainder in
1004 @var{rop}.  Unless it is zero, @var{rop} will have the same sign as @var{op1}.
1005 @end ifinfo
1006 @iftex
1007 @tex
1008 Divide @var{op1} by $2^{op2}$ and put the remainder in @var{rop}.  Unless it is
1009 zero, @var{rop} will have the same sign as @var{op1}.
1010 @end tex
1011 @end iftex
1012 @end deftypefun
1013
1014 @deftypefun void mpz_fdiv_q_2exp (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
1015 @ifinfo
1016 Set @var{rop} to @var{op1} divided by 2 raised to @var{op2}.  The quotient is
1017 rounded towards @minus{}infinity.
1018 @end ifinfo
1019 @iftex
1020 @tex
1021 Set @var{rop} to $\lfloor@var{op1}/2^{op2}\rfloor$.  The quotient is rounded
1022 towards $-\infty$.
1023 @end tex
1024 @end iftex
1025 @end deftypefun
1026
1027 @deftypefun void mpz_fdiv_r_2exp (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
1028 @ifinfo
1029 Divide @var{op1} by (2 raised to @var{op2}) and put the remainder in
1030 @var{rop}.  The sign of @var{rop} will always be positive.
1031 @end ifinfo
1032 @iftex
1033 @tex
1034 Divide @var{op1} by $2^{op2}$ and put the remainder in @var{rop}.  The sign of
1035 @var{rop} will always be positive.
1036 @end tex
1037 @end iftex
1038
1039 This operation can also be defined as masking of the @var{op2} least
1040 significant bits.
1041 @end deftypefun
1042
1043 @subsection Exponentialization Functions
1044
1045 @deftypefun void mpz_powm (mpz_t @var{rop}, mpz_t @var{base}, mpz_t @var{exp}, mpz_t @var{mod})
1046 @deftypefunx void mpz_powm_ui (mpz_t @var{rop}, mpz_t @var{base}, unsigned long int @var{exp}, mpz_t @var{mod})
1047 Set @var{rop} to (@var{base} raised to @var{exp}) @code{mod} @var{mod}.  If
1048 @var{exp} is negative, the result is undefined.
1049 @end deftypefun
1050
1051 @deftypefun void mpz_pow_ui (mpz_t @var{rop}, mpz_t @var{base}, unsigned long int @var{exp})
1052 @deftypefunx void mpz_ui_pow_ui (mpz_t @var{rop}, unsigned long int @var{base}, unsigned long int @var{exp})
1053 Set @var{rop} to @var{base} raised to @var{exp}.
1054 @ifinfo
1055 The case of 0^0 yields 1.
1056 @end ifinfo
1057 @iftex
1058 @tex
1059 The case of $0^0$ yields 1.
1060 @end tex
1061 @end iftex
1062 @end deftypefun
1063
1064 @subsection Square Root Functions
1065
1066 @deftypefun void mpz_sqrt (mpz_t @var{rop}, mpz_t @var{op})
1067 @ifinfo
1068 Set @var{rop} to the truncated integer part of the square root of
1069 @var{op}.
1070 @end ifinfo
1071 @iftex
1072 @tex
1073 Set @var{rop} to $\lfloor\sqrt{@var{op}}\rfloor$, the truncated integer
1074 part of the square root of @var{op}.
1075 @end tex
1076 @end iftex
1077 @end deftypefun
1078
1079 @deftypefun void mpz_sqrtrem (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op})
1080 @ifinfo
1081 Set @var{rop1} to the truncated integer part of the square root of @var{op},
1082 like @code{mpz_sqrt}.  Set @var{rop2} to
1083 @var{op}@minus{}@var{rop1}*@var{rop1},
1084 @end ifinfo
1085 @iftex
1086 @tex
1087 Set @var{rop1} to $\lfloor\sqrt{@var{op}}\rfloor$, like @code{mpz_sqrt}.
1088 Set @var{rop2} to $(@var{op} - @var{rop1}^2)$,
1089 @end tex
1090 @end iftex
1091 (i.e., zero if @var{op} is a perfect square).
1092
1093 If @var{rop1} and @var{rop2} are the same variable, the results are
1094 undefined.
1095 @end deftypefun
1096
1097 @deftypefun int mpz_perfect_square_p (mpz_t @var{op})
1098 Return non-zero if @var{op} is a perfect square, i.e., if the square root of
1099 @var{op} is an integer.  Return zero otherwise.
1100 @end deftypefun
1101
1102 @subsection Number Theoretic Functions
1103
1104 @deftypefun int mpz_probab_prime_p (mpz_t @var{op}, int @var{reps})
1105 @ifinfo
1106 If this function returns 0, @var{op} is definitely not prime.  If it returns
1107 1, then @var{op} is `probably' prime.  The probability of a false positive is
1108 (1/4)**@var{reps}.
1109 @end ifinfo
1110 @iftex
1111 @tex
1112 If this function returns 0, @var{op} is definitely not prime.  If it returns
1113 1, then @var{op} is `probably' prime.  The probability of a false positive is
1114 $(1/4)^{{reps}}$.
1115 @end tex
1116 @end iftex
1117 A reasonable value of reps is 25.
1118
1119 An implementation of the probabilistic primality test found in Seminumerical
1120 Algorithms (@pxref{References} Knuth).
1121 @end deftypefun
1122
1123 @deftypefun void mpz_gcd (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
1124 Set @var{rop} to the greatest common divisor of @var{op1} and @var{op2}.
1125 @end deftypefun
1126
1127 @deftypefun {unsigned long int} mpz_gcd_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
1128 Compute the greatest common divisor of @var{op1} and @var{op2}.  If
1129 @var{rop} is not NULL, store the result there.
1130
1131 If the result is small enough to fit in an @code{unsigned long int}, it is
1132 returned.  If the result does not fit, 0 is returned, and the result is equal
1133 to the argument @var{op1}.  Note that the result will always fit if @var{op2}
1134 is non-zero.
1135 @end deftypefun
1136
1137 @deftypefun void mpz_gcdext (mpz_t @var{g}, mpz_t @var{s}, mpz_t @var{t}, mpz_t @var{a}, mpz_t @var{b})
1138 Compute @var{g}, @var{s}, and @var{t}, such that @var{a}@var{s} +
1139 @var{b}@var{t} = @var{g} = @code{gcd} (@var{a}, @var{b}).  If @var{t} is
1140 NULL, that argument is not computed.
1141 @end deftypefun
1142
1143 @deftypefun int mpz_invert (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
1144 Compute the inverse of @var{op1} modulo @var{op2} and put the result in
1145 @var{rop}.  Return non-zero if an inverse exist, zero otherwise.  When the
1146 function returns zero, do not assume anything about the value in @var{rop}.
1147 @end deftypefun
1148
1149 @deftypefun int mpz_jacobi (mpz_t @var{op1}, mpz_t @var{op2})
1150 @deftypefunx int mpz_legendre (mpz_t @var{op1}, mpz_t @var{op2})
1151 Compute the Jacobi and Legendre symbols, respectively.
1152 @end deftypefun
1153
1154 @need 2000
1155 @node Comparison Functions, Integer Logic and Bit Fiddling, Integer Arithmetic, Integer Functions
1156 @comment  node-name,  next,  previous,  up
1157 @section Comparison Functions
1158
1159 @deftypefun int mpz_cmp (mpz_t @var{op1}, mpz_t @var{op2})
1160 @ifinfo
1161 Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
1162 @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
1163 @var{op2}.
1164 @end ifinfo
1165 @iftex
1166 @tex
1167 Compare @var{op1} and @var{op2}.  Return a positive value if $@var{op1} >
1168 @var{op2}$, zero if $@var{op1} = @var{op2}$, and a negative value if $@var{op1}
1169 < @var{op2}$.
1170 @end tex
1171 @end iftex
1172 @end deftypefun
1173
1174 @deftypefn Macro int mpz_cmp_ui (mpz_t @var{op1}, unsigned long int @var{op2})
1175 @deftypefnx Macro int mpz_cmp_si (mpz_t @var{op1}, signed long int @var{op2})
1176 @ifinfo
1177 Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
1178 @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
1179 @var{op2}.
1180 @end ifinfo
1181 @iftex
1182 @tex
1183 Compare @var{op1} and @var{op2}.  Return a positive value if $@var{op1} >
1184 @var{op2}$, zero if $@var{op1} = @var{op2}$, and a negative value if $@var{op1}
1185 < @var{op2}$.
1186 @end tex
1187 @end iftex
1188
1189 These functions are actually implemented as macros.  They evaluate their
1190 arguments multiple times.
1191 @end deftypefn
1192
1193 @deftypefn Macro int mpz_sgn (mpz_t @var{op})
1194 @ifinfo
1195 Return +1 if @var{op} > 0, 0 if @var{op} = 0, and @minus{}1 if @var{op} < 0.
1196 @end ifinfo
1197 @iftex
1198 @tex
1199 Return $+1$ if $@var{op} > 0$, 0 if $@var{op} = 0$, and $-1$ if $@var{op} < 0$.
1200 @end tex
1201 @end iftex
1202
1203 This function is actually implemented as a macro.  It evaluates its
1204 arguments multiple times.
1205 @end deftypefn
1206
1207 @node Integer Logic and Bit Fiddling, I/O of Integers, Comparison Functions, Integer Functions
1208 @comment  node-name,  next,  previous,  up
1209 @section Logical and Bit Manipulation Functions
1210 @cindex Logical functions
1211 @cindex Bit manipulation functions
1212
1213 These functions behave as if two's complement arithmetic were used (although
1214 sign-magnitude is used by the actual implementation).
1215
1216 @deftypefun void mpz_and (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
1217 Set @var{rop} to @var{op1} logical-and @var{op2}.
1218 @end deftypefun
1219
1220 @deftypefun void mpz_ior (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
1221 Set @var{rop} to @var{op1} inclusive-or @var{op2}.
1222 @end deftypefun
1223
1224 @c @deftypefun void mpz_xor (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
1225 @c Set @var{rop} to @var{op1} exclusive-or @var{op2}.
1226 @c @end deftypefun
1227
1228 @deftypefun void mpz_com (mpz_t @var{rop}, mpz_t @var{op})
1229 Set @var{rop} to the one's complement of @var{op}.
1230 @end deftypefun
1231
1232 @deftypefun {unsigned long int} mpz_popcount (mpz_t @var{op})
1233 For non-negative numbers, return the population count of @var{op}.  For
1234 negative numbers, return the largest possible value (@var{MAX_ULONG}).
1235 @end deftypefun
1236
1237 @deftypefun {unsigned long int} mpz_hamdist (mpz_t @var{op1}, mpz_t @var{op2})
1238 If @var{op1} and @var{op2} are both non-negative, return the hamming distance
1239 between the two operands.  Otherwise, return the largest possible value
1240 (@var{MAX_ULONG}).
1241
1242 It is possible to extend this function to return a useful value when the
1243 operands are both negative, but the current implementation returns
1244 @var{MAX_ULONG} in this case.  @strong{Do not depend on this behavior, since
1245 it will change in future versions of the library.}
1246 @end deftypefun
1247
1248 @deftypefun {unsigned long int} mpz_scan0 (mpz_t @var{op}, unsigned long int @var{starting_bit})
1249 Scan @var{op}, starting with bit @var{starting_bit}, towards more significant
1250 bits, until the first clear bit is found.  Return the index of the found bit.
1251 @end deftypefun
1252
1253 @deftypefun {unsigned long int} mpz_scan1 (mpz_t @var{op}, unsigned long int @var{starting_bit})
1254 Scan @var{op}, starting with bit @var{starting_bit}, towards more significant
1255 bits, until the first set bit is found.  Return the index of the found bit.
1256 @end deftypefun
1257
1258 @deftypefun void mpz_setbit (mpz_t @var{rop}, unsigned long int @var{bit_index})
1259 Set bit @var{bit_index} in @var{op1}.
1260 @end deftypefun
1261
1262 @deftypefun void mpz_clrbit (mpz_t @var{rop}, unsigned long int @var{bit_index})
1263 Clear bit @var{bit_index} in @var{op1}.
1264 @end deftypefun
1265
1266 @node I/O of Integers, Miscellaneous Integer Functions, Integer Logic and Bit Fiddling, Integer Functions
1267 @comment  node-name,  next,  previous,  up
1268 @section Input and Output Functions
1269 @cindex Integer input and output functions
1270 @cindex Input functions
1271 @cindex Output functions
1272 @cindex I/O functions
1273
1274 Functions that perform input from a stdio stream, and functions that output to
1275 a stdio stream.  Passing a NULL pointer for a @var{stream} argument to any of
1276 these functions will make them read from @code{stdin} and write to
1277 @code{stdout}, respectively.
1278
1279 When using any of these functions, it is a good idea to include @file{stdio.h}
1280 before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes
1281 for these functions.
1282
1283 @deftypefun size_t mpz_out_str (FILE *@var{stream}, int @var{base}, mpz_t @var{op})
1284 Output @var{op} on stdio stream @var{stream}, as a string of digits in base
1285 @var{base}.  The base may vary from 2 to 36.
1286
1287 Return the number of bytes written, or if an error occurred, return 0.
1288 @end deftypefun
1289
1290 @deftypefun size_t mpz_inp_str (mpz_t @var{rop}, FILE *@var{stream}, int @var{base})
1291 Input a possibly white-space preceded string in base @var{base} from stdio
1292 stream @var{stream}, and put the read integer in @var{rop}.  The base may vary
1293 from 2 to 36.  If @var{base} is 0, the actual base is determined from the
1294 leading characters: if the first two characters are `0x' or `0X', hexadecimal
1295 is assumed, otherwise if the first character is `0', octal is assumed,
1296 otherwise decimal is assumed.
1297
1298 Return the number of bytes read, or if an error occurred, return 0.
1299 @end deftypefun
1300
1301 @deftypefun size_t mpz_out_raw (FILE *@var{stream}, mpz_t @var{op})
1302 Output @var{op} on stdio stream @var{stream}, in raw binary format.  The
1303 integer is written in a portable format, with 4 bytes of size information, and
1304 that many bytes of limbs.  Both the size and the limbs are written in
1305 decreasing significance order (i.e., in big-endian).
1306
1307 The output can be read with @code{mpz_inp_raw}.
1308
1309 Return the number of bytes written, or if an error occurred, return 0.
1310
1311 The output of this can not be read by @code{mpz_inp_raw} from GMP 1, because
1312 of changes necessary for compatibility between 32-bit and 64-bit machines.
1313 @end deftypefun
1314
1315 @deftypefun size_t mpz_inp_raw (mpz_t @var{rop}, FILE *@var{stream})
1316 Input from stdio stream @var{stream} in the format written by
1317 @code{mpz_out_raw}, and put the result in @var{rop}.  Return the number of
1318 bytes read, or if an error occurred, return 0.
1319
1320 This routine can read the output from @code{mpz_out_raw} also from GMP 1, in
1321 spite of changes necessary for compatibility between 32-bit and 64-bit
1322 machines.
1323 @end deftypefun
1324
1325
1326 @need 2000
1327 @node Miscellaneous Integer Functions,, I/O of Integers, Integer Functions
1328 @comment  node-name,  next,  previous,  up
1329 @section Miscellaneous Functions
1330 @cindex Miscellaneous integer functions
1331
1332 @deftypefun void mpz_random (mpz_t @var{rop}, mp_size_t @var{max_size})
1333 Generate a random integer of at most @var{max_size} limbs.  The generated
1334 random number doesn't satisfy any particular requirements of randomness.
1335 Negative random numbers are generated when @var{max_size} is negative.
1336 @end deftypefun
1337
1338 @deftypefun void mpz_random2 (mpz_t @var{rop}, mp_size_t @var{max_size})
1339 Generate a random integer of at most @var{max_size} limbs, with long strings
1340 of zeros and ones in the binary representation.  Useful for testing functions
1341 and algorithms, since this kind of random numbers have proven to be more
1342 likely to trigger corner-case bugs.  Negative random numbers are generated
1343 when @var{max_size} is negative.
1344 @end deftypefun
1345
1346 @deftypefun size_t mpz_size (mpz_t @var{op})
1347 Return the size of @var{op} measured in number of limbs.  If @var{op} is zero,
1348 the returned value will be zero.
1349 @c (@xref{Nomenclature}, for an explanation of the concept @dfn{limb}.)
1350
1351 @strong{This function is obsolete.  It will disappear from future MP
1352 releases.}
1353 @end deftypefun
1354
1355 @deftypefun size_t mpz_sizeinbase (mpz_t @var{op}, int @var{base})
1356 Return the size of @var{op} measured in number of digits in base @var{base}.
1357 The base may vary from 2 to 36.  The returned value will be exact or 1 too
1358 big.  If @var{base} is a power of 2, the returned value will always be exact.
1359
1360 This function is useful in order to allocate the right amount of space before
1361 converting @var{op} to a string.  The right amount of allocation is normally
1362 two more than the value returned by @code{mpz_sizeinbase} (one extra for a
1363 minus sign and one for the terminating '\0').
1364 @end deftypefun
1365
1366
1367 @node Rational Number Functions, Floating-point Functions, Integer Functions, Top
1368 @comment  node-name,  next,  previous,  up
1369 @chapter Rational Number Functions
1370 @cindex Rational number functions
1371
1372 This chapter describes the MP functions for performing arithmetic on rational
1373 numbers.  These functions start with the prefix @code{mpq_}.
1374
1375 Rational numbers are stored in objects of type @code{mpq_t}.
1376
1377 All rational arithmetic functions assume operands have a canonical form, and
1378 canonicalize their result.  The canonical from means that the denominator and
1379 the numerator have no common factors, and that the denominator is positive.
1380 Zero has the unique representation 0/1.
1381
1382 Pure assignment functions do not canonicalize the assigned variable.  It is
1383 the responsibility of the user to canonicalize the assigned variable before
1384 any arithmetic operations are performed on that variable.  @strong{Note that
1385 this is an incompatible change from version 1 of the library.}
1386
1387 @deftypefun void mpq_canonicalize (mpq_t @var{op})
1388 Remove any factors that are common to the numerator and denominator of
1389 @var{op}, and make the denominator positive.
1390 @end deftypefun
1391
1392 @menu
1393 * Initializing Rationals::
1394 * Assigning Rationals::
1395 * Simultaneous Integer Init & Assign::
1396 * Comparing Rationals::
1397 * Applying Integer Functions::
1398 * Miscellaneous Rational Functions::
1399 @end menu
1400
1401 @node Initializing Rationals, Assigning Rationals, Rational Number Functions, Rational Number Functions
1402 @comment  node-name,  next,  previous,  up
1403 @section Initialization and Assignment Functions
1404
1405 @deftypefun void mpq_init (mpq_t @var{dest_rational})
1406 Initialize @var{dest_rational} and set it to 0/1.  Each variable should
1407 normally only be initialized once, or at least cleared out (using the function
1408 @code{mpq_clear}) between each initialization.
1409 @end deftypefun
1410
1411 @deftypefun void mpq_clear (mpq_t @var{rational_number})
1412 Free the space occupied by @var{rational_number}.  Make sure to call this
1413 function for all @code{mpq_t} variables when you are done with them.
1414 @end deftypefun
1415
1416 @deftypefun void mpq_set (mpq_t @var{rop}, mpq_t @var{op})
1417 @deftypefunx void mpq_set_z (mpq_t @var{rop}, mpz_t @var{op})
1418 Assign @var{rop} from @var{op}.
1419 @end deftypefun
1420
1421 @deftypefun void mpq_set_ui (mpq_t @var{rop}, unsigned long int @var{op1}, unsigned long int @var{op2})
1422 @deftypefunx void mpq_set_si (mpq_t @var{rop}, signed long int @var{op1}, unsigned long int @var{op2})
1423 Set the value of @var{rop} to @var{op1}/@var{op2}.  Note that if @var{op1} and
1424 @var{op2} have common factors, @var{rop} has to be passed to
1425 @code{mpq_canonicalize} before any operations are performed on @var{rop}.
1426 @end deftypefun
1427
1428 @node Assigning Rationals, Comparing Rationals, Initializing Rationals, Rational Number Functions
1429 @comment  node-name,  next,  previous,  up
1430 @section Arithmetic Functions
1431
1432 @deftypefun void mpq_add (mpq_t @var{sum}, mpq_t @var{addend1}, mpq_t @var{addend2})
1433 Set @var{sum} to @var{addend1} + @var{addend2}.
1434 @end deftypefun
1435
1436 @deftypefun void mpq_sub (mpq_t @var{difference}, mpq_t @var{minuend}, mpq_t @var{subtrahend})
1437 Set @var{difference} to @var{minuend} @minus{} @var{subtrahend}.
1438 @end deftypefun
1439
1440 @deftypefun void mpq_mul (mpq_t @var{product}, mpq_t @var{multiplier}, mpq_t @var{multiplicand})
1441 @ifinfo
1442 Set @var{product} to @var{multiplier} times @var{multiplicand}.
1443 @end ifinfo
1444 @iftex
1445 @tex
1446 Set @var{product} to $@var{multiplier} \times @var{multiplicand}$.
1447 @end tex
1448 @end iftex
1449 @end deftypefun
1450
1451 @deftypefun void mpq_div (mpq_t @var{quotient}, mpq_t @var{dividend}, mpq_t @var{divisor})
1452 Set @var{quotient} to @var{dividend}/@var{divisor}.
1453 @end deftypefun
1454
1455 @deftypefun void mpq_neg (mpq_t @var{negated_operand}, mpq_t @var{operand})
1456 Set @var{negated_operand} to @minus{}@var{operand}.
1457 @end deftypefun
1458
1459 @deftypefun void mpq_inv (mpq_t @var{inverted_number}, mpq_t @var{number})
1460 Set @var{inverted_number} to 1/@var{number}.  If the new denominator is
1461 zero, this routine will divide by zero.
1462 @end deftypefun
1463
1464 @node Comparing Rationals, Applying Integer Functions, Assigning Rationals, Rational Number Functions
1465 @comment  node-name,  next,  previous,  up
1466 @section Comparison Functions
1467
1468 @deftypefun int mpq_cmp (mpq_t @var{op1}, mpq_t @var{op2})
1469 @ifinfo
1470 Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
1471 @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
1472 @var{op2}.
1473 @end ifinfo
1474 @iftex
1475 @tex
1476 Compare @var{op1} and @var{op2}.  Return a positive value if $@var{op1} >
1477 @var{op2}$, zero if $@var{op1} = @var{op2}$, and a negative value if $@var{op1}
1478 < @var{op2}$.
1479 @end tex
1480 @end iftex
1481
1482 To determine if two rationals are equal, @code{mpq_equal} is faster than
1483 @code{mpq_cmp}.
1484 @end deftypefun
1485
1486 @deftypefn Macro int mpq_cmp_ui (mpq_t @var{op1}, unsigned long int @var{num2}, unsigned long int @var{den2})
1487 @ifinfo
1488 Compare @var{op1} and @var{num2}/@var{den2}.  Return a positive value if
1489 @var{op1} > @var{num2}/@var{den2}, zero if @var{op1} = @var{num2}/@var{den2},
1490 and a negative value if @var{op1} < @var{num2}/@var{den2}.
1491 @end ifinfo
1492 @iftex
1493 @tex
1494 Compare @var{op1} and @var{num2}/@var{den2}.  Return a positive value if
1495 $@var{op1} > @var{num2}/@var{den2}$, zero if $@var{op1} =
1496 @var{num2}/@var{den2}$, and a negative value if $@var{op1} <
1497 @var{num2}/@var{den2}$.
1498 @end tex
1499 @end iftex
1500
1501 This routine allows that @var{num2} and @var{den2} have common factors.
1502
1503 This function is actually implemented as a macro.  It evaluates its
1504 arguments multiple times.
1505 @end deftypefn
1506
1507 @deftypefn Macro int mpq_sgn (mpq_t @var{op})
1508 @ifinfo
1509 Return +1 if @var{op} > 0, 0 if @var{op} = 0, and @minus{}1 if @var{op} < 0.
1510 @end ifinfo
1511 @iftex
1512 @tex
1513 Return $+1$ if $@var{op} > 0$, 0 if $@var{op} = 0$, and $-1$ if $@var{op} < 0$.
1514 @end tex
1515 @end iftex
1516
1517 This function is actually implemented as a macro.  It evaluates its
1518 arguments multiple times.
1519 @end deftypefn
1520
1521 @deftypefun int mpq_equal (mpq_t @var{op1}, mpq_t @var{op2})
1522 Return non-zero if @var{op1} and @var{op2} are equal, zero if they are
1523 non-equal.  Although @code{mpq_cmp} can be used for the same purpose, this
1524 function is much faster.
1525 @end deftypefun
1526
1527 @node Applying Integer Functions, Miscellaneous Rational Functions, Comparing Rationals, Rational Number Functions
1528 @comment  node-name,  next,  previous,  up
1529 @section Applying Integer Functions to Rationals
1530
1531 The set of @code{mpq} functions is quite small.  In particular, there are no
1532 functions for either input or output.  But there are two macros that allow us
1533 to apply any @code{mpz} function on the numerator or denominator of a rational
1534 number.  If these macros are used to assign to the rational number,
1535 @code{mpq_canonicalize} normally need to be called afterwards.
1536
1537 @deftypefn Macro mpz_t mpq_numref (mpq_t @var{op})
1538 @deftypefnx Macro mpz_t mpq_denref (mpq_t @var{op})
1539 Return a reference to the numerator and denominator of @var{op}, respectively.
1540 The @code{mpz} functions can be used on the result of these macros.
1541 @end deftypefn
1542
1543 @need 2000
1544 @node Miscellaneous Rational Functions, , Applying Integer Functions, Rational Number Functions
1545 @comment  node-name,  next,  previous,  up
1546 @section Miscellaneous Functions
1547
1548 @deftypefun double mpq_get_d (mpq_t @var{op})
1549 Convert @var{op} to a double.
1550 @end deftypefun
1551
1552 These functions assign between either the numerator or denominator of a
1553 rational, and an integer.  Instead of using these functions, it is preferable
1554 to use the more general mechanisms @code{mpq_numref} and @code{mpq_denref},
1555 together with @code{mpz_set}.
1556
1557 @deftypefun void mpq_set_num (mpq_t @var{rational}, mpz_t @var{numerator})
1558 Copy @var{numerator} to the numerator of @var{rational}.  When this risks to
1559 make the numerator and denominator of @var{rational} have common factors, you
1560 have to pass @var{rational} to @code{mpq_canonicalize} before any operations
1561 are performed on @var{rational}.
1562
1563 This function is equivalent to
1564 @code{mpz_set (mpq_numref (@var{rational}), @var{numerator})}.
1565 @end deftypefun
1566
1567 @deftypefun void mpq_set_den (mpq_t @var{rational}, mpz_t @var{denominator})
1568 Copy @var{denominator} to the denominator of @var{rational}.  When this risks
1569 to make the numerator and denominator of @var{rational} have common factors,
1570 or if the denominator might be negative, you have to pass @var{rational} to
1571 @code{mpq_canonicalize} before any operations are performed on @var{rational}.
1572
1573 @strong{In version 1 of the library, negative denominators were handled by
1574 copying the sign to the numerator.  That is no longer done.}
1575
1576 This function is equivalent to
1577 @code{mpz_set (mpq_denref (@var{rational}), @var{denominators})}.
1578 @end deftypefun
1579
1580 @deftypefun void mpq_get_num (mpz_t @var{numerator}, mpq_t @var{rational})
1581 Copy the numerator of @var{rational} to the integer @var{numerator}, to
1582 prepare for integer operations on the numerator.
1583
1584 This function is equivalent to
1585 @code{mpz_set (@var{numerator}, mpq_numref (@var{rational}))}.
1586 @end deftypefun
1587
1588 @deftypefun void mpq_get_den (mpz_t @var{denominator}, mpq_t @var{rational})
1589 Copy the denominator of @var{rational} to the integer @var{denominator}, to
1590 prepare for integer operations on the denominator.
1591
1592 This function is equivalent to
1593 @code{mpz_set (@var{denominator}, mpq_denref (@var{rational}))}.
1594 @end deftypefun
1595
1596
1597 @node Floating-point Functions, Low-level Functions, Rational Number Functions, Top
1598 @comment  node-name,  next,  previous,  up
1599 @chapter Floating-point Functions
1600 @cindex Floating-point functions
1601 @cindex Float functions
1602
1603 This is a description of the @emph{preliminary} interface for floating-point
1604 arithmetic in GNU MP 2.
1605
1606 The floating-point functions expect arguments of type @code{mpf_t}.
1607
1608 The MP floating-point functions have an interface that is similar to the MP
1609 integer functions.  The function prefix for floating-point operations is
1610 @code{mpf_}.
1611
1612 There is one significant characteristic of floating-point numbers that has
1613 motivated a difference between this function class and other MP function
1614 classes: the inherent inexactness of floating point arithmetic.  The user has
1615 to specify the precision of each variable.  A computation that assigns a
1616 variable will take place with the precision of the assigned variable; the
1617 precision of variables used as input is ignored.
1618
1619 @cindex User-defined precision
1620 The precision of a calculation is defined as follows: Compute the requested
1621 operation exactly (with ``infinite precision''), and truncate the result to
1622 the destination variable precision.  Even if the user has asked for a very
1623 high precision, MP will not calculate with superfluous digits.  For example,
1624 if two low-precision numbers of nearly equal magnitude are added, the
1625 precision of the result will be limited to what is required to represent the
1626 result accurately.
1627
1628 The MP floating-point functions are @emph{not} intended as a smooth extension
1629 to the IEEE P754 arithmetic.  Specifically, the results obtained on one
1630 computer often differs from the results obtained on a computer with a
1631 different word size.
1632
1633 @menu
1634 * Initializing Floats::
1635 * Assigning Floats::
1636 * Simultaneous Float Init & Assign::
1637 * Converting Floats::
1638 * Float Arithmetic::
1639 * Float Comparison::
1640 * I/O of Floats::
1641 * Miscellaneous Float Functions::
1642 @end menu
1643
1644 @node Initializing Floats, Assigning Floats, , Floating-point Functions
1645 @comment  node-name,  next,  previous,  up
1646 @section Initialization and Assignment Functions
1647
1648 @deftypefun void mpf_set_default_prec (unsigned long int @var{prec})
1649 Set the default precision to be @strong{at least} @var{prec} bits.  All
1650 subsequent calls to @code{mpf_init} will use this precision, but previously
1651 initialized variables are unaffected.
1652 @end deftypefun
1653
1654 An @code{mpf_t} object must be initialized before storing the first value in
1655 it.  The functions @code{mpf_init} and @code{mpf_init2} are used for that
1656 purpose.
1657
1658 @deftypefun void mpf_init (mpf_t @var{x})
1659 Initialize @var{x} to 0.  Normally, a variable should be initialized once only
1660 or at least be cleared, using @code{mpf_clear}, between initializations.  The
1661 precision of @var{x} is undefined unless a default precision has already been
1662 established by a call to @code{mpf_set_default_prec}.
1663 @end deftypefun
1664
1665 @deftypefun void mpf_init2 (mpf_t @var{x}, unsigned long int @var{prec})
1666 Initialize @var{x} to 0 and set its precision to be @strong{at least}
1667 @var{prec} bits.  Normally, a variable should be initialized once only or at
1668 least be cleared, using @code{mpf_clear}, between initializations.
1669 @end deftypefun
1670
1671 @deftypefun void mpf_clear (mpf_t @var{x})
1672 Free the space occupied by @var{x}.  Make sure to call this function for all
1673 @code{mpf_t} variables when you are done with them.
1674 @end deftypefun
1675
1676 @need 2000
1677 Here is an example on how to initialize floating-point variables:
1678 @example
1679 @{
1680   mpf_t x, y;
1681   mpf_init (x);                 /* use default precision */
1682   mpf_init2 (y, 256);           /* precision @emph{at least} 256 bits */
1683   @dots{}
1684   /* Unless the program is about to exit, do ... */
1685   mpf_clear (x);
1686   mpf_clear (y);
1687 @}
1688 @end example
1689
1690 The following three functions are useful for changing the precision during a
1691 calculation.  A typical use would be for adjusting the precision gradually in
1692 iterative algorithms like Newton-Raphson, making the computation precision
1693 closely match the actual accurate part of the numbers.
1694
1695 @deftypefun void mpf_set_prec (mpf_t @var{rop}, unsigned long int @var{prec})
1696 Set the precision of @var{rop} to be @strong{at least} @var{prec} bits.
1697 Since changing the precision involves calls to @code{realloc}, this routine
1698 should not be called in a tight loop.
1699 @end deftypefun
1700
1701 @deftypefun {unsigned long int} mpf_get_prec (mpf_t @var{op})
1702 Return the precision actually used for assignments of @var{op}.
1703 @end deftypefun
1704
1705 @deftypefun void mpf_set_prec_raw (mpf_t @var{rop}, unsigned long int @var{prec})
1706 Set the precision of @var{rop} to be @strong{at least} @var{prec} bits.  This
1707 is a low-level function that does not change the allocation.  The @var{prec}
1708 argument must not be larger that the precision previously returned by
1709 @code{mpf_get_prec}.  It is crucial that the precision of @var{rop} is
1710 ultimately reset to exactly the value returned by @code{mpf_get_prec}.
1711 @end deftypefun
1712
1713
1714 @node Assigning Floats, Simultaneous Float Init & Assign, Initializing Floats, Floating-point Functions
1715 @comment  node-name,  next,  previous,  up
1716 @subsection Assignment Functions
1717 @cindex Float assignment functions
1718
1719 These functions assign new values to already initialized floats
1720 (@pxref{Initializing Floats}).
1721
1722 @deftypefun void mpf_set (mpf_t @var{rop}, mpf_t @var{op})
1723 @deftypefunx void mpf_set_ui (mpf_t @var{rop}, unsigned long int @var{op})
1724 @deftypefunx void mpf_set_si (mpf_t @var{rop}, signed long int @var{op})
1725 @deftypefunx void mpf_set_d (mpf_t @var{rop}, double @var{op})
1726 @deftypefunx void mpf_set_z (mpf_t @var{rop}, mpz_t @var{op})
1727 @deftypefunx void mpf_set_q (mpf_t @var{rop}, mpq_t @var{op})
1728 Set the value of @var{rop} from @var{op}.
1729 @end deftypefun
1730
1731 @deftypefun int mpf_set_str (mpf_t @var{rop}, char *@var{str}, int @var{base})
1732 Set the value of @var{rop} from the string in @var{str}.  The string is of the
1733 form @samp{M@@N} or, if the base is 10 or less, alternatively @samp{MeN}.
1734 @samp{M} is the mantissa and @samp{N} is the exponent.  The mantissa is always
1735 in the specified base.  The exponent is either in the specified base or, if
1736 @var{base} is negative, in decimal.
1737
1738 The argument @var{base} may be in the ranges 2 to 36, or @minus{}36 to
1739 @minus{}2.  Negative values are used to specify that the exponent is in
1740 decimal.
1741
1742 Unlike the corresponding @code{mpz} function, the base will not be determined
1743 from the leading characters of the string if @var{base} is 0.  This is so that
1744 numbers like @samp{0.23} are not interpreted as octal.
1745
1746 White space is allowed in the string, and is simply ignored.
1747
1748 This function returns 0 if the entire string up to the '\0' is a valid number
1749 in base @var{base}.  Otherwise it returns @minus{}1.
1750 @end deftypefun
1751
1752
1753 @node Simultaneous Float Init & Assign, Converting Floats, Assigning Floats, Floating-point Functions
1754 @comment  node-name,  next,  previous,  up
1755 @subsection Combined Initialization and Assignment Functions
1756 @cindex Initialization and assignment functions
1757
1758 For convenience, MP provides a parallel series of initialize-and-set functions
1759 which initialize the output and then store the value there.  These functions'
1760 names have the form @code{mpf_init_set@dots{}}
1761
1762 Once the float has been initialized by any of the @code{mpf_init_set@dots{}}
1763 functions, it can be used as the source or destination operand for the ordinary
1764 float functions.  Don't use an initialize-and-set function on a variable
1765 already initialized!
1766
1767 @deftypefun void mpf_init_set (mpf_t @var{rop}, mpf_t @var{op})
1768 @deftypefunx void mpf_init_set_ui (mpf_t @var{rop}, unsigned long int @var{op})
1769 @deftypefunx void mpf_init_set_si (mpf_t @var{rop}, signed long int @var{op})
1770 @deftypefunx void mpf_init_set_d (mpf_t @var{rop}, double @var{op})
1771 Initialize @var{rop} and set its value from @var{op}.
1772
1773 The precision of @var{rop} will be taken from the active default precision, as
1774 set by @code{mpf_set_default_prec}.
1775 @end deftypefun
1776
1777 @deftypefun int mpf_init_set_str (mpf_t @var{rop}, char *@var{str}, int @var{base})
1778 Initialize @var{rop} and set its value from the string in @var{str}.  See
1779 @code{mpf_set_str} above for details on the assignment operation.
1780
1781 Note that @var{rop} is initialized even if an error occurs.  (I.e., you have to
1782 call @code{mpf_clear} for it.)
1783
1784 The precision of @var{rop} will be taken from the active default precision, as
1785 set by @code{mpf_set_default_prec}.
1786 @end deftypefun
1787
1788
1789 @node Converting Floats, Float Arithmetic, Simultaneous Float Init & Assign, Floating-point Functions
1790 @comment  node-name,  next,  previous,  up
1791 @section Conversion Functions
1792 @cindex Conversion functions
1793
1794 @deftypefun double mpf_get_d (mpf_t @var{op})
1795 Convert @var{op} to a double.
1796 @end deftypefun
1797
1798 @deftypefun {char *} mpf_get_str (char *@var{str}, mp_exp_t *@var{expptr}, int @var{base}, size_t @var{n_digits}, mpf_t @var{op})
1799 Convert @var{op} to a string of digits in base @var{base}.  The base may vary
1800 from 2 to 36.  Generate at most @var{n_digits} significant digits, or if
1801 @var{n_digits} is 0, the maximum number of digits accurately representable by
1802 @var{op}.
1803
1804 If @var{str} is NULL, space for the mantissa is allocated using the default
1805 allocation function, and a pointer to the string is returned.
1806
1807 If @var{str} is not NULL, it should point to a block of storage enough large
1808 for the mantissa, i.e., @var{n_digits} + 2.  The two extra bytes are for a
1809 possible minus sign, and for the terminating null character.
1810
1811 The exponent is written through the pointer @var{expptr}.
1812
1813 If @var{n_digits} is 0, the maximum number of digits meaningfully achievable
1814 from the precision of @var{op} will be generated.  Note that the space
1815 requirements for @var{str} in this case will be impossible for the user to
1816 predetermine.  Therefore, you need to pass NULL for the string argument
1817 whenever @var{n_digits} is 0.
1818
1819 The generated string is a fraction, with an implicit radix point immediately
1820 to the left of the first digit.  For example, the number 3.1416 would be
1821 returned as "31416" in the string and 1 written at @var{expptr}.
1822 @end deftypefun
1823
1824
1825 @node Float Arithmetic, Float Comparison, Converting Floats, Floating-point Functions
1826 @comment  node-name,  next,  previous,  up
1827 @section Arithmetic Functions
1828 @cindex Float arithmetic functions
1829 @cindex Arithmetic functions
1830
1831 @deftypefun void mpf_add (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
1832 @deftypefunx void mpf_add_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1833 @ifinfo
1834 Set @var{rop} to @var{op1} + @var{op2}.
1835 @end ifinfo
1836 @iftex
1837 @tex
1838 Set @var{rop} to $@var{op1} + @var{op2}$.
1839 @end tex
1840 @end iftex
1841 @end deftypefun
1842
1843 @deftypefun void mpf_sub (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
1844 @deftypefunx void mpf_ui_sub (mpf_t @var{rop}, unsigned long int @var{op1}, mpf_t @var{op2})
1845 @deftypefunx void mpf_sub_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1846 Set @var{rop} to @var{op1} @minus{} @var{op2}.
1847 @end deftypefun
1848
1849 @deftypefun void mpf_mul (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
1850 @deftypefunx void mpf_mul_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1851 @ifinfo
1852 Set @var{rop} to @var{op1} times @var{op2}.
1853 @end ifinfo
1854 @iftex
1855 @tex
1856 Set @var{rop} to $@var{op1} \times @var{op2}$.
1857 @end tex
1858 @end iftex
1859 @end deftypefun
1860
1861 Division is undefined if the divisor is zero, and passing a zero divisor to
1862 the divide functions will make these functions intentionally divide by zero.
1863 This gives the user the possibility to handle arithmetic exceptions in these
1864 functions in the same manner as other arithmetic exceptions.
1865
1866 @deftypefun void mpf_div (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
1867 @deftypefunx void mpf_ui_div (mpf_t @var{rop}, unsigned long int @var{op1}, mpf_t @var{op2})
1868 @deftypefunx void mpf_div_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1869 Set @var{rop} to @var{op1}/@var{op2}.
1870 @end deftypefun
1871
1872 @deftypefun void mpf_sqrt (mpf_t @var{rop}, mpf_t @var{op})
1873 @deftypefunx void mpf_sqrt_ui (mpf_t @var{rop}, unsigned long int @var{op})
1874 @ifinfo
1875 Set @var{rop} to the square root of @var{op}.
1876 @end ifinfo
1877 @iftex
1878 @tex
1879 Set @var{rop} to $\sqrt{@var{op}}$.
1880 @end tex
1881 @end iftex
1882 @end deftypefun
1883
1884 @c @deftypefun void mpf_pow_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1885 @c Set @var{rop} to @var{op1} raised to @var{op2}.
1886 @c @end deftypefun
1887
1888 @deftypefun void mpf_neg (mpf_t @var{rop}, mpf_t @var{op})
1889 Set @var{rop} to @minus{}@var{op}.
1890 @end deftypefun
1891
1892 @deftypefun void mpf_abs (mpf_t @var{rop}, mpf_t @var{op})
1893 Set @var{rop} to the absolute value of @var{op}.
1894 @end deftypefun
1895
1896 @deftypefun void mpf_mul_2exp (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1897 @ifinfo
1898 Set @var{rop} to @var{op1} times 2 raised to @var{op2}.
1899 @end ifinfo
1900 @iftex
1901 @tex
1902 Set @var{rop} to $@var{op1} \times 2^{op2}$.
1903 @end tex
1904 @end iftex
1905 @end deftypefun
1906
1907 @deftypefun void mpf_div_2exp (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
1908 @ifinfo
1909 Set @var{rop} to @var{op1} divided by 2 raised to @var{op2}.
1910 @end ifinfo
1911 @iftex
1912 @tex
1913 Set @var{rop} to $@var{op1}/2^{op2}$.
1914 @end tex
1915 @end iftex
1916 @end deftypefun
1917
1918 @node Float Comparison, I/O of Floats, Float Arithmetic, Floating-point Functions
1919 @comment  node-name,  next,  previous,  up
1920 @section Comparison Functions
1921 @cindex Float comparisons functions
1922 @cindex Comparison functions
1923
1924 @deftypefun int mpf_cmp (mpf_t @var{op1}, mpf_t @var{op2})
1925 @deftypefunx int mpf_cmp_ui (mpf_t @var{op1}, unsigned long int @var{op2})
1926 @deftypefunx int mpf_cmp_si (mpf_t @var{op1}, signed long int @var{op2})
1927 @ifinfo
1928 Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
1929 @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
1930 @var{op2}.
1931 @end ifinfo
1932 @iftex
1933 @tex
1934 Compare @var{op1} and @var{op2}.  Return a positive value if $@var{op1} >
1935 @var{op2}$, zero if $@var{op1} = @var{op2}$, and a negative value if $@var{op1}
1936 < @var{op2}$.
1937 @end tex
1938 @end iftex
1939 @end deftypefun
1940
1941 @deftypefun int mpf_eq (mpf_t @var{op1}, mpf_t @var{op2}, unsigned long int op3)
1942 Return non-zero if the first @var{op3} bits of @var{op1} and @var{op2} are
1943 equal, zero otherwise.  I.e., test of @var{op1} and @var{op2} are
1944 approximately equal.
1945 @end deftypefun
1946
1947 @deftypefun void mpf_reldiff (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
1948 Compute the relative difference between @var{op1} and @var{op2} and store the
1949 result in @var{rop}.
1950 @end deftypefun
1951
1952 @deftypefn Macro int mpf_sgn (mpf_t @var{op})
1953 @ifinfo
1954 Return +1 if @var{op} > 0, 0 if @var{op} = 0, and @minus{}1 if @var{op} < 0.
1955 @end ifinfo
1956 @iftex
1957 @tex
1958 Return $+1$ if $@var{op} > 0$, 0 if $@var{op} = 0$, and $-1$ if $@var{op} < 0$.
1959 @end tex
1960 @end iftex
1961
1962 This function is actually implemented as a macro.  It evaluates its
1963 arguments multiple times.
1964 @end deftypefn
1965
1966 @node I/O of Floats, Miscellaneous Float Functions, Float Comparison, Floating-point Functions
1967 @comment  node-name,  next,  previous,  up
1968 @section Input and Output Functions
1969 @cindex Float input and output functions
1970 @cindex Input functions
1971 @cindex Output functions
1972 @cindex I/O functions
1973
1974 Functions that perform input from a stdio stream, and functions that output to
1975 a stdio stream.  Passing a NULL pointer for a @var{stream} argument to any of
1976 these functions will make them read from @code{stdin} and write to
1977 @code{stdout}, respectively.
1978
1979 When using any of these functions, it is a good idea to include @file{stdio.h}
1980 before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes
1981 for these functions.
1982
1983 @deftypefun size_t mpf_out_str (FILE *@var{stream}, int @var{base}, size_t @var{n_digits}, mpf_t @var{op})
1984 Output @var{op} on stdio stream @var{stream}, as a string of digits in
1985 base @var{base}.  The base may vary from 2 to 36.  Print at most
1986 @var{n_digits} significant digits, or if @var{n_digits} is 0, the maximum
1987 number of digits accurately representable by @var{op}.
1988
1989 In addition to the significant digits, a leading @samp{0.} and a
1990 trailing exponent, in the form @samp{eNNN}, are printed.  If @var{base}
1991 is greater than 10, @samp{@@} will be used instead of @samp{e} as
1992 exponent delimiter.
1993
1994 Return the number of bytes written, or if an error occurred, return 0.
1995 @end deftypefun
1996
1997 @deftypefun size_t mpf_inp_str (mpf_t @var{rop}, FILE *@var{stream}, int @var{base})
1998 Input a string in base @var{base} from stdio stream @var{stream}, and put the
1999 read float in @var{rop}.  The string is of the form @samp{M@@N} or, if the
2000 base is 10 or less, alternatively @samp{MeN}.  @samp{M} is the mantissa and
2001 @samp{N} is the exponent.  The mantissa is always in the specified base.  The
2002 exponent is either in the specified base or, if @var{base} is negative, in
2003 decimal.
2004
2005 The argument @var{base} may be in the ranges 2 to 36, or @minus{}36 to
2006 @minus{}2.  Negative values are used to specify that the exponent is in
2007 decimal.
2008
2009 Unlike the corresponding @code{mpz} function, the base will not be determined
2010 from the leading characters of the string if @var{base} is 0.  This is so that
2011 numbers like @samp{0.23} are not interpreted as octal.
2012
2013 Return the number of bytes read, or if an error occurred, return 0.
2014 @end deftypefun
2015
2016 @c @deftypefun void mpf_out_raw (FILE *@var{stream}, mpf_t @var{float})
2017 @c Output @var{float} on stdio stream @var{stream}, in raw binary
2018 @c format.  The float is written in a portable format, with 4 bytes of
2019 @c size information, and that many bytes of limbs.  Both the size and the
2020 @c limbs are written in decreasing significance order.
2021 @c @end deftypefun
2022
2023 @c @deftypefun void mpf_inp_raw (mpf_t @var{float}, FILE *@var{stream})
2024 @c Input from stdio stream @var{stream} in the format written by
2025 @c @code{mpf_out_raw}, and put the result in @var{float}.
2026 @c @end deftypefun
2027
2028
2029 @node Miscellaneous Float Functions, , I/O of Floats, Floating-point Functions
2030 @comment  node-name,  next,  previous,  up
2031 @section Miscellaneous Functions
2032 @cindex Miscellaneous float functions
2033
2034 @deftypefun void mpf_random2 (mpf_t @var{rop}, mp_size_t @var{max_size}, mp_exp_t @var{max_exp})
2035 Generate a random float of at most @var{max_size} limbs, with long strings of
2036 zeros and ones in the binary representation.  The exponent of the number is in
2037 the interval @minus{}@var{exp} to @var{exp}.  This function is useful for
2038 testing functions and algorithms, since this kind of random numbers have
2039 proven to be more likely to trigger corner-case bugs.  Negative random numbers
2040 are generated when @var{max_size} is negative.
2041 @end deftypefun
2042
2043 @c @deftypefun size_t mpf_size (mpf_t @var{op})
2044 @c Return the size of @var{op} measured in number of limbs.  If @var{op} is
2045 @c zero, the returned value will be zero.  (@xref{Nomenclature}, for an
2046 @c explanation of the concept @dfn{limb}.)
2047 @c
2048 @c @strong{This function is obsolete.  It will disappear from future MP
2049 @c releases.}
2050 @c @end deftypefun
2051
2052 @node Low-level Functions, BSD Compatible Functions, Floating-point Functions, Top
2053 @comment  node-name,  next,  previous,  up
2054 @chapter Low-level Functions
2055 @cindex Low-level functions
2056
2057 This chapter describes low-level MP functions, used to implement the high-level
2058 MP functions, but also intended for time-critical user code.
2059
2060 These functions start with the prefix @code{mpn_}.
2061
2062 @c 1. Some of these function clobber input operands.
2063 @c
2064
2065 The @code{mpn} functions are designed to be as fast as possible, @strong{not}
2066 to provide a coherent calling interface.  The different functions have somewhat
2067 similar interfaces, but there are variations that make them hard to use.  These
2068 functions do as little as possible apart from the real multiple precision
2069 computation, so that no time is spent on things that not all callers need.
2070
2071 A source operand is specified by a pointer to the least significant limb and a
2072 limb count.  A destination operand is specified by just a pointer.  It is the
2073 responsibility of the caller to ensure that the destination has enough space
2074 for storing the result.
2075
2076 With this way of specifying operands, it is possible to perform computations
2077 on subranges of an argument, and store the result into a subrange of a
2078 destination.
2079
2080 A common requirement for all functions is that each source area needs at least
2081 one limb.  No size argument may be zero.
2082
2083 The @code{mpn} functions is the base for the implementation of the @code{mpz_},
2084 @code{mpf_}, and @code{mpq_} functions.
2085
2086 This example adds the number beginning at @var{src1_ptr} and the number
2087 beginning at @var{src2_ptr} and writes the sum at @var{dest_ptr}.  All areas
2088 have @var{size} limbs.
2089
2090 @example
2091 cy = mpn_add_n (dest_ptr, src1_ptr, src2_ptr, size)
2092 @end example
2093
2094 @noindent
2095 In the notation used here, a source operand is identified by the pointer to
2096 the least significant limb, and the limb count in braces.  For example,
2097 @{s1_ptr, s1_size@}.
2098
2099 @deftypefun mp_limb_t mpn_add_n (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{size})
2100 Add @{@var{src1_ptr}, @var{size}@} and @{@var{src2_ptr}, @var{size}@}, and
2101 write the @var{size} least significant limbs of the result to @var{dest_ptr}.
2102 Return carry, either 0 or 1.
2103
2104 This is the lowest-level function for addition.  It is the preferred function
2105 for addition, since it is written in assembly for most targets.  For addition
2106 of a variable to itself (i.e., @var{src1_ptr} equals @var{src2_ptr}, use
2107 @code{mpn_lshift} with a count of 1 for optimal speed.
2108 @end deftypefun
2109
2110 @deftypefun mp_limb_t mpn_add_1 (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{size}, mp_limb_t @var{src2_limb})
2111 Add @{@var{src1_ptr}, @var{size}@} and @var{src2_limb}, and write the
2112 @var{size} least significant limbs of the result to @var{dest_ptr}.  Return
2113 carry, either 0 or 1.
2114 @end deftypefun
2115
2116 @deftypefun mp_limb_t mpn_add (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{src1_size}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{src2_size})
2117 Add @{@var{src1_ptr}, @var{src1_size}@} and @{@var{src2_ptr},
2118 @var{src2_size}@}, and write the @var{src1_size} least significant limbs of
2119 the result to @var{dest_ptr}.  Return carry, either 0 or 1.
2120
2121 This function requires that @var{src1_size} is greater than or equal to
2122 @var{src2_size}.
2123 @end deftypefun
2124
2125 @deftypefun mp_limb_t mpn_sub_n (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{size})
2126 Subtract @{@var{src2_ptr}, @var{src2_size}@} from @{@var{src1_ptr},
2127 @var{size}@}, and write the @var{size} least significant limbs of the result
2128 to @var{dest_ptr}.  Return borrow, either 0 or 1.
2129
2130 This is the lowest-level function for subtraction.  It is the preferred
2131 function for subtraction, since it is written in assembly for most targets.
2132 @end deftypefun
2133
2134 @deftypefun mp_limb_t mpn_sub_1 (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{size}, mp_limb_t @var{src2_limb})
2135 Subtract @var{src2_limb} from @{@var{src1_ptr}, @var{size}@}, and write the
2136 @var{size} least significant limbs of the result to @var{dest_ptr}.  Return
2137 borrow, either 0 or 1.
2138 @end deftypefun
2139
2140 @deftypefun mp_limb_t mpn_sub (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{src1_size}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{src2_size})
2141 Subtract @{@var{src2_ptr}, @var{src2_size}@} from @{@var{src1_ptr},
2142 @var{src1_size}@}, and write the @var{src1_size} least significant limbs of
2143 the result to @var{dest_ptr}.  Return borrow, either 0 or 1.
2144
2145 This function requires that @var{src1_size} is greater than or equal to
2146 @var{src2_size}.
2147 @end deftypefun
2148
2149 @deftypefun void mpn_mul_n (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{size})
2150 Multiply @{@var{src1_ptr}, @var{size}@} and @{@var{src2_ptr}, @var{size}@},
2151 and write the @strong{entire} result to @var{dest_ptr}.
2152
2153 The destination has to have space for 2@var{size} limbs, even if the
2154 significant result might be one limb smaller.
2155 @end deftypefun
2156
2157 @deftypefun mp_limb_t mpn_mul_1 (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{size}, mp_limb_t @var{src2_limb})
2158 Multiply @{@var{src1_ptr}, @var{size}@} and @var{src2_limb}, and write the
2159 @var{size} least significant limbs of the product to @var{dest_ptr}.  Return
2160 the most significant limb of the product.
2161
2162 This is a low-level function that is a building block for general
2163 multiplication as well as other operations in MP.  It is written in assembly
2164 for most targets.
2165
2166 Don't call this function if @var{src2_limb} is a power of 2; use
2167 @code{mpn_lshift} with a count equal to the logarithm of @var{src2_limb}
2168 instead, for optimal speed.
2169 @end deftypefun
2170
2171 @deftypefun mp_limb_t mpn_addmul_1 (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{size}, mp_limb_t @var{src2_limb})
2172 Multiply @{@var{src1_ptr}, @var{size}@} and @var{src2_limb}, and add the
2173 @var{size} least significant limbs of the product to @{@var{dest_ptr},
2174 @var{size}@} and write the result to @var{dest_ptr} @var{dest_ptr}.  Return
2175 the most significant limb of the product, plus carry-out from the addition.
2176
2177 This is a low-level function that is a building block for general
2178 multiplication as well as other operations in MP.  It is written in assembly
2179 for most targets.
2180 @end deftypefun
2181
2182 @deftypefun mp_limb_t mpn_submul_1 (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{size}, mp_limb_t @var{src2_limb})
2183 Multiply @{@var{src1_ptr}, @var{size}@} and @var{src2_limb}, and subtract the
2184 @var{size} least significant limbs of the product from @{@var{dest_ptr},
2185 @var{size}@} and write the result to @var{dest_ptr}.  Return the most
2186 significant limb of the product, minus borrow-out from the subtraction.
2187
2188 This is a low-level function that is a building block for general
2189 multiplication and division as well as other operations in MP.  It is written
2190 in assembly for most targets.
2191 @end deftypefun
2192
2193 @deftypefun mp_limb_t mpn_mul (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src1_ptr}, mp_size_t @var{src1_size}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{src2_size})
2194 Multiply @{@var{src1_ptr}, @var{src1_size}@} and @{@var{src2_ptr},
2195 @var{src2_size}@}, and write the result to @var{dest_ptr}.  Return the most
2196 significant limb of the result.
2197
2198 The destination has to have space for @var{src1_size} + @var{src1_size}
2199 limbs, even if the result might be one limb smaller.
2200
2201 This function requires that @var{src1_size} is greater than or equal to
2202 @var{src2_size}.  The destination must be distinct from either input operands.
2203 @end deftypefun
2204
2205 @deftypefun mp_size_t mpn_divrem (mp_limb_t * @var{r1p}, mp_size_t @var{xsize}, mp_limb_t * @var{rs2p}, mp_size_t @var{rs2size}, const mp_limb_t * @var{s3p}, mp_size_t @var{s3size})
2206 Divide @{@var{rs2p}, @var{rs2size}@} by @{@var{s3p}, @var{s3size}@}, and
2207 write the quotient at @var{r1p}, with the exception of the most significant
2208 limb, which is returned.  The remainder replaces the dividend at @var{rs2p}.
2209
2210 In addition to an integer quotient, @var{xsize} fraction limbs are developed,
2211 and stored after the integral limbs.  For most usages, @var{xsize} will be
2212 zero.
2213
2214 It is required that @var{rs2size} is greater than or equal to @var{s3size}.
2215 It is required that the most significant bit of the divisor is set.
2216
2217 If the quotient is not needed, pass @var{rs2p} + @var{s3size} as @var{r1p}.
2218 Aside from that special case, no overlap between arguments is permitted.
2219
2220 Return the most significant limb of the quotient, either 0 or 1.
2221
2222 The area at @var{r1p} needs to be @var{rs2size} @minus{} @var{s3size} +
2223 @var{xsize} limbs large.
2224 @end deftypefun
2225
2226 @deftypefun mp_limb_t mpn_divrem_1 (mp_limb_t * @var{r1p}, mp_size_t @var{xsize}, mp_limb_t * @var{s2p}, mp_size_t @var{s2size}, mp_limb_t @var{s3limb})
2227 Divide @{@var{s2p}, @var{s2size}@} by @var{s3limb}, and write the quotient
2228 at @var{r1p}.  Return the remainder.
2229
2230 In addition to an integer quotient, @var{xsize} fraction limbs are developed,
2231 and stored after the integral limbs.  For most usages, @var{xsize} will be
2232 zero.
2233
2234 The areas at @var{r1p} and @var{s2p} have to be identical or completely
2235 separate, not partially overlapping.
2236 @end deftypefun
2237
2238 @deftypefun mp_size_t mpn_divmod (mp_limb_t * @var{r1p}, mp_limb_t * @var{rs2p}, mp_size_t @var{rs2size}, const mp_limb_t * @var{s3p}, mp_size_t @var{s3size})
2239 @strong{This interface is obsolete.  It will disappear from future releases.
2240 Use @code{mpn_divrem} in its stead.}
2241 @end deftypefun
2242
2243 @deftypefun mp_limb_t mpn_divmod_1 (mp_limb_t * @var{r1p}, mp_limb_t * @var{s2p}, mp_size_t @var{s2size}, mp_limb_t @var{s3limb})
2244 @strong{This interface is obsolete.  It will disappear from future releases.
2245 Use @code{mpn_divrem_1} in its stead.}
2246 @end deftypefun
2247
2248 @deftypefun mp_limb_t mpn_mod_1 (mp_limb_t * @var{s1p}, mp_size_t @var{s1size}, mp_limb_t @var{s2limb})
2249 Divide @{@var{s1p}, @var{s1size}@} by @var{s2limb}, and return the remainder.
2250 @end deftypefun
2251
2252 @deftypefun mp_limb_t mpn_preinv_mod_1 (mp_limb_t * @var{s1p}, mp_size_t @var{s1size}, mp_limb_t @var{s2limb}, mp_limb_t @var{s3limb})
2253 @strong{This interface is obsolete.  It will disappear from future releases.
2254 Use @code{mpn_mod_1} in its stead.}
2255 @end deftypefun
2256
2257 @deftypefun mp_limb_t mpn_bdivmod (mp_limb_t * @var{dest_ptr}, mp_limb_t * @var{s1p}, mp_size_t @var{s1size}, const mp_limb_t * @var{s2p}, mp_size_t @var{s2size}, unsigned long int @var{d})
2258 The function puts the low [@var{d}/@var{BITS_PER_MP_LIMB}] limbs of
2259 @var{q} =
2260 @{@var{s1p}, @var{s1size}@}/@{@var{s2p}, @var{s2size}@}
2261 mod 2^@var{d}
2262 at @var{dest_ptr},
2263 and returns the high @var{d} mod @var{BITS_PER_MP_LIMB} bits of @var{q}.
2264
2265 @{@var{s1p}, @var{s1size}@} - @var{q} * @{@var{s2p}, @var{s2size}@}
2266 mod 2^(@var{s1size}*@var{BITS_PER_MP_LIMB})
2267 is placed at @var{s1p}.
2268 Since the low [@var{d}/@var{BITS_PER_MP_LIMB}] limbs of
2269 this difference are zero, it is possible to overwrite the low limbs at
2270 @var{s1p} with this difference,
2271 provided @var{dest_ptr} <= @var{s1p}.
2272
2273 This function requires that @var{s1size} * @var{BITS_PER_MP_LIMB} >= @var{D},
2274 and that @{@var{s2p}, @var{s2size}@} is odd.
2275
2276 @strong{This interface is preliminary.  It might change incompatibly in
2277 future revisions.}
2278 @end deftypefun
2279
2280 @deftypefun mp_limb_t mpn_lshift (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src_ptr}, mp_size_t @var{src_size}, unsigned long int @var{count})
2281 Shift @{@var{src_ptr}, @var{src_size}@} @var{count} bits to the left, and
2282 write the @var{src_size} least significant limbs of the result to
2283 @var{dest_ptr}.  @var{count} might be in the range 1 to n @minus{} 1, on an
2284 n-bit machine. The bits shifted out to the left are returned.
2285
2286 Overlapping of the destination space and the source space is allowed in this
2287 function, provided @var{dest_ptr} >= @var{src_ptr}.
2288
2289 This function is written in assembly for most targets.
2290 @end deftypefun
2291
2292 @deftypefun mp_limp_t mpn_rshift (mp_limb_t * @var{dest_ptr}, const mp_limb_t * @var{src_ptr}, mp_size_t @var{src_size}, unsigned long int @var{count})
2293 Shift @{@var{src_ptr}, @var{src_size}@} @var{count} bits to the right, and
2294 write the @var{src_size} most significant limbs of the result to
2295 @var{dest_ptr}.  @var{count} might be in the range 1 to n @minus{} 1, on an
2296 n-bit machine.  The bits shifted out to the right are returned.
2297
2298 Overlapping of the destination space and the source space is allowed in this
2299 function, provided @var{dest_ptr} <= @var{src_ptr}.
2300
2301 This function is written in assembly for most targets.
2302 @end deftypefun
2303
2304 @deftypefun int mpn_cmp (const mp_limb_t * @var{src1_ptr}, const mp_limb_t * @var{src2_ptr}, mp_size_t @var{size})
2305 Compare @{@var{src1_ptr}, @var{size}@} and @{@var{src2_ptr}, @var{size}@} and
2306 return a positive value if src1 > src2, 0 of they are equal, and a negative
2307 value if src1 < src2.
2308 @end deftypefun
2309
2310 @deftypefun mp_size_t mpn_gcd (mp_limb_t * @var{dest_ptr}, mp_limb_t * @var{src1_ptr}, mp_size_t @var{src1_size}, mp_limb_t * @var{src2_ptr}, mp_size_t @var{src2_size})
2311 Puts at @var{dest_ptr} the greatest common divisor of @{@var{src1_ptr},
2312 @var{src1_size}@} and @{@var{src2_ptr}, @var{src2_size}@}; both source
2313 operands are destroyed by the operation.  The size in limbs of the greatest
2314 common divisor is returned.
2315
2316 @{@var{src1_ptr}, @var{src1_size}@} must be odd, and @{@var{src2_ptr},
2317 @var{src2_size}@} must have at least as many bits as @{@var{src1_ptr},
2318 @var{src1_size}@}.
2319
2320 @strong{This interface is preliminary.  It might change incompatibly in
2321 future revisions.}
2322 @end deftypefun
2323
2324 @deftypefun mp_limb_t mpn_gcd_1 (const mp_limb_t * @var{src1_ptr}, mp_size_t @var{src1_size}, mp_limb_t @var{src2_limb})
2325 Return the greatest common divisor of @{@var{src1_ptr}, @var{src1_size}@}
2326 and @var{src2_limb}, where @var{src2_limb} (as well as @var{src1_size})
2327 must be different from 0.
2328 @end deftypefun
2329
2330 @deftypefun mp_size_t mpn_gcdext (mp_limb_t * @var{r1p}, mp_limb_t * @var{r2p}, mp_limb_t * @var{s1p}, mp_size_t @var{s1size}, mp_limb_t * @var{s2p}, mp_size_t @var{s2size})
2331 Puts at @var{r1p} the greatest common divisor of @{@var{s1p}, @var{s1size}@}
2332 and @{@var{s2p}, @var{s2size}@}.  The first cofactor is written at
2333 @var{r2p}.  Both source operands are destroyed by the operation.  The size
2334 in limbs of the greatest common divisor is returned.
2335
2336 @strong{This interface is preliminary.  It might change incompatibly in
2337 future revisions.}
2338 @end deftypefun
2339
2340 @deftypefun mp_size_t mpn_sqrtrem (mp_limb_t * @var{r1p}, mp_limb_t * @var{r2p}, const mp_limb_t * @var{sp}, mp_size_t @var{size})
2341 Compute the square root of @{@var{sp}, @var{size}@} and put the result at
2342 @var{r1p}.  Write the remainder at @var{r2p}, unless @var{r2p} is NULL.
2343
2344 Return the size of the remainder, whether @var{r2p} was NULL or non-NULL.
2345 Iff the operand was a perfect square, the return value will be 0.
2346
2347 The areas at @var{r1p} and @var{sp} have to be distinct.  The areas at
2348 @var{r2p} and @var{sp} have to be identical or completely separate, not
2349 partially overlapping.
2350
2351 @ifinfo
2352 The area at @var{r1p} needs to have space for ceil(@var{size}/2) limbs.
2353 @end ifinfo
2354 @iftex
2355 @tex
2356 The area at @var{r1p} needs to have space for $\lceil@var{size}/2\rceil$ limbs.
2357 @end tex
2358 @end iftex
2359 The area at @var{r2p} needs to be @var{size} limbs large.
2360
2361 @strong{This interface is preliminary.  It might change incompatibly in
2362 future revisions.}
2363 @end deftypefun
2364
2365 @deftypefun mp_size_t mpn_get_str (unsigned char *@var{str}, int @var{base}, mp_limb_t * @var{s1p}, mp_size_t @var{s1size})
2366 Convert @{@var{s1p}, @var{s1size}@} to a raw unsigned char array in base
2367 @var{base}.  The string is not in ASCII; to convert it to printable format,
2368 add the ASCII codes for @samp{0} or @samp{A}, depending on the base and
2369 range.  There may be leading zeros in the string.
2370
2371 The area at @var{s1p} is clobbered.
2372
2373 Return the number of characters in @var{str}.
2374
2375 The area at @var{str} has to have space for the largest possible number
2376 represented by a @var{s1size} long limb array, plus one extra character.
2377 @end deftypefun
2378
2379 @deftypefun mp_size_t mpn_set_str (mp_limb_t * @var{r1p}, const char *@var{str}, size_t {strsize}, int @var{base})
2380 Convert the raw unsigned char array at @var{str} of length @var{strsize} to
2381 a limb array @{@var{s1p}, @var{s1size}@}.  The base of @var{str} is
2382 @var{base}.
2383
2384 Return the number of limbs stored in @var{r1p}.
2385 @end deftypefun
2386
2387 @deftypefun {unsigned long int} mpn_scan0 (const mp_limb_t * @var{s1p}, unsigned long int @var{bit})
2388 Scan @var{s1p} from bit position @var{bit} for the next clear bit.
2389
2390 It is required that there be a clear bit within the area at @var{s1p} at or
2391 beyond bit position @var{bit}, so that the function has something to return.
2392
2393 @strong{This interface is preliminary.  It might change incompatibly in
2394 future revisions.}
2395 @end deftypefun
2396
2397 @deftypefun {unsigned long int} mpn_scan1 (const mp_limb_t * @var{s1p}, unsigned long int @var{bit})
2398 Scan @var{s1p} from bit position @var{bit} for the next set bit.
2399
2400 It is required that there be a set bit within the area at @var{s1p} at or
2401 beyond bit position @var{bit}, so that the function has something to return.
2402
2403 @strong{This interface is preliminary.  It might change incompatibly in
2404 future revisions.}
2405 @end deftypefun
2406
2407 @deftypefun void mpn_random2 (mp_limb_t * @var{r1p}, mp_size_t @var{r1size})
2408 Generate a random number of length @var{r1size} with long strings of zeros
2409 and ones in the binary representation, and store it at @var{r1p}.
2410
2411 The generated random numbers are intended for testing the correctness of the
2412 implementation of the @code{mpn} routines.
2413 @end deftypefun
2414
2415 @deftypefun {unsigned long int} mpn_popcount (const mp_limb_t * @var{s1p}, unsigned long int @var{size})
2416 Count the number of set bits in @{@var{s1p}, @var{size}@}.
2417 @end deftypefun
2418
2419 @deftypefun {unsigned long int} mpn_hamdist (const mp_limb_t * @var{s1p}, const mp_limb_t * @var{s2p}, unsigned long int @var{size})
2420 Compute the hamming distance between @{@var{s1p}, @var{size}@} and
2421 @{@var{s2p}, @var{size}@}.
2422 @end deftypefun
2423
2424 @deftypefun int mpn_perfect_square_p (const mp_limb_t * @var{s1p}, mp_size_t @var{size})
2425 Return non-zero iff @{@var{s1p}, @var{size}@} is a perfect square.
2426 @end deftypefun
2427
2428
2429 @node BSD Compatible Functions, Custom Allocation, Low-level Functions, Top
2430 @comment  node-name,  next,  previous,  up
2431 @chapter Berkeley MP Compatible Functions
2432 @cindex BSD MP compatible functions
2433
2434 These functions are intended to be fully compatible with the Berkeley MP
2435 library which is available on many BSD derived U*ix systems.
2436
2437 The original Berkeley MP library has a usage restriction: you cannot use the
2438 same variable as both source and destination in a single function call.  The
2439 compatible functions in GNU MP do not share this restriction---inputs and
2440 outputs may overlap.
2441
2442 It is not recommended that new programs are written using these functions.
2443 Apart from the incomplete set of functions, the interface for initializing
2444 @code{MINT} objects is more error prone, and the @code{pow} function collides
2445 with @code{pow} in @file{libm.a}.
2446
2447 @cindex @file{mp.h}
2448 Include the header @file{mp.h} to get the definition of the necessary types
2449 and functions.  If you are on a BSD derived system, make sure to include GNU
2450 @file{mp.h} if you are going to link the GNU @file{libmp.a} to you program.
2451 This means that you probably need to give the -I<dir> option to the compiler,
2452 where <dir> is the directory where you have GNU @file{mp.h}.
2453
2454 @deftypefun {MINT *} itom (signed short int @var{initial_value})
2455 Allocate an integer consisting of a @code{MINT} object and dynamic limb space.
2456 Initialize the integer to @var{initial_value}.  Return a pointer to the
2457 @code{MINT} object.
2458 @end deftypefun
2459
2460 @deftypefun {MINT *} xtom (char *@var{initial_value})
2461 Allocate an integer consisting of a @code{MINT} object and dynamic limb space.
2462 Initialize the integer from @var{initial_value}, a hexadecimal, '\0'-terminate
2463 C string.  Return a pointer to the @code{MINT} object.
2464 @end deftypefun
2465
2466 @deftypefun void move (MINT *@var{src}, MINT *@var{dest})
2467 Set @var{dest} to @var{src} by copying.  Both variables must be previously
2468 initialized.
2469 @end deftypefun
2470
2471 @deftypefun void madd (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
2472 Add @var{src_1} and @var{src_2} and put the sum in @var{destination}.
2473 @end deftypefun
2474
2475 @deftypefun void msub (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
2476 Subtract @var{src_2} from @var{src_1} and put the difference in
2477 @var{destination}.
2478 @end deftypefun
2479
2480 @deftypefun void mult (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
2481 Multiply @var{src_1} and @var{src_2} and put the product in
2482 @var{destination}.
2483 @end deftypefun
2484
2485 @deftypefun void mdiv (MINT *@var{dividend}, MINT *@var{divisor}, MINT *@var{quotient}, MINT *@var{remainder})
2486 @deftypefunx void sdiv (MINT *@var{dividend}, signed short int @var{divisor}, MINT *@var{quotient}, signed short int *@var{remainder})
2487 Set @var{quotient} to @var{dividend}/@var{divisor}, and @var{remainder} to
2488 @var{dividend} mod @var{divisor}.  The quotient is rounded towards zero; the
2489 remainder has the same sign as the dividend unless it is zero.
2490
2491 Some implementations of these functions work differently---or not at all---for
2492 negative arguments.
2493 @end deftypefun
2494
2495 @deftypefun void msqrt (MINT *@var{operand}, MINT *@var{root}, MINT *@var{remainder})
2496 @ifinfo
2497 Set @var{root} to the truncated integer part of the square root of
2498 @var{operand}.  Set @var{remainder} to
2499 @var{operand}@minus{}@var{root}*@var{root},
2500 @end ifinfo
2501 @iftex
2502 @tex
2503 Set @var{root} to $\lfloor\sqrt{@var{operand}}\rfloor$, like
2504 @code{mpz_sqrt}.  Set @var{remainder} to $(operand - root^2)$,
2505 @end tex
2506 @end iftex
2507 (i.e., zero if @var{operand} is a perfect square).
2508
2509 If @var{root} and @var{remainder} are the same variable, the results are
2510 undefined.
2511 @end deftypefun
2512
2513 @deftypefun void pow (MINT *@var{base}, MINT *@var{exp}, MINT *@var{mod}, MINT *@var{dest})
2514 Set @var{dest} to (@var{base} raised to @var{exp}) modulo @var{mod}.
2515 @end deftypefun
2516
2517 @deftypefun void rpow (MINT *@var{base}, signed short int @var{exp}, MINT *@var{dest})
2518 Set @var{dest} to @var{base} raised to @var{exp}.
2519 @end deftypefun
2520
2521 @deftypefun void gcd (MINT *@var{operand1}, MINT *@var{operand2}, MINT *@var{res})
2522 Set @var{res} to the greatest common divisor of @var{operand1} and
2523 @var{operand2}.
2524 @end deftypefun
2525
2526 @deftypefun int mcmp (MINT *@var{operand1}, MINT *@var{operand2})
2527 Compare @var{operand1} and @var{operand2}.  Return a positive value if
2528 @var{operand1} > @var{operand2}, zero if @var{operand1} =
2529 @var{operand2}, and a negative value if @var{operand1} < @var{operand2}.
2530 @end deftypefun
2531
2532 @deftypefun void min (MINT *@var{dest})
2533 Input a decimal string from @code{stdin}, and put the read integer in
2534 @var{dest}.  SPC and TAB are allowed in the number string, and are ignored.
2535 @end deftypefun
2536
2537 @deftypefun void mout (MINT *@var{src})
2538 Output @var{src} to @code{stdout}, as a decimal string.  Also output a newline.
2539 @end deftypefun
2540
2541 @deftypefun {char *} mtox (MINT *@var{operand})
2542 Convert @var{operand} to a hexadecimal string, and return a pointer to the
2543 string.  The returned string is allocated using the default memory allocation
2544 function, @code{malloc} by default.
2545 @end deftypefun
2546
2547 @deftypefun void mfree (MINT *@var{operand})
2548 De-allocate, the space used by @var{operand}.  @strong{This function should
2549 only be passed a value returned by @code{itom} or @code{xtom}.}
2550 @end deftypefun
2551
2552 @node Custom Allocation, Contributors, BSD Compatible Functions, Top
2553 @comment  node-name,  next,  previous,  up
2554 @chapter Custom Allocation
2555
2556 By default, the MP functions use @code{malloc}, @code{realloc}, and
2557 @code{free} for memory allocation.  If @code{malloc} or @code{realloc} fails,
2558 the MP library terminates execution after printing a fatal error message to
2559 standard error.
2560
2561 For some applications, you may wish to allocate memory in other ways, or you
2562 may not want to have a fatal error when there is no more memory available.  To
2563 accomplish this, you can specify alternative memory allocation functions.
2564
2565 @deftypefun void mp_set_memory_functions (@* void *(*@var{alloc_func_ptr}) (size_t), @* void *(*@var{realloc_func_ptr}) (void *, size_t, size_t), @* void (*@var{free_func_ptr}) (void *, size_t))
2566 Replace the current allocation functions from the arguments.  If an argument
2567 is NULL, the corresponding default function is retained.
2568
2569 @strong{Make sure to call this function in such a way that there are no active
2570 MP objects that were allocated using the previously active allocation
2571 function!  Usually, that means that you have to call this function before any
2572 other MP function.}
2573 @end deftypefun
2574
2575 The functions you supply should fit the following declarations:
2576
2577 @deftypefun {void *} allocate_function (size_t @var{alloc_size})
2578 This function should return a pointer to newly allocated space with at least
2579 @var{alloc_size} storage units.
2580 @end deftypefun
2581
2582 @deftypefun {void *} reallocate_function (void *@var{ptr}, size_t @var{old_size}, size_t @var{new_size})
2583 This function should return a pointer to newly allocated space of at least
2584 @var{new_size} storage units, after copying at least the first @var{old_size}
2585 storage units from @var{ptr}.  It should also de-allocate the space at
2586 @var{ptr}.
2587
2588 You can assume that the space at @var{ptr} was formerly returned from
2589 @code{allocate_function} or @code{reallocate_function}, for a request for
2590 @var{old_size} storage units.
2591 @end deftypefun
2592
2593 @deftypefun void deallocate_function (void *@var{ptr}, size_t @var{size})
2594 De-allocate the space pointed to by @var{ptr}.
2595
2596 You can assume that the space at @var{ptr} was formerly returned from
2597 @code{allocate_function} or @code{reallocate_function}, for a request for
2598 @var{size} storage units.
2599 @end deftypefun
2600
2601 (A @dfn{storage unit} is the unit in which the @code{sizeof} operator returns
2602 the size of an object, normally an 8 bit byte.)
2603
2604
2605 @node Contributors, References, Custom Allocation, Top
2606 @comment  node-name,  next,  previous,  up
2607 @unnumbered Contributors
2608
2609 I would like to thank Gunnar Sjoedin and Hans Riesel for their help with
2610 mathematical problems, Richard Stallman for his help with design issues and
2611 for revising the first version of this manual, Brian Beuning and Doug Lea for
2612 their testing of early versions of the library.
2613
2614 John Amanatides of York University in Canada contributed the function
2615 @code{mpz_probab_prime_p}.
2616
2617 Paul Zimmermann of Inria sparked the development of GMP 2, with his
2618 comparisons between bignum packages.
2619
2620 Ken Weber (Kent State University, Universidade Federal do Rio Grande do Sul)
2621 contributed @code{mpz_gcd}, @code{mpz_divexact}, @code{mpn_gcd}, and
2622 @code{mpn_bdivmod}, partially supported by CNPq (Brazil) grant 301314194-2.
2623
2624 Per Bothner of Cygnus Support helped to set up MP to use Cygnus' configure.
2625 He has also made valuable suggestions and tested numerous intermediary
2626 releases.
2627
2628 Joachim Hollman was involved in the design of the @code{mpf} interface, and in
2629 the @code{mpz} design revisions for version 2.
2630
2631 Bennet Yee contributed the functions @code{mpz_jacobi} and
2632 @code{mpz_legendre}.
2633
2634 Andreas Schwab contributed the files @file{mpn/m68k/lshift.S} and
2635 @file{mpn/m68k/rshift.S}.
2636
2637 The development of floating point functions of GNU MP 2, were supported in
2638 part by the ESPRIT-BRA (Basic Research Activities) 6846 project POSSO
2639 (POlynomial System SOlving).
2640
2641 GNU MP 2 was finished and released by TMG Datakonsult, Sodermannagatan 5, 116
2642 23 STOCKHOLM, SWEDEN, in cooperation with the IDA Center for Computing
2643 Sciences, USA.
2644
2645
2646 @node References, , Contributors, Top
2647 @comment  node-name,  next,  previous,  up
2648 @unnumbered References
2649
2650 @itemize @bullet
2651
2652 @item
2653 Donald E. Knuth, "The Art of Computer Programming", vol 2,
2654 "Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981.
2655
2656 @item
2657 John D. Lipson, "Elements of Algebra and Algebraic Computing",
2658 The Benjamin Cummings Publishing Company Inc, 1981.
2659
2660 @item
2661 Richard M. Stallman, "Using and Porting GCC", Free Software Foundation,
2662 1995.
2663
2664 @item
2665 Peter L. Montgomery, "Modular Multiplication Without Trial Division", in
2666 Mathematics of Computation, volume 44, number 170, April 1985.
2667
2668 @item
2669 Torbjorn Granlund and Peter L. Montgomery, "Division by Invariant
2670 Integers using Multiplication", in Proceedings of the SIGPLAN
2671 PLDI'94 Conference, June 1994.
2672
2673 @item
2674 Tudor Jebelean,
2675 "An algorithm for exact division",
2676 Journal of Symbolic Computation,
2677 v. 15, 1993, pp. 169-180.
2678
2679 @item
2680 Kenneth Weber, "The accelerated integer GCD algorithm",
2681 ACM Transactions on Mathematical Software,
2682 v. 21 (March), 1995, pp. 111-122.
2683 @end itemize
2684
2685 @node Concept Index, , , Top
2686 @comment  node-name,  next,  previous,  up
2687 @unnumbered Concept Index
2688 @printindex cp
2689
2690 @node Function Index, , , Top
2691 @comment  node-name,  next,  previous,  up
2692 @unnumbered Function and Type Index
2693 @printindex fn
2694
2695
2696 @contents
2697 @bye