Fix multiline string literals
[dragonfly.git] / contrib / libgmp / gmp.info-1
1 This is Info file gmp.info, produced by Makeinfo-1.64 from the input
2 file gmp.texi.
3
4 START-INFO-DIR-ENTRY
5 * gmp: (gmp.info).               GNU Multiple Precision Arithmetic Library.
6 END-INFO-DIR-ENTRY
7
8    This file documents GNU MP, a library for arbitrary-precision
9 arithmetic.
10
11    Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation,
12 Inc.
13
14    Permission is granted to make and distribute verbatim copies of this
15 manual provided the copyright notice and this permission notice are
16 preserved on all copies.
17
18    Permission is granted to copy and distribute modified versions of
19 this manual under the conditions for verbatim copying, provided that
20 the entire resulting derived work is distributed under the terms of a
21 permission notice identical to this one.
22
23    Permission is granted to copy and distribute translations of this
24 manual into another language, under the above conditions for modified
25 versions, except that this permission notice may be stated in a
26 translation approved by the Foundation.
27
28 \1f
29 File: gmp.info,  Node: Top,  Next: Copying,  Prev: (dir),  Up: (dir)
30
31 GNU MP
32 ******
33
34    This manual documents how to install and use the GNU multiple
35 precision arithmetic library, version 2.0.2.
36
37 * Menu:
38
39 * Copying::                   GMP Copying Conditions (LGPL).
40 * Introduction to MP::        Brief introduction to GNU MP.
41 * Installing MP::             How to configure and compile the MP library.
42 * MP Basics::                 What every MP user should now.
43 * Reporting Bugs::            How to usefully report bugs.
44 * Integer Functions::         Functions for arithmetic on signed integers.
45 * Rational Number Functions:: Functions for arithmetic on rational numbers.
46 * Floating-point Functions::  Functions for arithmetic on floats.
47 * Low-level Functions::       Fast functions for natural numbers.
48 * BSD Compatible Functions::  All functions found in BSD MP.
49 * Custom Allocation::         How to customize the internal allocation.
50
51 * Contributors::
52 * References::
53 * Concept Index::
54 * Function Index::
55
56 \1f
57 File: gmp.info,  Node: Copying,  Next: Introduction to MP,  Prev: Top,  Up: Top
58
59 GNU MP Copying Conditions
60 *************************
61
62    This library is "free"; this means that everyone is free to use it
63 and free to redistribute it on a free basis.  The library is not in the
64 public domain; it is copyrighted and there are restrictions on its
65 distribution, but these restrictions are designed to permit everything
66 that a good cooperating citizen would want to do.  What is not allowed
67 is to try to prevent others from further sharing any version of this
68 library that they might get from you.
69
70    Specifically, we want to make sure that you have the right to give
71 away copies of the library, that you receive source code or else can
72 get it if you want it, that you can change this library or use pieces
73 of it in new free programs, and that you know you can do these things.
74
75    To make sure that everyone has such rights, we have to forbid you to
76 deprive anyone else of these rights.  For example, if you distribute
77 copies of the GNU MP library, you must give the recipients all the
78 rights that you have.  You must make sure that they, too, receive or
79 can get the source code.  And you must tell them their rights.
80
81    Also, for our own protection, we must make certain that everyone
82 finds out that there is no warranty for the GNU MP library.  If it is
83 modified by someone else and passed on, we want their recipients to
84 know that what they have is not what we distributed, so that any
85 problems introduced by others will not reflect on our reputation.
86
87    The precise conditions of the license for the GNU MP library are
88 found in the Library General Public License that accompany the source
89 code.
90
91 \1f
92 File: gmp.info,  Node: Introduction to MP,  Next: Installing MP,  Prev: Copying,  Up: Top
93
94 Introduction to GNU MP
95 **********************
96
97    GNU MP is a portable library written in C for arbitrary precision
98 arithmetic on integers, rational numbers, and floating-point numbers.
99 It aims to provide the fastest possible arithmetic for all applications
100 that need higher precision than is directly supported by the basic C
101 types.
102
103    Many applications use just a few hundred bits of precision; but some
104 applications may need thousands or even millions of bits.  MP is
105 designed to give good performance for both, by choosing algorithms
106 based on the sizes of the operands, and by carefully keeping the
107 overhead at a minimum.
108
109    The speed of MP is achieved by using fullwords as the basic
110 arithmetic type, by using sophisticated algorithms, by including
111 carefully optimized assembly code for the most common inner loops for
112 many different CPUs, and by a general emphasis on speed (as opposed to
113 simplicity or elegance).
114
115    There is carefully optimized assembly code for these CPUs: DEC
116 Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86,
117 Intel i960, Motorola MC68000, MC68020, MC88100, and MC88110,
118 Motorola/IBM PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000,
119 SPARCv7, SuperSPARC, generic SPARCv8, and DEC VAX.  Some optimizations
120 also for ARM, Clipper, IBM ROMP (RT), and Pyramid AP/XP.
121
122    This version of MP is released under a more liberal license than
123 previous versions.  It is now permitted to link MP to non-free
124 programs, as long as MP source code is provided when distributing the
125 non-free program.
126
127 How to use this Manual
128 ======================
129
130    Everyone should read *Note MP Basics::.  If you need to install the
131 library yourself, you need to read *Note Installing MP::, too.
132
133    The rest of the manual can be used for later reference, although it
134 is probably a good idea to glance through it.
135
136 \1f
137 File: gmp.info,  Node: Installing MP,  Next: MP Basics,  Prev: Introduction to MP,  Up: Top
138
139 Installing MP
140 *************
141
142    To build MP, you first have to configure it for your CPU and
143 operating system.  You need a C compiler, preferably GCC, but any
144 reasonable compiler should work.  And you need a standard Unix `make'
145 program, plus some other standard Unix utility programs.
146
147    (If you're on an MS-DOS machine, your can build MP using `make.bat'.
148 It requires that djgpp is installed.  It does not require
149 configuration, nor is `make' needed; `make.bat' both configures and
150 builds the library.)
151
152    Here are the steps needed to install the library on Unix systems:
153
154   1. In most cases, `./configure --target=cpu-vendor-os', should work
155      both for native and cross-compilation.  If you get error messages,
156      your machine might not be supported.
157
158      If you want to compile in a separate object directory, cd to that
159      directory, and prefix the configure command with the path to the
160      MP source directory.  Not all `make' programs have the necessary
161      features to support this.  In particular, SunOS and Slowaris
162      `make' have bugs that makes them unable to build from a separate
163      object directory.  Use GNU `make' instead.
164
165      In addition to the standard cpu-vendor-os tuples, MP recognizes
166      sparc8 and supersparc as valid CPU names.  Specifying these CPU
167      names for relevant systems will improve performance significantly.
168
169      In general, if you want a library that runs as fast as possible,
170      you should make sure you configure MP for the exact CPU type your
171      system uses.
172
173      If you have `gcc' in your `PATH', it will be used by default.  To
174      override this, pass `-with-gcc=no' to `configure'.
175
176   2. `make'
177
178      This will compile MP, and create a library archive file `libgmp.a'
179      in the working directory.
180
181   3. `make check'
182
183      This will make sure MP was built correctly.  If you get error
184      messages, please report this to `bug-gmp@prep.ai.mit.edu'.  (*Note
185      Reporting Bugs::, for information on what to include in useful bug
186      reports.)
187
188   4. `make install'
189
190      This will copy the file `gmp.h' and `libgmp.a', as well as the info
191      files, to `/usr/local' (or if you passed the `--prefix' option to
192      `configure', to the directory given as argument to `--prefix').
193
194 If you wish to build and install the BSD MP compatible functions, use
195 `make libmp.a' and `make install-bsdmp'.
196
197    There are some other useful make targets:
198
199    * `doc'
200
201      Create a DVI version of the manual, in `gmp.dvi' and a set of info
202      files, in `gmp.info', `gmp.info-1', `gmp.info-2', etc.
203
204    * `ps'
205
206      Create a Postscript version of the manual, in `gmp.ps'.
207
208    * `html'
209
210      Create a HTML version of the manual, in `gmp.html'.
211
212    * `clean'
213
214      Delete all object files and archive files, but not the
215      configuration files.
216
217    * `distclean'
218
219      Delete all files not included in the distribution.
220
221    * `uninstall'
222
223      Delete all files copied by `make install'.
224
225 Known Build Problems
226 ====================
227
228    GCC 2.7.2 (as well as 2.6.3) for the RS/6000 and PowerPC can not be
229 used to compile MP, due to a bug in GCC.  If you want to use GCC for
230 these machines, you need to apply the patch below to GCC, or use a
231 later version of the compiler.
232
233    If you are on a Sequent Symmetry, use the GNU assembler instead of
234 the system's assembler, since the latter has serious bugs.
235
236    The system compiler on NeXT is a massacred and old gcc, even if the
237 compiler calls itself `cc'.  This compiler cannot be used to build MP.
238 You need to get a real gcc, and install that before you compile MP.
239 (NeXT might have fixed this in newer releases of their system.)
240
241    The system C compiler under SunOS 4 has a bug that makes it
242 miscompile mpq/get_d.c.  This will make `make check' fail.
243
244    Please report other problems to `bug-gmp@prep.ai.mit.edu'.  *Note
245 Reporting Bugs::.
246
247    Patch to apply to GCC 2.6.3 and 2.7.2:
248
249      *** config/rs6000/rs6000.md        Sun Feb 11 08:22:11 1996
250      --- config/rs6000/rs6000.md.new    Sun Feb 18 03:33:37 1996
251      ***************
252      *** 920,926 ****
253           (set (match_operand:SI 0 "gpc_reg_operand" "=r")
254         (not:SI (match_dup 1)))]
255          ""
256      !   "nor. %0,%2,%1"
257          [(set_attr "type" "compare")])
258      
259        (define_insn ""
260      --- 920,926 ----
261           (set (match_operand:SI 0 "gpc_reg_operand" "=r")
262         (not:SI (match_dup 1)))]
263          ""
264      !   "nor. %0,%1,%1"
265          [(set_attr "type" "compare")])
266      
267        (define_insn ""
268
269 \1f
270 File: gmp.info,  Node: MP Basics,  Next: Reporting Bugs,  Prev: Installing MP,  Up: Top
271
272 MP Basics
273 *********
274
275    All declarations needed to use MP are collected in the include file
276 `gmp.h'.  It is designed to work with both C and C++ compilers.
277
278 Nomenclature and Types
279 ======================
280
281 In this manual, "integer" usually means a multiple precision integer, as
282 defined by the MP library.  The C data type for such integers is
283 `mpz_t'.  Here are some examples of how to declare such integers:
284
285      mpz_t sum;
286      
287      struct foo { mpz_t x, y; };
288      
289      mpz_t vec[20];
290
291 "Rational number" means a multiple precision fraction.  The C data type
292 for these fractions is `mpq_t'.  For example:
293
294      mpq_t quotient;
295
296 "Floating point number" or "Float" for short, is an arbitrary precision
297 mantissa with an limited precision exponent.  The C data type for such
298 objects is `mpf_t'.
299
300 A "limb" means the part of a multi-precision number that fits in a
301 single word.  (We chose this word because a limb of the human body is
302 analogous to a digit, only larger, and containing several digits.)
303 Normally a limb contains 32 or 64 bits.  The C data type for a limb is
304 `mp_limb_t'.
305
306 Function Classes
307 ================
308
309    There are six classes of functions in the MP library:
310
311   1. Functions for signed integer arithmetic, with names beginning with
312      `mpz_'.  The associated type is `mpz_t'.  There are about 100
313      functions in this class.
314
315   2. Functions for rational number arithmetic, with names beginning with
316      `mpq_'.  The associated type is `mpq_t'.  There are about 20
317      functions in this class, but the functions in the previous class
318      can be used for performing arithmetic on the numerator and
319      denominator separately.
320
321   3. Functions for floating-point arithmetic, with names beginning with
322      `mpf_'.  The associated type is `mpf_t'.  There are about 50
323      functions is this class.
324
325   4. Functions compatible with Berkeley MP, such as `itom', `madd', and
326      `mult'.  The associated type is `MINT'.
327
328   5. Fast low-level functions that operate on natural numbers.  These
329      are used by the functions in the preceding groups, and you can
330      also call them directly from very time-critical user programs.
331      These functions' names begin with `mpn_'.  There are about 30
332      (hard-to-use) functions in this class.
333
334      The associated type is array of `mp_limb_t'.
335
336   6. Miscellaneous functions.  Functions for setting up custom
337      allocation.
338
339 MP Variable Conventions
340 =======================
341
342    As a general rule, all MP functions expect output arguments before
343 input arguments.  This notation is based on an analogy with the
344 assignment operator.  (The BSD MP compatibility functions disobey this
345 rule, having the output argument(s) last.)
346
347    MP allows you to use the same variable for both input and output in
348 the same expression.  For example, the main function for integer
349 multiplication, `mpz_mul', can be used like this: `mpz_mul (x, x, x)'.
350 This computes the square of X and puts the result back in X.
351
352    Before you can assign to an MP variable, you need to initialize it
353 by calling one of the special initialization functions.  When you're
354 done with a variable, you need to clear it out, using one of the
355 functions for that purpose.  Which function to use depends on the type
356 of variable.  See the chapters on integer functions, rational number
357 functions, and floating-point functions for details.
358
359    A variable should only be initialized once, or at least cleared out
360 between each initialization.  After a variable has been initialized, it
361 may be assigned to any number of times.
362
363    For efficiency reasons, avoid to initialize and clear out a variable
364 in loops.  Instead, initialize it before entering the loop, and clear
365 it out after the loop has exited.
366
367    You don't need to be concerned about allocating additional space for
368 MP variables.  All functions in MP automatically allocate additional
369 space when a variable does not already have enough space.  They do not,
370 however, reduce the space when a smaller number is stored in the
371 object.  Most of the time, this policy is best, since it avoids
372 frequent re-allocation.
373
374 Useful Macros and Constants
375 ===========================
376
377  - Global Constant: const int mp_bits_per_limb
378      The number of bits per limb.
379
380  - Macro: __GNU_MP_VERSION
381  - Macro: __GNU_MP_VERSION_MINOR
382      The major and minor MP version, respectively, as integers.
383
384 Compatibility with Version 1.x
385 ==============================
386
387    This version of MP is upward compatible with previous versions of
388 MP, with a few exceptions.
389
390   1. Integer division functions round the result differently.  The old
391      functions (`mpz_div', `mpz_divmod', `mpz_mdiv', `mpz_mdivmod',
392      etc) now all use floor rounding (i.e., they round the quotient to
393      -infinity).  There are a lot of new functions for integer
394      division, giving the user better control over the rounding.
395
396   2. The function `mpz_mod' now compute the true *mod* function.
397
398   3. The functions `mpz_powm' and `mpz_powm_ui' now use *mod* for
399      reduction.
400
401   4. The assignment functions for rational numbers do no longer
402      canonicalize their results.  In the case a non-canonical result
403      could arise from an assignment, the user need to insert an
404      explicit call to `mpq_canonicalize'.  This change was made for
405      efficiency.
406
407   5. Output generated by `mpz_out_raw' in this release cannot be read
408      by `mpz_inp_raw' in previous releases.  This change was made for
409      making the file format truly portable between machines with
410      different word sizes.
411
412   6. Several `mpn' functions have changed.  But they were intentionally
413      undocumented in previous releases.
414
415   7. The functions `mpz_cmp_ui', `mpz_cmp_si', and `mpq_cmp_ui' are now
416      implementated as macros, and thereby sometimes evaluate their
417      arguments multiple times.
418
419   8. The functions `mpz_pow_ui' and `mpz_ui_pow_ui' now yield 1 for
420      0^0.  (In version 1, they yielded 0.)
421
422
423 Getting the Latest Version of MP
424 ================================
425
426    The latest version of the MP library is available by anonymous ftp
427 from from `prep.ai.mit.edu'.  The file name is
428 `/pub/gnu/gmp-M.N.tar.gz'.  Many sites around the world mirror `prep';
429 please use a mirror site near you.
430
431 \1f
432 File: gmp.info,  Node: Reporting Bugs,  Next: Integer Functions,  Prev: MP Basics,  Up: Top
433
434 Reporting Bugs
435 **************
436
437    If you think you have found a bug in the MP library, please
438 investigate it and report it.  We have made this library available to
439 you, and it is not to ask too much from you, to ask you to report the
440 bugs that you find.
441
442    There are a few things you should think about when you put your bug
443 report together.
444
445    You have to send us a test case that makes it possible for us to
446 reproduce the bug.  Include instructions on how to run the test case.
447
448    You also have to explain what is wrong; if you get a crash, or if
449 the results printed are incorrect and in that case, in what way.
450
451    It is not uncommon that an observed problem is actually due to a bug
452 in the compiler used when building MP; the MP code tends to explore
453 interesting corners in compilers.  Therefore, please include compiler
454 version information in your bug report.  This can be extracted using
455 `what `which cc`', or, if you're using gcc, `gcc -v'.  Also, include
456 the output from `uname -a'.
457
458    If your bug report is good, we will do our best to help you to get a
459 corrected version of the library; if the bug report is poor, we won't
460 do anything about it (aside of chiding you to send better bug reports).
461
462    Send your bug report to: `bug-gmp@prep.ai.mit.edu'.
463
464    If you think something in this manual is unclear, or downright
465 incorrect, or if the language needs to be improved, please send a note
466 to the same address.
467
468 \1f
469 File: gmp.info,  Node: Integer Functions,  Next: Rational Number Functions,  Prev: Reporting Bugs,  Up: Top
470
471 Integer Functions
472 *****************
473
474    This chapter describes the MP functions for performing integer
475 arithmetic.  These functions start with the prefix `mpz_'.
476
477    Arbitrary precision integers are stored in objects of type `mpz_t'.
478
479 * Menu:
480
481 * Initializing Integers::
482 * Assigning Integers::
483 * Simultaneous Integer Init & Assign::
484 * Converting Integers::
485 * Integer Arithmetic::
486 * Comparison Functions::
487 * Integer Logic and Bit Fiddling::
488 * I/O of Integers::
489 * Miscellaneous Integer Functions::
490
491 \1f
492 File: gmp.info,  Node: Initializing Integers,  Next: Assigning Integers,  Up: Integer Functions
493
494 Initialization and Assignment Functions
495 =======================================
496
497    The functions for integer arithmetic assume that all integer objects
498 are initialized.  You do that by calling the function `mpz_init'.
499
500  - Function: void mpz_init (mpz_t INTEGER)
501      Initialize INTEGER with limb space and set the initial numeric
502      value to 0.  Each variable should normally only be initialized
503      once, or at least cleared out (using `mpz_clear') between each
504      initialization.
505
506    Here is an example of using `mpz_init':
507
508      {
509        mpz_t integ;
510        mpz_init (integ);
511        ...
512        mpz_add (integ, ...);
513        ...
514        mpz_sub (integ, ...);
515      
516        /* Unless the program is about to exit, do ... */
517        mpz_clear (integ);
518      }
519
520 As you can see, you can store new values any number of times, once an
521 object is initialized.
522
523  - Function: void mpz_clear (mpz_t INTEGER)
524      Free the limb space occupied by INTEGER.  Make sure to call this
525      function for all `mpz_t' variables when you are done with them.
526
527  - Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC)
528      Change the limb space allocation to NEW_ALLOC limbs.  This
529      function is not normally called from user code, but it can be used
530      to give memory back to the heap, or to increase the space of a
531      variable to avoid repeated automatic re-allocation.
532
533  - Function: void mpz_array_init (mpz_t INTEGER_ARRAY[], size_t
534           ARRAY_SIZE, mp_size_t FIXED_NUM_BITS)
535      Allocate *fixed* limb space for all ARRAY_SIZE integers in
536      INTEGER_ARRAY.  The fixed allocation for each integer in the array
537      is enough to store FIXED_NUM_BITS.  If the fixed space will be
538      insufficient for storing the result of a subsequent calculation,
539      the result is unpredictable.
540
541      This function is useful for decreasing the working set for some
542      algorithms that use large integer arrays.
543
544      There is no way to de-allocate the storage allocated by this
545      function.  Don't call `mpz_clear'!
546
547 \1f
548 File: gmp.info,  Node: Assigning Integers,  Next: Simultaneous Integer Init & Assign,  Prev: Initializing Integers,  Up: Integer Functions
549
550 Assignment Functions
551 --------------------
552
553    These functions assign new values to already initialized integers
554 (*note Initializing Integers::.).
555
556  - Function: void mpz_set (mpz_t ROP, mpz_t OP)
557  - Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP)
558  - Function: void mpz_set_si (mpz_t ROP, signed long int OP)
559  - Function: void mpz_set_d (mpz_t ROP, double OP)
560  - Function: void mpz_set_q (mpz_t ROP, mpq_t OP)
561  - Function: void mpz_set_f (mpz_t ROP, mpf_t OP)
562      Set the value of ROP from OP.
563
564  - Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE)
565      Set the value of ROP from STR, a '\0'-terminated C string in base
566      BASE.  White space is allowed in the string, and is simply
567      ignored.  The base may vary from 2 to 36.  If BASE is 0, the
568      actual base is determined from the leading characters: if the
569      first two characters are `0x' or `0X', hexadecimal is assumed,
570      otherwise if the first character is `0', octal is assumed,
571      otherwise decimal is assumed.
572
573      This function returns 0 if the entire string up to the '\0' is a
574      valid number in base BASE.  Otherwise it returns -1.
575
576 \1f
577 File: gmp.info,  Node: Simultaneous Integer Init & Assign,  Next: Converting Integers,  Prev: Assigning Integers,  Up: Integer Functions
578
579 Combined Initialization and Assignment Functions
580 ------------------------------------------------
581
582    For convenience, MP provides a parallel series of initialize-and-set
583 functions which initialize the output and then store the value there.
584 These functions' names have the form `mpz_init_set...'
585
586    Here is an example of using one:
587
588      {
589        mpz_t pie;
590        mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10);
591        ...
592        mpz_sub (pie, ...);
593        ...
594        mpz_clear (pie);
595      }
596
597 Once the integer has been initialized by any of the `mpz_init_set...'
598 functions, it can be used as the source or destination operand for the
599 ordinary integer functions.  Don't use an initialize-and-set function
600 on a variable already initialized!
601
602  - Function: void mpz_init_set (mpz_t ROP, mpz_t OP)
603  - Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP)
604  - Function: void mpz_init_set_si (mpz_t ROP, signed long int OP)
605  - Function: void mpz_init_set_d (mpz_t ROP, double OP)
606      Initialize ROP with limb space and set the initial numeric value
607      from OP.
608
609  - Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE)
610      Initialize ROP and set its value like `mpz_set_str' (see its
611      documentation above for details).
612
613      If the string is a correct base BASE number, the function returns
614      0; if an error occurs it returns -1.  ROP is initialized even if
615      an error occurs.  (I.e., you have to call `mpz_clear' for it.)
616
617 \1f
618 File: gmp.info,  Node: Converting Integers,  Next: Integer Arithmetic,  Prev: Simultaneous Integer Init & Assign,  Up: Integer Functions
619
620 Conversion Functions
621 ====================
622
623    This section describes functions for converting arbitrary precision
624 integers to standard C types.  Functions for converting *to* arbitrary
625 precision integers are described in *Note Assigning Integers:: and
626 *Note I/O of Integers::.
627
628  - Function: unsigned long int mpz_get_ui (mpz_t OP)
629      Return the least significant part from OP.  This function combined
630      with
631      `mpz_tdiv_q_2exp(..., OP, CHAR_BIT*sizeof(unsigned long int))' can
632      be used to extract the limbs of an integer.
633
634  - Function: signed long int mpz_get_si (mpz_t OP)
635      If OP fits into a `signed long int' return the value of OP.
636      Otherwise return the least significant part of OP, with the same
637      sign as OP.
638
639      If OP is too large to fit in a `signed long int', the returned
640      result is probably not very useful.
641
642  - Function: double mpz_get_d (mpz_t OP)
643      Convert OP to a double.
644
645  - Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP)
646      Convert OP to a string of digits in base BASE.  The base may vary
647      from 2 to 36.
648
649      If STR is NULL, space for the result string is allocated using the
650      default allocation function, and a pointer to the string is
651      returned.
652
653      If STR is not NULL, it should point to a block of storage enough
654      large for the result.  To find out the right amount of space to
655      provide for STR, use `mpz_sizeinbase (OP, BASE) + 2'.  The two
656      extra bytes are for a possible minus sign, and for the terminating
657      null character.
658
659 \1f
660 File: gmp.info,  Node: Integer Arithmetic,  Next: Comparison Functions,  Prev: Converting Integers,  Up: Integer Functions
661
662 Arithmetic Functions
663 ====================
664
665  - Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2)
666  - Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int
667           OP2)
668      Set ROP to OP1 + OP2.
669
670  - Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2)
671  - Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int
672           OP2)
673      Set ROP to OP1 - OP2.
674
675  - Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2)
676  - Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int
677           OP2)
678      Set ROP to OP1 times OP2.
679
680  - Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, unsigned long int
681           OP2)
682      Set ROP to OP1 times 2 raised to OP2.  This operation can also be
683      defined as a left shift, OP2 steps.
684
685  - Function: void mpz_neg (mpz_t ROP, mpz_t OP)
686      Set ROP to -OP.
687
688  - Function: void mpz_abs (mpz_t ROP, mpz_t OP)
689      Set ROP to the absolute value of OP.
690
691  - Function: void mpz_fac_ui (mpz_t ROP, unsigned long int OP)
692      Set ROP to OP!, the factorial of OP.
693
694 Division functions
695 ------------------
696
697    Division is undefined if the divisor is zero, and passing a zero
698 divisor to the divide or modulo functions, as well passing a zero mod
699 argument to the `mpz_powm' and `mpz_powm_ui' functions, will make these
700 functions intentionally divide by zero.  This gives the user the
701 possibility to handle arithmetic exceptions in these functions in the
702 same manner as other arithmetic exceptions.
703
704    There are three main groups of division functions:
705    * Functions that truncate the quotient towards 0.  The names of these
706      functions start with `mpz_tdiv'.  The `t' in the name is short for
707      `truncate'.
708
709    * Functions that round the quotient towards -infinity.  The names of
710      these routines start with `mpz_fdiv'.  The `f' in the name is
711      short for `floor'.
712
713    * Functions that round the quotient towards +infinity.  The names of
714      these routines start with `mpz_cdiv'.  The `c' in the name is
715      short for `ceil'.
716
717    For each rounding mode, there are a couple of variants.  Here `q'
718 means that the quotient is computed, while `r' means that the remainder
719 is computed.  Functions that compute both the quotient and remainder
720 have `qr' in the name.
721
722  - Function: void mpz_tdiv_q (mpz_t ROP, mpz_t OP1, mpz_t OP2)
723  - Function: void mpz_tdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long
724           int OP2)
725      Set ROP to [OP1/OP2].  The quotient is truncated towards 0.
726
727  - Function: void mpz_tdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2)
728  - Function: void mpz_tdiv_r_ui (mpz_t ROP, mpz_t OP1, unsigned long
729           int OP2)
730      Set ROP to (OP1 - [OP1/OP2] * OP2).  Unless the remainder is zero,
731      it has the same sign as the dividend.
732
733  - Function: void mpz_tdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t
734           OP2)
735  - Function: void mpz_tdiv_qr_ui (mpz_t ROP1, mpz_t ROP2, mpz_t OP1,
736           unsigned long int OP2)
737      Divide OP1 by OP2 and put the quotient in ROP1 and the remainder
738      in ROP2.  The quotient is rounded towards 0.  Unless the remainder
739      is zero, it has the same sign as the dividend.
740
741      If ROP1 and ROP2 are the same variable, the results are undefined.
742
743  - Function: void mpz_fdiv_q (mpz_t ROP1, mpz_t OP1, mpz_t OP2)
744  - Function: void mpz_fdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long
745           int OP2)
746      Set ROP to OP1/OP2.  The quotient is rounded towards -infinity.
747
748  - Function: void mpz_fdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2)
749  - Function: unsigned long int mpz_fdiv_r_ui (mpz_t ROP, mpz_t OP1,
750           unsigned long int OP2)
751      Divide OP1 by OP2 and put the remainder in ROP.  Unless the
752      remainder is zero, it has the same sign as the divisor.
753
754      For `mpz_fdiv_r_ui' the remainder is small enough to fit in an
755      `unsigned long int', and is therefore returned.
756
757  - Function: void mpz_fdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t
758           OP2)
759  - Function: unsigned long int mpz_fdiv_qr_ui (mpz_t ROP1, mpz_t ROP2,
760           mpz_t OP1, unsigned long int OP2)
761      Divide OP1 by OP2 and put the quotient in ROP1 and the remainder
762      in ROP2.  The quotient is rounded towards -infinity.  Unless the
763      remainder is zero, it has the same sign as the divisor.
764
765      For `mpz_fdiv_qr_ui' the remainder is small enough to fit in an
766      `unsigned long int', and is therefore returned.
767
768      If ROP1 and ROP2 are the same variable, the results are undefined.
769
770  - Function: unsigned long int mpz_fdiv_ui (mpz_t OP1, unsigned long
771           int OP2)
772      This function is similar to `mpz_fdiv_r_ui', but the remainder is
773      only returned; it is not stored anywhere.
774
775  - Function: void mpz_cdiv_q (mpz_t ROP1, mpz_t OP1, mpz_t OP2)
776  - Function: void mpz_cdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long
777           int OP2)
778      Set ROP to OP1/OP2.  The quotient is rounded towards +infinity.
779
780  - Function: void mpz_cdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2)
781  - Function: unsigned long int mpz_cdiv_r_ui (mpz_t ROP, mpz_t OP1,
782           unsigned long int OP2)
783      Divide OP1 by OP2 and put the remainder in ROP.  Unless the
784      remainder is zero, it has the opposite sign as the divisor.
785
786      For `mpz_cdiv_r_ui' the negated remainder is small enough to fit
787      in an `unsigned long int', and it is therefore returned.
788
789  - Function: void mpz_cdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t
790           OP2)
791  - Function: unsigned long int mpz_cdiv_qr_ui (mpz_t ROP1, mpz_t ROP2,
792           mpz_t OP1, unsigned long int OP2)
793      Divide OP1 by OP2 and put the quotient in ROP1 and the remainder
794      in ROP2.  The quotient is rounded towards +infinity.  Unless the
795      remainder is zero, it has the opposite sign as the divisor.
796
797      For `mpz_cdiv_qr_ui' the negated remainder is small enough to fit
798      in an `unsigned long int', and it is therefore returned.
799
800      If ROP1 and ROP2 are the same variable, the results are undefined.
801
802  - Function: unsigned long int mpz_cdiv_ui (mpz_t OP1, unsigned long
803           int OP2)
804      Return the negated remainder, similar to `mpz_cdiv_r_ui'.  (The
805      difference is that this function doesn't store the remainder
806      anywhere.)
807
808  - Function: void mpz_mod (mpz_t ROP, mpz_t OP1, mpz_t OP2)
809  - Function: unsigned long int mpz_mod_ui (mpz_t ROP, mpz_t OP1,
810           unsigned long int OP2)
811      Set ROP to OP1 `mod' OP2.  The sign of the divisor is ignored, and
812      the result is always non-negative.
813
814      For `mpz_mod_ui' the remainder is small enough to fit in an
815      `unsigned long int', and is therefore returned.
816
817  - Function: void mpz_divexact (mpz_t ROP, mpz_t OP1, mpz_t OP2)
818      Set ROP to OP1/OP2.  This function produces correct results only
819      when it is known in advance that OP2 divides OP1.
820
821      Since mpz_divexact is much faster than any of the other routines
822      that produce the quotient (*note References::. Jebelean), it is
823      the best choice for instances in which exact division is known to
824      occur, such as reducing a rational to lowest terms.
825
826  - Function: void mpz_tdiv_q_2exp (mpz_t ROP, mpz_t OP1, unsigned long
827           int OP2)
828      Set ROP to OP1 divided by 2 raised to OP2.  The quotient is
829      rounded towards 0.
830
831  - Function: void mpz_tdiv_r_2exp (mpz_t ROP, mpz_t OP1, unsigned long
832           int OP2)
833      Divide OP1 by (2 raised to OP2) and put the remainder in ROP.
834      Unless it is zero, ROP will have the same sign as OP1.
835
836  - Function: void mpz_fdiv_q_2exp (mpz_t ROP, mpz_t OP1, unsigned long
837           int OP2)
838      Set ROP to OP1 divided by 2 raised to OP2.  The quotient is
839      rounded towards -infinity.
840
841  - Function: void mpz_fdiv_r_2exp (mpz_t ROP, mpz_t OP1, unsigned long
842           int OP2)
843      Divide OP1 by (2 raised to OP2) and put the remainder in ROP.  The
844      sign of ROP will always be positive.
845
846      This operation can also be defined as masking of the OP2 least
847      significant bits.
848
849 Exponentialization Functions
850 ----------------------------
851
852  - Function: void mpz_powm (mpz_t ROP, mpz_t BASE, mpz_t EXP, mpz_t MOD)
853  - Function: void mpz_powm_ui (mpz_t ROP, mpz_t BASE, unsigned long int
854           EXP, mpz_t MOD)
855      Set ROP to (BASE raised to EXP) `mod' MOD.  If EXP is negative,
856      the result is undefined.
857
858  - Function: void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int
859           EXP)
860  - Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE,
861           unsigned long int EXP)
862      Set ROP to BASE raised to EXP.  The case of 0^0 yields 1.
863
864 Square Root Functions
865 ---------------------
866
867  - Function: void mpz_sqrt (mpz_t ROP, mpz_t OP)
868      Set ROP to the truncated integer part of the square root of OP.
869
870  - Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, mpz_t OP)
871      Set ROP1 to the truncated integer part of the square root of OP,
872      like `mpz_sqrt'.  Set ROP2 to OP-ROP1*ROP1, (i.e., zero if OP is a
873      perfect square).
874
875      If ROP1 and ROP2 are the same variable, the results are undefined.
876
877  - Function: int mpz_perfect_square_p (mpz_t OP)
878      Return non-zero if OP is a perfect square, i.e., if the square
879      root of OP is an integer.  Return zero otherwise.
880
881 Number Theoretic Functions
882 --------------------------
883
884  - Function: int mpz_probab_prime_p (mpz_t OP, int REPS)
885      If this function returns 0, OP is definitely not prime.  If it
886      returns 1, then OP is `probably' prime.  The probability of a
887      false positive is (1/4)**REPS.  A reasonable value of reps is 25.
888
889      An implementation of the probabilistic primality test found in
890      Seminumerical Algorithms (*note References::. Knuth).
891
892  - Function: void mpz_gcd (mpz_t ROP, mpz_t OP1, mpz_t OP2)
893      Set ROP to the greatest common divisor of OP1 and OP2.
894
895  - Function: unsigned long int mpz_gcd_ui (mpz_t ROP, mpz_t OP1,
896           unsigned long int OP2)
897      Compute the greatest common divisor of OP1 and OP2.  If ROP is not
898      NULL, store the result there.
899
900      If the result is small enough to fit in an `unsigned long int', it
901      is returned.  If the result does not fit, 0 is returned, and the
902      result is equal to the argument OP1.  Note that the result will
903      always fit if OP2 is non-zero.
904
905  - Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, mpz_t A, mpz_t
906           B)
907      Compute G, S, and T, such that AS + BT = G = `gcd' (A, B).  If T is
908      NULL, that argument is not computed.
909
910  - Function: int mpz_invert (mpz_t ROP, mpz_t OP1, mpz_t OP2)
911      Compute the inverse of OP1 modulo OP2 and put the result in ROP.
912      Return non-zero if an inverse exist, zero otherwise.  When the
913      function returns zero, do not assume anything about the value in
914      ROP.
915
916  - Function: int mpz_jacobi (mpz_t OP1, mpz_t OP2)
917  - Function: int mpz_legendre (mpz_t OP1, mpz_t OP2)
918      Compute the Jacobi and Legendre symbols, respectively.
919
920 \1f
921 File: gmp.info,  Node: Comparison Functions,  Next: Integer Logic and Bit Fiddling,  Prev: Integer Arithmetic,  Up: Integer Functions
922
923 Comparison Functions
924 ====================
925
926  - Function: int mpz_cmp (mpz_t OP1, mpz_t OP2)
927      Compare OP1 and OP2.  Return a positive value if OP1 > OP2, zero
928      if OP1 = OP2, and a negative value if OP1 < OP2.
929
930  - Macro: int mpz_cmp_ui (mpz_t OP1, unsigned long int OP2)
931  - Macro: int mpz_cmp_si (mpz_t OP1, signed long int OP2)
932      Compare OP1 and OP2.  Return a positive value if OP1 > OP2, zero
933      if OP1 = OP2, and a negative value if OP1 < OP2.
934
935      These functions are actually implemented as macros.  They evaluate
936      their arguments multiple times.
937
938  - Macro: int mpz_sgn (mpz_t OP)
939      Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0.
940
941      This function is actually implemented as a macro.  It evaluates its
942      arguments multiple times.
943
944 \1f
945 File: gmp.info,  Node: Integer Logic and Bit Fiddling,  Next: I/O of Integers,  Prev: Comparison Functions,  Up: Integer Functions
946
947 Logical and Bit Manipulation Functions
948 ======================================
949
950    These functions behave as if two's complement arithmetic were used
951 (although sign-magnitude is used by the actual implementation).
952
953  - Function: void mpz_and (mpz_t ROP, mpz_t OP1, mpz_t OP2)
954      Set ROP to OP1 logical-and OP2.
955
956  - Function: void mpz_ior (mpz_t ROP, mpz_t OP1, mpz_t OP2)
957      Set ROP to OP1 inclusive-or OP2.
958
959  - Function: void mpz_com (mpz_t ROP, mpz_t OP)
960      Set ROP to the one's complement of OP.
961
962  - Function: unsigned long int mpz_popcount (mpz_t OP)
963      For non-negative numbers, return the population count of OP.  For
964      negative numbers, return the largest possible value (MAX_ULONG).
965
966  - Function: unsigned long int mpz_hamdist (mpz_t OP1, mpz_t OP2)
967      If OP1 and OP2 are both non-negative, return the hamming distance
968      between the two operands.  Otherwise, return the largest possible
969      value (MAX_ULONG).
970
971      It is possible to extend this function to return a useful value
972      when the operands are both negative, but the current
973      implementation returns MAX_ULONG in this case.  *Do not depend on
974      this behavior, since it will change in future versions of the
975      library.*
976
977  - Function: unsigned long int mpz_scan0 (mpz_t OP, unsigned long int
978           STARTING_BIT)
979      Scan OP, starting with bit STARTING_BIT, towards more significant
980      bits, until the first clear bit is found.  Return the index of the
981      found bit.
982
983  - Function: unsigned long int mpz_scan1 (mpz_t OP, unsigned long int
984           STARTING_BIT)
985      Scan OP, starting with bit STARTING_BIT, towards more significant
986      bits, until the first set bit is found.  Return the index of the
987      found bit.
988
989  - Function: void mpz_setbit (mpz_t ROP, unsigned long int BIT_INDEX)
990      Set bit BIT_INDEX in OP1.
991
992  - Function: void mpz_clrbit (mpz_t ROP, unsigned long int BIT_INDEX)
993      Clear bit BIT_INDEX in OP1.
994
995 \1f
996 File: gmp.info,  Node: I/O of Integers,  Next: Miscellaneous Integer Functions,  Prev: Integer Logic and Bit Fiddling,  Up: Integer Functions
997
998 Input and Output Functions
999 ==========================
1000
1001    Functions that perform input from a stdio stream, and functions that
1002 output to a stdio stream.  Passing a NULL pointer for a STREAM argument
1003 to any of these functions will make them read from `stdin' and write to
1004 `stdout', respectively.
1005
1006    When using any of these functions, it is a good idea to include
1007 `stdio.h' before `gmp.h', since that will allow `gmp.h' to define
1008 prototypes for these functions.
1009
1010  - Function: size_t mpz_out_str (FILE *STREAM, int BASE, mpz_t OP)
1011      Output OP on stdio stream STREAM, as a string of digits in base
1012      BASE.  The base may vary from 2 to 36.
1013
1014      Return the number of bytes written, or if an error occurred,
1015      return 0.
1016
1017  - Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE)
1018      Input a possibly white-space preceded string in base BASE from
1019      stdio stream STREAM, and put the read integer in ROP.  The base
1020      may vary from 2 to 36.  If BASE is 0, the actual base is
1021      determined from the leading characters: if the first two
1022      characters are `0x' or `0X', hexadecimal is assumed, otherwise if
1023      the first character is `0', octal is assumed, otherwise decimal is
1024      assumed.
1025
1026      Return the number of bytes read, or if an error occurred, return 0.
1027
1028  - Function: size_t mpz_out_raw (FILE *STREAM, mpz_t OP)
1029      Output OP on stdio stream STREAM, in raw binary format.  The
1030      integer is written in a portable format, with 4 bytes of size
1031      information, and that many bytes of limbs.  Both the size and the
1032      limbs are written in decreasing significance order (i.e., in
1033      big-endian).
1034
1035      The output can be read with `mpz_inp_raw'.
1036
1037      Return the number of bytes written, or if an error occurred,
1038      return 0.
1039
1040      The output of this can not be read by `mpz_inp_raw' from GMP 1,
1041      because of changes necessary for compatibility between 32-bit and
1042      64-bit machines.
1043
1044  - Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM)
1045      Input from stdio stream STREAM in the format written by
1046      `mpz_out_raw', and put the result in ROP.  Return the number of
1047      bytes read, or if an error occurred, return 0.
1048
1049      This routine can read the output from `mpz_out_raw' also from GMP
1050      1, in spite of changes necessary for compatibility between 32-bit
1051      and 64-bit machines.
1052
1053 \1f
1054 File: gmp.info,  Node: Miscellaneous Integer Functions,  Prev: I/O of Integers,  Up: Integer Functions
1055
1056 Miscellaneous Functions
1057 =======================
1058
1059  - Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE)
1060      Generate a random integer of at most MAX_SIZE limbs.  The generated
1061      random number doesn't satisfy any particular requirements of
1062      randomness.  Negative random numbers are generated when MAX_SIZE
1063      is negative.
1064
1065  - Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE)
1066      Generate a random integer of at most MAX_SIZE limbs, with long
1067      strings of zeros and ones in the binary representation.  Useful
1068      for testing functions and algorithms, since this kind of random
1069      numbers have proven to be more likely to trigger corner-case bugs.
1070      Negative random numbers are generated when MAX_SIZE is negative.
1071
1072  - Function: size_t mpz_size (mpz_t OP)
1073      Return the size of OP measured in number of limbs.  If OP is zero,
1074      the returned value will be zero.
1075
1076      *This function is obsolete.  It will disappear from future MP
1077      releases.*
1078
1079  - Function: size_t mpz_sizeinbase (mpz_t OP, int BASE)
1080      Return the size of OP measured in number of digits in base BASE.
1081      The base may vary from 2 to 36.  The returned value will be exact
1082      or 1 too big.  If BASE is a power of 2, the returned value will
1083      always be exact.
1084
1085      This function is useful in order to allocate the right amount of
1086      space before converting OP to a string.  The right amount of
1087      allocation is normally two more than the value returned by
1088      `mpz_sizeinbase' (one extra for a minus sign and one for the
1089      terminating '\0').
1090
1091 \1f
1092 File: gmp.info,  Node: Rational Number Functions,  Next: Floating-point Functions,  Prev: Integer Functions,  Up: Top
1093
1094 Rational Number Functions
1095 *************************
1096
1097    This chapter describes the MP functions for performing arithmetic on
1098 rational numbers.  These functions start with the prefix `mpq_'.
1099
1100    Rational numbers are stored in objects of type `mpq_t'.
1101
1102    All rational arithmetic functions assume operands have a canonical
1103 form, and canonicalize their result.  The canonical from means that the
1104 denominator and the numerator have no common factors, and that the
1105 denominator is positive.  Zero has the unique representation 0/1.
1106
1107    Pure assignment functions do not canonicalize the assigned variable.
1108 It is the responsibility of the user to canonicalize the assigned
1109 variable before any arithmetic operations are performed on that
1110 variable.  *Note that this is an incompatible change from version 1 of
1111 the library.*
1112
1113  - Function: void mpq_canonicalize (mpq_t OP)
1114      Remove any factors that are common to the numerator and
1115      denominator of OP, and make the denominator positive.
1116
1117 * Menu:
1118
1119 * Initializing Rationals::
1120 * Assigning Rationals::
1121 * Simultaneous Integer Init & Assign::
1122 * Comparing Rationals::
1123 * Applying Integer Functions::
1124 * Miscellaneous Rational Functions::
1125
1126 \1f
1127 File: gmp.info,  Node: Initializing Rationals,  Next: Assigning Rationals,  Prev: Rational Number Functions,  Up: Rational Number Functions
1128
1129 Initialization and Assignment Functions
1130 =======================================
1131
1132  - Function: void mpq_init (mpq_t DEST_RATIONAL)
1133      Initialize DEST_RATIONAL and set it to 0/1.  Each variable should
1134      normally only be initialized once, or at least cleared out (using
1135      the function `mpq_clear') between each initialization.
1136
1137  - Function: void mpq_clear (mpq_t RATIONAL_NUMBER)
1138      Free the space occupied by RATIONAL_NUMBER.  Make sure to call this
1139      function for all `mpq_t' variables when you are done with them.
1140
1141  - Function: void mpq_set (mpq_t ROP, mpq_t OP)
1142  - Function: void mpq_set_z (mpq_t ROP, mpz_t OP)
1143      Assign ROP from OP.
1144
1145  - Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1,
1146           unsigned long int OP2)
1147  - Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned
1148           long int OP2)
1149      Set the value of ROP to OP1/OP2.  Note that if OP1 and OP2 have
1150      common factors, ROP has to be passed to `mpq_canonicalize' before
1151      any operations are performed on ROP.
1152
1153 \1f
1154 File: gmp.info,  Node: Assigning Rationals,  Next: Comparing Rationals,  Prev: Initializing Rationals,  Up: Rational Number Functions
1155
1156 Arithmetic Functions
1157 ====================
1158
1159  - Function: void mpq_add (mpq_t SUM, mpq_t ADDEND1, mpq_t ADDEND2)
1160      Set SUM to ADDEND1 + ADDEND2.
1161
1162  - Function: void mpq_sub (mpq_t DIFFERENCE, mpq_t MINUEND, mpq_t
1163           SUBTRAHEND)
1164      Set DIFFERENCE to MINUEND - SUBTRAHEND.
1165
1166  - Function: void mpq_mul (mpq_t PRODUCT, mpq_t MULTIPLIER, mpq_t
1167           MULTIPLICAND)
1168      Set PRODUCT to MULTIPLIER times MULTIPLICAND.
1169
1170  - Function: void mpq_div (mpq_t QUOTIENT, mpq_t DIVIDEND, mpq_t
1171           DIVISOR)
1172      Set QUOTIENT to DIVIDEND/DIVISOR.
1173
1174  - Function: void mpq_neg (mpq_t NEGATED_OPERAND, mpq_t OPERAND)
1175      Set NEGATED_OPERAND to -OPERAND.
1176
1177  - Function: void mpq_inv (mpq_t INVERTED_NUMBER, mpq_t NUMBER)
1178      Set INVERTED_NUMBER to 1/NUMBER.  If the new denominator is zero,
1179      this routine will divide by zero.
1180
1181 \1f
1182 File: gmp.info,  Node: Comparing Rationals,  Next: Applying Integer Functions,  Prev: Assigning Rationals,  Up: Rational Number Functions
1183
1184 Comparison Functions
1185 ====================
1186
1187  - Function: int mpq_cmp (mpq_t OP1, mpq_t OP2)
1188      Compare OP1 and OP2.  Return a positive value if OP1 > OP2, zero
1189      if OP1 = OP2, and a negative value if OP1 < OP2.
1190
1191      To determine if two rationals are equal, `mpq_equal' is faster than
1192      `mpq_cmp'.
1193
1194  - Macro: int mpq_cmp_ui (mpq_t OP1, unsigned long int NUM2, unsigned
1195           long int DEN2)
1196      Compare OP1 and NUM2/DEN2.  Return a positive value if OP1 >
1197      NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 <
1198      NUM2/DEN2.
1199
1200      This routine allows that NUM2 and DEN2 have common factors.
1201
1202      This function is actually implemented as a macro.  It evaluates its
1203      arguments multiple times.
1204
1205  - Macro: int mpq_sgn (mpq_t OP)
1206      Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0.
1207
1208      This function is actually implemented as a macro.  It evaluates its
1209      arguments multiple times.
1210
1211  - Function: int mpq_equal (mpq_t OP1, mpq_t OP2)
1212      Return non-zero if OP1 and OP2 are equal, zero if they are
1213      non-equal.  Although `mpq_cmp' can be used for the same purpose,
1214      this function is much faster.
1215
1216 \1f
1217 File: gmp.info,  Node: Applying Integer Functions,  Next: Miscellaneous Rational Functions,  Prev: Comparing Rationals,  Up: Rational Number Functions
1218
1219 Applying Integer Functions to Rationals
1220 =======================================
1221
1222    The set of `mpq' functions is quite small.  In particular, there are
1223 no functions for either input or output.  But there are two macros that
1224 allow us to apply any `mpz' function on the numerator or denominator of
1225 a rational number.  If these macros are used to assign to the rational
1226 number, `mpq_canonicalize' normally need to be called afterwards.
1227
1228  - Macro: mpz_t mpq_numref (mpq_t OP)
1229  - Macro: mpz_t mpq_denref (mpq_t OP)
1230      Return a reference to the numerator and denominator of OP,
1231      respectively.  The `mpz' functions can be used on the result of
1232      these macros.
1233
1234 \1f
1235 File: gmp.info,  Node: Miscellaneous Rational Functions,  Prev: Applying Integer Functions,  Up: Rational Number Functions
1236
1237 Miscellaneous Functions
1238 =======================
1239
1240  - Function: double mpq_get_d (mpq_t OP)
1241      Convert OP to a double.
1242
1243    These functions assign between either the numerator or denominator
1244 of a rational, and an integer.  Instead of using these functions, it is
1245 preferable to use the more general mechanisms `mpq_numref' and
1246 `mpq_denref', together with `mpz_set'.
1247
1248  - Function: void mpq_set_num (mpq_t RATIONAL, mpz_t NUMERATOR)
1249      Copy NUMERATOR to the numerator of RATIONAL.  When this risks to
1250      make the numerator and denominator of RATIONAL have common
1251      factors, you have to pass RATIONAL to `mpq_canonicalize' before
1252      any operations are performed on RATIONAL.
1253
1254      This function is equivalent to `mpz_set (mpq_numref (RATIONAL),
1255      NUMERATOR)'.
1256
1257  - Function: void mpq_set_den (mpq_t RATIONAL, mpz_t DENOMINATOR)
1258      Copy DENOMINATOR to the denominator of RATIONAL.  When this risks
1259      to make the numerator and denominator of RATIONAL have common
1260      factors, or if the denominator might be negative, you have to pass
1261      RATIONAL to `mpq_canonicalize' before any operations are performed
1262      on RATIONAL.
1263
1264      *In version 1 of the library, negative denominators were handled by
1265      copying the sign to the numerator.  That is no longer done.*
1266
1267      This function is equivalent to `mpz_set (mpq_denref (RATIONAL),
1268      DENOMINATORS)'.
1269
1270  - Function: void mpq_get_num (mpz_t NUMERATOR, mpq_t RATIONAL)
1271      Copy the numerator of RATIONAL to the integer NUMERATOR, to
1272      prepare for integer operations on the numerator.
1273
1274      This function is equivalent to `mpz_set (NUMERATOR, mpq_numref
1275      (RATIONAL))'.
1276
1277  - Function: void mpq_get_den (mpz_t DENOMINATOR, mpq_t RATIONAL)
1278      Copy the denominator of RATIONAL to the integer DENOMINATOR, to
1279      prepare for integer operations on the denominator.
1280
1281      This function is equivalent to `mpz_set (DENOMINATOR, mpq_denref
1282      (RATIONAL))'.
1283