From 3584481e42adc9e15c6a94bd75d69a0f909c548b Mon Sep 17 00:00:00 2001 From: markm Date: Sun, 20 Oct 1996 09:11:57 +0000 Subject: Remove the old libgmp. Version 2.0.2 is about to hit prime time. --- gnu/lib/libgmp/gmp.info-1 | 1283 --------------------------------------------- 1 file changed, 1283 deletions(-) delete mode 100644 gnu/lib/libgmp/gmp.info-1 (limited to 'gnu/lib/libgmp/gmp.info-1') diff --git a/gnu/lib/libgmp/gmp.info-1 b/gnu/lib/libgmp/gmp.info-1 deleted file mode 100644 index 4ea9373..0000000 --- a/gnu/lib/libgmp/gmp.info-1 +++ /dev/null @@ -1,1283 +0,0 @@ -This is Info file gmp.info, produced by Makeinfo-1.64 from the input -file gmp.texi. - -START-INFO-DIR-ENTRY -* gmp: (gmp.info). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - This file documents GNU MP, a library for arbitrary-precision -arithmetic. - - Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, -Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gmp.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) - -GNU MP -****** - - This manual documents how to install and use the GNU multiple -precision arithmetic library, version 2.0.2. - -* Menu: - -* Copying:: GMP Copying Conditions (LGPL). -* Introduction to MP:: Brief introduction to GNU MP. -* Installing MP:: How to configure and compile the MP library. -* MP Basics:: What every MP user should now. -* Reporting Bugs:: How to usefully report bugs. -* Integer Functions:: Functions for arithmetic on signed integers. -* Rational Number Functions:: Functions for arithmetic on rational numbers. -* Floating-point Functions:: Functions for arithmetic on floats. -* Low-level Functions:: Fast functions for natural numbers. -* BSD Compatible Functions:: All functions found in BSD MP. -* Custom Allocation:: How to customize the internal allocation. - -* Contributors:: -* References:: -* Concept Index:: -* Function Index:: - - -File: gmp.info, Node: Copying, Next: Introduction to MP, Prev: Top, Up: Top - -GNU MP Copying Conditions -************************* - - This library is "free"; this means that everyone is free to use it -and free to redistribute it on a free basis. The library is not in the -public domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed -is to try to prevent others from further sharing any version of this -library that they might get from you. - - Specifically, we want to make sure that you have the right to give -away copies of the library, that you receive source code or else can -get it if you want it, that you can change this library or use pieces -of it in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of the GNU MP library, you must give the recipients all the -rights that you have. You must make sure that they, too, receive or -can get the source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone -finds out that there is no warranty for the GNU MP library. If it is -modified by someone else and passed on, we want their recipients to -know that what they have is not what we distributed, so that any -problems introduced by others will not reflect on our reputation. - - The precise conditions of the license for the GNU MP library are -found in the Library General Public License that accompany the source -code. - - -File: gmp.info, Node: Introduction to MP, Next: Installing MP, Prev: Copying, Up: Top - -Introduction to GNU MP -********************** - - GNU MP is a portable library written in C for arbitrary precision -arithmetic on integers, rational numbers, and floating-point numbers. -It aims to provide the fastest possible arithmetic for all applications -that need higher precision than is directly supported by the basic C -types. - - Many applications use just a few hundred bits of precision; but some -applications may need thousands or even millions of bits. MP is -designed to give good performance for both, by choosing algorithms -based on the sizes of the operands, and by carefully keeping the -overhead at a minimum. - - The speed of MP is achieved by using fullwords as the basic -arithmetic type, by using sophisticated algorithms, by including -carefully optimized assembly code for the most common inner loops for -many different CPUs, and by a general emphasis on speed (as opposed to -simplicity or elegance). - - There is carefully optimized assembly code for these CPUs: DEC -Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, -Intel i960, Motorola MC68000, MC68020, MC88100, and MC88110, -Motorola/IBM PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000, -SPARCv7, SuperSPARC, generic SPARCv8, and DEC VAX. Some optimizations -also for ARM, Clipper, IBM ROMP (RT), and Pyramid AP/XP. - - This version of MP is released under a more liberal license than -previous versions. It is now permitted to link MP to non-free -programs, as long as MP source code is provided when distributing the -non-free program. - -How to use this Manual -====================== - - Everyone should read *Note MP Basics::. If you need to install the -library yourself, you need to read *Note Installing MP::, too. - - The rest of the manual can be used for later reference, although it -is probably a good idea to glance through it. - - -File: gmp.info, Node: Installing MP, Next: MP Basics, Prev: Introduction to MP, Up: Top - -Installing MP -************* - - To build MP, you first have to configure it for your CPU and -operating system. You need a C compiler, preferably GCC, but any -reasonable compiler should work. And you need a standard Unix `make' -program, plus some other standard Unix utility programs. - - (If you're on an MS-DOS machine, your can build MP using `make.bat'. -It requires that djgpp is installed. It does not require -configuration, nor is `make' needed; `make.bat' both configures and -builds the library.) - - Here are the steps needed to install the library on Unix systems: - - 1. In most cases, `./configure --target=cpu-vendor-os', should work - both for native and cross-compilation. If you get error messages, - your machine might not be supported. - - If you want to compile in a separate object directory, cd to that - directory, and prefix the configure command with the path to the - MP source directory. Not all `make' programs have the necessary - features to support this. In particular, SunOS and Slowaris - `make' have bugs that makes them unable to build from a separate - object directory. Use GNU `make' instead. - - In addition to the standard cpu-vendor-os tuples, MP recognizes - sparc8 and supersparc as valid CPU names. Specifying these CPU - names for relevant systems will improve performance significantly. - - In general, if you want a library that runs as fast as possible, - you should make sure you configure MP for the exact CPU type your - system uses. - - If you have `gcc' in your `PATH', it will be used by default. To - override this, pass `-with-gcc=no' to `configure'. - - 2. `make' - - This will compile MP, and create a library archive file `libgmp.a' - in the working directory. - - 3. `make check' - - This will make sure MP was built correctly. If you get error - messages, please report this to `bug-gmp@prep.ai.mit.edu'. (*Note - Reporting Bugs::, for information on what to include in useful bug - reports.) - - 4. `make install' - - This will copy the file `gmp.h' and `libgmp.a', as well as the info - files, to `/usr/local' (or if you passed the `--prefix' option to - `configure', to the directory given as argument to `--prefix'). - -If you wish to build and install the BSD MP compatible functions, use -`make libmp.a' and `make install-bsdmp'. - - There are some other useful make targets: - - * `doc' - - Create a DVI version of the manual, in `gmp.dvi' and a set of info - files, in `gmp.info', `gmp.info-1', `gmp.info-2', etc. - - * `ps' - - Create a Postscript version of the manual, in `gmp.ps'. - - * `html' - - Create a HTML version of the manual, in `gmp.html'. - - * `clean' - - Delete all object files and archive files, but not the - configuration files. - - * `distclean' - - Delete all files not included in the distribution. - - * `uninstall' - - Delete all files copied by `make install'. - -Known Build Problems -==================== - - GCC 2.7.2 (as well as 2.6.3) for the RS/6000 and PowerPC can not be -used to compile MP, due to a bug in GCC. If you want to use GCC for -these machines, you need to apply the patch below to GCC, or use a -later version of the compiler. - - If you are on a Sequent Symmetry, use the GNU assembler instead of -the system's assembler, since the latter has serious bugs. - - The system compiler on NeXT is a massacred and old gcc, even if the -compiler calls itself `cc'. This compiler cannot be used to build MP. -You need to get a real gcc, and install that before you compile MP. -(NeXT might have fixed this in newer releases of their system.) - - The system C compiler under SunOS 4 has a bug that makes it -miscompile mpq/get_d.c. This will make `make check' fail. - - Please report other problems to `bug-gmp@prep.ai.mit.edu'. *Note -Reporting Bugs::. - - Patch to apply to GCC 2.6.3 and 2.7.2: - - *** config/rs6000/rs6000.md Sun Feb 11 08:22:11 1996 - --- config/rs6000/rs6000.md.new Sun Feb 18 03:33:37 1996 - *************** - *** 920,926 **** - (set (match_operand:SI 0 "gpc_reg_operand" "=r") - (not:SI (match_dup 1)))] - "" - ! "nor. %0,%2,%1" - [(set_attr "type" "compare")]) - - (define_insn "" - --- 920,926 ---- - (set (match_operand:SI 0 "gpc_reg_operand" "=r") - (not:SI (match_dup 1)))] - "" - ! "nor. %0,%1,%1" - [(set_attr "type" "compare")]) - - (define_insn "" - - -File: gmp.info, Node: MP Basics, Next: Reporting Bugs, Prev: Installing MP, Up: Top - -MP Basics -********* - - All declarations needed to use MP are collected in the include file -`gmp.h'. It is designed to work with both C and C++ compilers. - -Nomenclature and Types -====================== - -In this manual, "integer" usually means a multiple precision integer, as -defined by the MP library. The C data type for such integers is -`mpz_t'. Here are some examples of how to declare such integers: - - mpz_t sum; - - struct foo { mpz_t x, y; }; - - mpz_t vec[20]; - -"Rational number" means a multiple precision fraction. The C data type -for these fractions is `mpq_t'. For example: - - mpq_t quotient; - -"Floating point number" or "Float" for short, is an arbitrary precision -mantissa with an limited precision exponent. The C data type for such -objects is `mpf_t'. - -A "limb" means the part of a multi-precision number that fits in a -single word. (We chose this word because a limb of the human body is -analogous to a digit, only larger, and containing several digits.) -Normally a limb contains 32 or 64 bits. The C data type for a limb is -`mp_limb_t'. - -Function Classes -================ - - There are six classes of functions in the MP library: - - 1. Functions for signed integer arithmetic, with names beginning with - `mpz_'. The associated type is `mpz_t'. There are about 100 - functions in this class. - - 2. Functions for rational number arithmetic, with names beginning with - `mpq_'. The associated type is `mpq_t'. There are about 20 - functions in this class, but the functions in the previous class - can be used for performing arithmetic on the numerator and - denominator separately. - - 3. Functions for floating-point arithmetic, with names beginning with - `mpf_'. The associated type is `mpf_t'. There are about 50 - functions is this class. - - 4. Functions compatible with Berkeley MP, such as `itom', `madd', and - `mult'. The associated type is `MINT'. - - 5. Fast low-level functions that operate on natural numbers. These - are used by the functions in the preceding groups, and you can - also call them directly from very time-critical user programs. - These functions' names begin with `mpn_'. There are about 30 - (hard-to-use) functions in this class. - - The associated type is array of `mp_limb_t'. - - 6. Miscellaneous functions. Functions for setting up custom - allocation. - -MP Variable Conventions -======================= - - As a general rule, all MP functions expect output arguments before -input arguments. This notation is based on an analogy with the -assignment operator. (The BSD MP compatibility functions disobey this -rule, having the output argument(s) last.) - - MP allows you to use the same variable for both input and output in -the same expression. For example, the main function for integer -multiplication, `mpz_mul', can be used like this: `mpz_mul (x, x, x)'. -This computes the square of X and puts the result back in X. - - Before you can assign to an MP variable, you need to initialize it -by calling one of the special initialization functions. When you're -done with a variable, you need to clear it out, using one of the -functions for that purpose. Which function to use depends on the type -of variable. See the chapters on integer functions, rational number -functions, and floating-point functions for details. - - A variable should only be initialized once, or at least cleared out -between each initialization. After a variable has been initialized, it -may be assigned to any number of times. - - For efficiency reasons, avoid to initialize and clear out a variable -in loops. Instead, initialize it before entering the loop, and clear -it out after the loop has exited. - - You don't need to be concerned about allocating additional space for -MP variables. All functions in MP automatically allocate additional -space when a variable does not already have enough space. They do not, -however, reduce the space when a smaller number is stored in the -object. Most of the time, this policy is best, since it avoids -frequent re-allocation. - -Useful Macros and Constants -=========================== - - - Global Constant: const int mp_bits_per_limb - The number of bits per limb. - - - Macro: __GNU_MP_VERSION - - Macro: __GNU_MP_VERSION_MINOR - The major and minor MP version, respectively, as integers. - -Compatibility with Version 1.x -============================== - - This version of MP is upward compatible with previous versions of -MP, with a few exceptions. - - 1. Integer division functions round the result differently. The old - functions (`mpz_div', `mpz_divmod', `mpz_mdiv', `mpz_mdivmod', - etc) now all use floor rounding (i.e., they round the quotient to - -infinity). There are a lot of new functions for integer - division, giving the user better control over the rounding. - - 2. The function `mpz_mod' now compute the true *mod* function. - - 3. The functions `mpz_powm' and `mpz_powm_ui' now use *mod* for - reduction. - - 4. The assignment functions for rational numbers do no longer - canonicalize their results. In the case a non-canonical result - could arise from an assignment, the user need to insert an - explicit call to `mpq_canonicalize'. This change was made for - efficiency. - - 5. Output generated by `mpz_out_raw' in this release cannot be read - by `mpz_inp_raw' in previous releases. This change was made for - making the file format truly portable between machines with - different word sizes. - - 6. Several `mpn' functions have changed. But they were intentionally - undocumented in previous releases. - - 7. The functions `mpz_cmp_ui', `mpz_cmp_si', and `mpq_cmp_ui' are now - implementated as macros, and thereby sometimes evaluate their - arguments multiple times. - - 8. The functions `mpz_pow_ui' and `mpz_ui_pow_ui' now yield 1 for - 0^0. (In version 1, they yielded 0.) - - -Getting the Latest Version of MP -================================ - - The latest version of the MP library is available by anonymous ftp -from from `prep.ai.mit.edu'. The file name is -`/pub/gnu/gmp-M.N.tar.gz'. Many sites around the world mirror `prep'; -please use a mirror site near you. - - -File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: MP Basics, Up: Top - -Reporting Bugs -************** - - If you think you have found a bug in the MP library, please -investigate it and report it. We have made this library available to -you, and it is not to ask too much from you, to ask you to report the -bugs that you find. - - There are a few things you should think about when you put your bug -report together. - - You have to send us a test case that makes it possible for us to -reproduce the bug. Include instructions on how to run the test case. - - You also have to explain what is wrong; if you get a crash, or if -the results printed are incorrect and in that case, in what way. - - It is not uncommon that an observed problem is actually due to a bug -in the compiler used when building MP; the MP code tends to explore -interesting corners in compilers. Therefore, please include compiler -version information in your bug report. This can be extracted using -`what `which cc`', or, if you're using gcc, `gcc -v'. Also, include -the output from `uname -a'. - - If your bug report is good, we will do our best to help you to get a -corrected version of the library; if the bug report is poor, we won't -do anything about it (aside of chiding you to send better bug reports). - - Send your bug report to: `bug-gmp@prep.ai.mit.edu'. - - If you think something in this manual is unclear, or downright -incorrect, or if the language needs to be improved, please send a note -to the same address. - - -File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top - -Integer Functions -***************** - - This chapter describes the MP functions for performing integer -arithmetic. These functions start with the prefix `mpz_'. - - Arbitrary precision integers are stored in objects of type `mpz_t'. - -* Menu: - -* Initializing Integers:: -* Assigning Integers:: -* Simultaneous Integer Init & Assign:: -* Converting Integers:: -* Integer Arithmetic:: -* Comparison Functions:: -* Integer Logic and Bit Fiddling:: -* I/O of Integers:: -* Miscellaneous Integer Functions:: - - -File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Up: Integer Functions - -Initialization and Assignment Functions -======================================= - - The functions for integer arithmetic assume that all integer objects -are initialized. You do that by calling the function `mpz_init'. - - - Function: void mpz_init (mpz_t INTEGER) - Initialize INTEGER with limb space and set the initial numeric - value to 0. Each variable should normally only be initialized - once, or at least cleared out (using `mpz_clear') between each - initialization. - - Here is an example of using `mpz_init': - - { - mpz_t integ; - mpz_init (integ); - ... - mpz_add (integ, ...); - ... - mpz_sub (integ, ...); - - /* Unless the program is about to exit, do ... */ - mpz_clear (integ); - } - -As you can see, you can store new values any number of times, once an -object is initialized. - - - Function: void mpz_clear (mpz_t INTEGER) - Free the limb space occupied by INTEGER. Make sure to call this - function for all `mpz_t' variables when you are done with them. - - - Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) - Change the limb space allocation to NEW_ALLOC limbs. This - function is not normally called from user code, but it can be used - to give memory back to the heap, or to increase the space of a - variable to avoid repeated automatic re-allocation. - - - Function: void mpz_array_init (mpz_t INTEGER_ARRAY[], size_t - ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) - Allocate *fixed* limb space for all ARRAY_SIZE integers in - INTEGER_ARRAY. The fixed allocation for each integer in the array - is enough to store FIXED_NUM_BITS. If the fixed space will be - insufficient for storing the result of a subsequent calculation, - the result is unpredictable. - - This function is useful for decreasing the working set for some - algorithms that use large integer arrays. - - There is no way to de-allocate the storage allocated by this - function. Don't call `mpz_clear'! - - -File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions - -Assignment Functions --------------------- - - These functions assign new values to already initialized integers -(*note Initializing Integers::.). - - - Function: void mpz_set (mpz_t ROP, mpz_t OP) - - Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) - - Function: void mpz_set_si (mpz_t ROP, signed long int OP) - - Function: void mpz_set_d (mpz_t ROP, double OP) - - Function: void mpz_set_q (mpz_t ROP, mpq_t OP) - - Function: void mpz_set_f (mpz_t ROP, mpf_t OP) - Set the value of ROP from OP. - - - Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE) - Set the value of ROP from STR, a '\0'-terminated C string in base - BASE. White space is allowed in the string, and is simply - ignored. The base may vary from 2 to 36. If BASE is 0, the - actual base is determined from the leading characters: if the - first two characters are `0x' or `0X', hexadecimal is assumed, - otherwise if the first character is `0', octal is assumed, - otherwise decimal is assumed. - - This function returns 0 if the entire string up to the '\0' is a - valid number in base BASE. Otherwise it returns -1. - - -File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions - -Combined Initialization and Assignment Functions ------------------------------------------------- - - For convenience, MP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpz_init_set...' - - Here is an example of using one: - - { - mpz_t pie; - mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); - ... - mpz_sub (pie, ...); - ... - mpz_clear (pie); - } - -Once the integer has been initialized by any of the `mpz_init_set...' -functions, it can be used as the source or destination operand for the -ordinary integer functions. Don't use an initialize-and-set function -on a variable already initialized! - - - Function: void mpz_init_set (mpz_t ROP, mpz_t OP) - - Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) - - Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) - - Function: void mpz_init_set_d (mpz_t ROP, double OP) - Initialize ROP with limb space and set the initial numeric value - from OP. - - - Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE) - Initialize ROP and set its value like `mpz_set_str' (see its - documentation above for details). - - If the string is a correct base BASE number, the function returns - 0; if an error occurs it returns -1. ROP is initialized even if - an error occurs. (I.e., you have to call `mpz_clear' for it.) - - -File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions - -Conversion Functions -==================== - - This section describes functions for converting arbitrary precision -integers to standard C types. Functions for converting *to* arbitrary -precision integers are described in *Note Assigning Integers:: and -*Note I/O of Integers::. - - - Function: unsigned long int mpz_get_ui (mpz_t OP) - Return the least significant part from OP. This function combined - with - `mpz_tdiv_q_2exp(..., OP, CHAR_BIT*sizeof(unsigned long int))' can - be used to extract the limbs of an integer. - - - Function: signed long int mpz_get_si (mpz_t OP) - If OP fits into a `signed long int' return the value of OP. - Otherwise return the least significant part of OP, with the same - sign as OP. - - If OP is too large to fit in a `signed long int', the returned - result is probably not very useful. - - - Function: double mpz_get_d (mpz_t OP) - Convert OP to a double. - - - Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP) - Convert OP to a string of digits in base BASE. The base may vary - from 2 to 36. - - If STR is NULL, space for the result string is allocated using the - default allocation function, and a pointer to the string is - returned. - - If STR is not NULL, it should point to a block of storage enough - large for the result. To find out the right amount of space to - provide for STR, use `mpz_sizeinbase (OP, BASE) + 2'. The two - extra bytes are for a possible minus sign, and for the terminating - null character. - - -File: gmp.info, Node: Integer Arithmetic, Next: Comparison Functions, Prev: Converting Integers, Up: Integer Functions - -Arithmetic Functions -==================== - - - Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 + OP2. - - - Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 - OP2. - - - Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 times OP2. - - - Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 times 2 raised to OP2. This operation can also be - defined as a left shift, OP2 steps. - - - Function: void mpz_neg (mpz_t ROP, mpz_t OP) - Set ROP to -OP. - - - Function: void mpz_abs (mpz_t ROP, mpz_t OP) - Set ROP to the absolute value of OP. - - - Function: void mpz_fac_ui (mpz_t ROP, unsigned long int OP) - Set ROP to OP!, the factorial of OP. - -Division functions ------------------- - - Division is undefined if the divisor is zero, and passing a zero -divisor to the divide or modulo functions, as well passing a zero mod -argument to the `mpz_powm' and `mpz_powm_ui' functions, will make these -functions intentionally divide by zero. This gives the user the -possibility to handle arithmetic exceptions in these functions in the -same manner as other arithmetic exceptions. - - There are three main groups of division functions: - * Functions that truncate the quotient towards 0. The names of these - functions start with `mpz_tdiv'. The `t' in the name is short for - `truncate'. - - * Functions that round the quotient towards -infinity. The names of - these routines start with `mpz_fdiv'. The `f' in the name is - short for `floor'. - - * Functions that round the quotient towards +infinity. The names of - these routines start with `mpz_cdiv'. The `c' in the name is - short for `ceil'. - - For each rounding mode, there are a couple of variants. Here `q' -means that the quotient is computed, while `r' means that the remainder -is computed. Functions that compute both the quotient and remainder -have `qr' in the name. - - - Function: void mpz_tdiv_q (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: void mpz_tdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to [OP1/OP2]. The quotient is truncated towards 0. - - - Function: void mpz_tdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: void mpz_tdiv_r_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to (OP1 - [OP1/OP2] * OP2). Unless the remainder is zero, - it has the same sign as the dividend. - - - Function: void mpz_tdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t - OP2) - - Function: void mpz_tdiv_qr_ui (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, - unsigned long int OP2) - Divide OP1 by OP2 and put the quotient in ROP1 and the remainder - in ROP2. The quotient is rounded towards 0. Unless the remainder - is zero, it has the same sign as the dividend. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - - Function: void mpz_fdiv_q (mpz_t ROP1, mpz_t OP1, mpz_t OP2) - - Function: void mpz_fdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to OP1/OP2. The quotient is rounded towards -infinity. - - - Function: void mpz_fdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: unsigned long int mpz_fdiv_r_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Divide OP1 by OP2 and put the remainder in ROP. Unless the - remainder is zero, it has the same sign as the divisor. - - For `mpz_fdiv_r_ui' the remainder is small enough to fit in an - `unsigned long int', and is therefore returned. - - - Function: void mpz_fdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t - OP2) - - Function: unsigned long int mpz_fdiv_qr_ui (mpz_t ROP1, mpz_t ROP2, - mpz_t OP1, unsigned long int OP2) - Divide OP1 by OP2 and put the quotient in ROP1 and the remainder - in ROP2. The quotient is rounded towards -infinity. Unless the - remainder is zero, it has the same sign as the divisor. - - For `mpz_fdiv_qr_ui' the remainder is small enough to fit in an - `unsigned long int', and is therefore returned. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - - Function: unsigned long int mpz_fdiv_ui (mpz_t OP1, unsigned long - int OP2) - This function is similar to `mpz_fdiv_r_ui', but the remainder is - only returned; it is not stored anywhere. - - - Function: void mpz_cdiv_q (mpz_t ROP1, mpz_t OP1, mpz_t OP2) - - Function: void mpz_cdiv_q_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to OP1/OP2. The quotient is rounded towards +infinity. - - - Function: void mpz_cdiv_r (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: unsigned long int mpz_cdiv_r_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Divide OP1 by OP2 and put the remainder in ROP. Unless the - remainder is zero, it has the opposite sign as the divisor. - - For `mpz_cdiv_r_ui' the negated remainder is small enough to fit - in an `unsigned long int', and it is therefore returned. - - - Function: void mpz_cdiv_qr (mpz_t ROP1, mpz_t ROP2, mpz_t OP1, mpz_t - OP2) - - Function: unsigned long int mpz_cdiv_qr_ui (mpz_t ROP1, mpz_t ROP2, - mpz_t OP1, unsigned long int OP2) - Divide OP1 by OP2 and put the quotient in ROP1 and the remainder - in ROP2. The quotient is rounded towards +infinity. Unless the - remainder is zero, it has the opposite sign as the divisor. - - For `mpz_cdiv_qr_ui' the negated remainder is small enough to fit - in an `unsigned long int', and it is therefore returned. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - - Function: unsigned long int mpz_cdiv_ui (mpz_t OP1, unsigned long - int OP2) - Return the negated remainder, similar to `mpz_cdiv_r_ui'. (The - difference is that this function doesn't store the remainder - anywhere.) - - - Function: void mpz_mod (mpz_t ROP, mpz_t OP1, mpz_t OP2) - - Function: unsigned long int mpz_mod_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Set ROP to OP1 `mod' OP2. The sign of the divisor is ignored, and - the result is always non-negative. - - For `mpz_mod_ui' the remainder is small enough to fit in an - `unsigned long int', and is therefore returned. - - - Function: void mpz_divexact (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1/OP2. This function produces correct results only - when it is known in advance that OP2 divides OP1. - - Since mpz_divexact is much faster than any of the other routines - that produce the quotient (*note References::. Jebelean), it is - the best choice for instances in which exact division is known to - occur, such as reducing a rational to lowest terms. - - - Function: void mpz_tdiv_q_2exp (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to OP1 divided by 2 raised to OP2. The quotient is - rounded towards 0. - - - Function: void mpz_tdiv_r_2exp (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Divide OP1 by (2 raised to OP2) and put the remainder in ROP. - Unless it is zero, ROP will have the same sign as OP1. - - - Function: void mpz_fdiv_q_2exp (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to OP1 divided by 2 raised to OP2. The quotient is - rounded towards -infinity. - - - Function: void mpz_fdiv_r_2exp (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Divide OP1 by (2 raised to OP2) and put the remainder in ROP. The - sign of ROP will always be positive. - - This operation can also be defined as masking of the OP2 least - significant bits. - -Exponentialization Functions ----------------------------- - - - Function: void mpz_powm (mpz_t ROP, mpz_t BASE, mpz_t EXP, mpz_t MOD) - - Function: void mpz_powm_ui (mpz_t ROP, mpz_t BASE, unsigned long int - EXP, mpz_t MOD) - Set ROP to (BASE raised to EXP) `mod' MOD. If EXP is negative, - the result is undefined. - - - Function: void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int - EXP) - - Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, - unsigned long int EXP) - Set ROP to BASE raised to EXP. The case of 0^0 yields 1. - -Square Root Functions ---------------------- - - - Function: void mpz_sqrt (mpz_t ROP, mpz_t OP) - Set ROP to the truncated integer part of the square root of OP. - - - Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, mpz_t OP) - Set ROP1 to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set ROP2 to OP-ROP1*ROP1, (i.e., zero if OP is a - perfect square). - - If ROP1 and ROP2 are the same variable, the results are undefined. - - - Function: int mpz_perfect_square_p (mpz_t OP) - Return non-zero if OP is a perfect square, i.e., if the square - root of OP is an integer. Return zero otherwise. - -Number Theoretic Functions --------------------------- - - - Function: int mpz_probab_prime_p (mpz_t OP, int REPS) - If this function returns 0, OP is definitely not prime. If it - returns 1, then OP is `probably' prime. The probability of a - false positive is (1/4)**REPS. A reasonable value of reps is 25. - - An implementation of the probabilistic primality test found in - Seminumerical Algorithms (*note References::. Knuth). - - - Function: void mpz_gcd (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to the greatest common divisor of OP1 and OP2. - - - Function: unsigned long int mpz_gcd_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Compute the greatest common divisor of OP1 and OP2. If ROP is not - NULL, store the result there. - - If the result is small enough to fit in an `unsigned long int', it - is returned. If the result does not fit, 0 is returned, and the - result is equal to the argument OP1. Note that the result will - always fit if OP2 is non-zero. - - - Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, mpz_t A, mpz_t - B) - Compute G, S, and T, such that AS + BT = G = `gcd' (A, B). If T is - NULL, that argument is not computed. - - - Function: int mpz_invert (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Compute the inverse of OP1 modulo OP2 and put the result in ROP. - Return non-zero if an inverse exist, zero otherwise. When the - function returns zero, do not assume anything about the value in - ROP. - - - Function: int mpz_jacobi (mpz_t OP1, mpz_t OP2) - - Function: int mpz_legendre (mpz_t OP1, mpz_t OP2) - Compute the Jacobi and Legendre symbols, respectively. - - -File: gmp.info, Node: Comparison Functions, Next: Integer Logic and Bit Fiddling, Prev: Integer Arithmetic, Up: Integer Functions - -Comparison Functions -==================== - - - Function: int mpz_cmp (mpz_t OP1, mpz_t OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - - Macro: int mpz_cmp_ui (mpz_t OP1, unsigned long int OP2) - - Macro: int mpz_cmp_si (mpz_t OP1, signed long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - These functions are actually implemented as macros. They evaluate - their arguments multiple times. - - - Macro: int mpz_sgn (mpz_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates its - arguments multiple times. - - -File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Comparison Functions, Up: Integer Functions - -Logical and Bit Manipulation Functions -====================================== - - These functions behave as if two's complement arithmetic were used -(although sign-magnitude is used by the actual implementation). - - - Function: void mpz_and (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 logical-and OP2. - - - Function: void mpz_ior (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 inclusive-or OP2. - - - Function: void mpz_com (mpz_t ROP, mpz_t OP) - Set ROP to the one's complement of OP. - - - Function: unsigned long int mpz_popcount (mpz_t OP) - For non-negative numbers, return the population count of OP. For - negative numbers, return the largest possible value (MAX_ULONG). - - - Function: unsigned long int mpz_hamdist (mpz_t OP1, mpz_t OP2) - If OP1 and OP2 are both non-negative, return the hamming distance - between the two operands. Otherwise, return the largest possible - value (MAX_ULONG). - - It is possible to extend this function to return a useful value - when the operands are both negative, but the current - implementation returns MAX_ULONG in this case. *Do not depend on - this behavior, since it will change in future versions of the - library.* - - - Function: unsigned long int mpz_scan0 (mpz_t OP, unsigned long int - STARTING_BIT) - Scan OP, starting with bit STARTING_BIT, towards more significant - bits, until the first clear bit is found. Return the index of the - found bit. - - - Function: unsigned long int mpz_scan1 (mpz_t OP, unsigned long int - STARTING_BIT) - Scan OP, starting with bit STARTING_BIT, towards more significant - bits, until the first set bit is found. Return the index of the - found bit. - - - Function: void mpz_setbit (mpz_t ROP, unsigned long int BIT_INDEX) - Set bit BIT_INDEX in OP1. - - - Function: void mpz_clrbit (mpz_t ROP, unsigned long int BIT_INDEX) - Clear bit BIT_INDEX in OP1. - - -File: gmp.info, Node: I/O of Integers, Next: Miscellaneous Integer Functions, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions - -Input and Output Functions -========================== - - Functions that perform input from a stdio stream, and functions that -output to a stdio stream. Passing a NULL pointer for a STREAM argument -to any of these functions will make them read from `stdin' and write to -`stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - - Function: size_t mpz_out_str (FILE *STREAM, int BASE, mpz_t OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base may vary from 2 to 36. - - Return the number of bytes written, or if an error occurred, - return 0. - - - Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) - Input a possibly white-space preceded string in base BASE from - stdio stream STREAM, and put the read integer in ROP. The base - may vary from 2 to 36. If BASE is 0, the actual base is - determined from the leading characters: if the first two - characters are `0x' or `0X', hexadecimal is assumed, otherwise if - the first character is `0', octal is assumed, otherwise decimal is - assumed. - - Return the number of bytes read, or if an error occurred, return 0. - - - Function: size_t mpz_out_raw (FILE *STREAM, mpz_t OP) - Output OP on stdio stream STREAM, in raw binary format. The - integer is written in a portable format, with 4 bytes of size - information, and that many bytes of limbs. Both the size and the - limbs are written in decreasing significance order (i.e., in - big-endian). - - The output can be read with `mpz_inp_raw'. - - Return the number of bytes written, or if an error occurred, - return 0. - - The output of this can not be read by `mpz_inp_raw' from GMP 1, - because of changes necessary for compatibility between 32-bit and - 64-bit machines. - - - Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) - Input from stdio stream STREAM in the format written by - `mpz_out_raw', and put the result in ROP. Return the number of - bytes read, or if an error occurred, return 0. - - This routine can read the output from `mpz_out_raw' also from GMP - 1, in spite of changes necessary for compatibility between 32-bit - and 64-bit machines. - - -File: gmp.info, Node: Miscellaneous Integer Functions, Prev: I/O of Integers, Up: Integer Functions - -Miscellaneous Functions -======================= - - - Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs. The generated - random number doesn't satisfy any particular requirements of - randomness. Negative random numbers are generated when MAX_SIZE - is negative. - - - Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. Useful - for testing functions and algorithms, since this kind of random - numbers have proven to be more likely to trigger corner-case bugs. - Negative random numbers are generated when MAX_SIZE is negative. - - - Function: size_t mpz_size (mpz_t OP) - Return the size of OP measured in number of limbs. If OP is zero, - the returned value will be zero. - - *This function is obsolete. It will disappear from future MP - releases.* - - - Function: size_t mpz_sizeinbase (mpz_t OP, int BASE) - Return the size of OP measured in number of digits in base BASE. - The base may vary from 2 to 36. The returned value will be exact - or 1 too big. If BASE is a power of 2, the returned value will - always be exact. - - This function is useful in order to allocate the right amount of - space before converting OP to a string. The right amount of - allocation is normally two more than the value returned by - `mpz_sizeinbase' (one extra for a minus sign and one for the - terminating '\0'). - - -File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top - -Rational Number Functions -************************* - - This chapter describes the MP functions for performing arithmetic on -rational numbers. These functions start with the prefix `mpq_'. - - Rational numbers are stored in objects of type `mpq_t'. - - All rational arithmetic functions assume operands have a canonical -form, and canonicalize their result. The canonical from means that the -denominator and the numerator have no common factors, and that the -denominator is positive. Zero has the unique representation 0/1. - - Pure assignment functions do not canonicalize the assigned variable. -It is the responsibility of the user to canonicalize the assigned -variable before any arithmetic operations are performed on that -variable. *Note that this is an incompatible change from version 1 of -the library.* - - - Function: void mpq_canonicalize (mpq_t OP) - Remove any factors that are common to the numerator and - denominator of OP, and make the denominator positive. - -* Menu: - -* Initializing Rationals:: -* Assigning Rationals:: -* Simultaneous Integer Init & Assign:: -* Comparing Rationals:: -* Applying Integer Functions:: -* Miscellaneous Rational Functions:: - - -File: gmp.info, Node: Initializing Rationals, Next: Assigning Rationals, Prev: Rational Number Functions, Up: Rational Number Functions - -Initialization and Assignment Functions -======================================= - - - Function: void mpq_init (mpq_t DEST_RATIONAL) - Initialize DEST_RATIONAL and set it to 0/1. Each variable should - normally only be initialized once, or at least cleared out (using - the function `mpq_clear') between each initialization. - - - Function: void mpq_clear (mpq_t RATIONAL_NUMBER) - Free the space occupied by RATIONAL_NUMBER. Make sure to call this - function for all `mpq_t' variables when you are done with them. - - - Function: void mpq_set (mpq_t ROP, mpq_t OP) - - Function: void mpq_set_z (mpq_t ROP, mpz_t OP) - Assign ROP from OP. - - - Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, - unsigned long int OP2) - - Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned - long int OP2) - Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have - common factors, ROP has to be passed to `mpq_canonicalize' before - any operations are performed on ROP. - - -File: gmp.info, Node: Assigning Rationals, Next: Comparing Rationals, Prev: Initializing Rationals, Up: Rational Number Functions - -Arithmetic Functions -==================== - - - Function: void mpq_add (mpq_t SUM, mpq_t ADDEND1, mpq_t ADDEND2) - Set SUM to ADDEND1 + ADDEND2. - - - Function: void mpq_sub (mpq_t DIFFERENCE, mpq_t MINUEND, mpq_t - SUBTRAHEND) - Set DIFFERENCE to MINUEND - SUBTRAHEND. - - - Function: void mpq_mul (mpq_t PRODUCT, mpq_t MULTIPLIER, mpq_t - MULTIPLICAND) - Set PRODUCT to MULTIPLIER times MULTIPLICAND. - - - Function: void mpq_div (mpq_t QUOTIENT, mpq_t DIVIDEND, mpq_t - DIVISOR) - Set QUOTIENT to DIVIDEND/DIVISOR. - - - Function: void mpq_neg (mpq_t NEGATED_OPERAND, mpq_t OPERAND) - Set NEGATED_OPERAND to -OPERAND. - - - Function: void mpq_inv (mpq_t INVERTED_NUMBER, mpq_t NUMBER) - Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, - this routine will divide by zero. - - -File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Assigning Rationals, Up: Rational Number Functions - -Comparison Functions -==================== - - - Function: int mpq_cmp (mpq_t OP1, mpq_t OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - To determine if two rationals are equal, `mpq_equal' is faster than - `mpq_cmp'. - - - Macro: int mpq_cmp_ui (mpq_t OP1, unsigned long int NUM2, unsigned - long int DEN2) - Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > - NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < - NUM2/DEN2. - - This routine allows that NUM2 and DEN2 have common factors. - - This function is actually implemented as a macro. It evaluates its - arguments multiple times. - - - Macro: int mpq_sgn (mpq_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates its - arguments multiple times. - - - Function: int mpq_equal (mpq_t OP1, mpq_t OP2) - Return non-zero if OP1 and OP2 are equal, zero if they are - non-equal. Although `mpq_cmp' can be used for the same purpose, - this function is much faster. - - -File: gmp.info, Node: Applying Integer Functions, Next: Miscellaneous Rational Functions, Prev: Comparing Rationals, Up: Rational Number Functions - -Applying Integer Functions to Rationals -======================================= - - The set of `mpq' functions is quite small. In particular, there are -no functions for either input or output. But there are two macros that -allow us to apply any `mpz' function on the numerator or denominator of -a rational number. If these macros are used to assign to the rational -number, `mpq_canonicalize' normally need to be called afterwards. - - - Macro: mpz_t mpq_numref (mpq_t OP) - - Macro: mpz_t mpq_denref (mpq_t OP) - Return a reference to the numerator and denominator of OP, - respectively. The `mpz' functions can be used on the result of - these macros. - - -File: gmp.info, Node: Miscellaneous Rational Functions, Prev: Applying Integer Functions, Up: Rational Number Functions - -Miscellaneous Functions -======================= - - - Function: double mpq_get_d (mpq_t OP) - Convert OP to a double. - - These functions assign between either the numerator or denominator -of a rational, and an integer. Instead of using these functions, it is -preferable to use the more general mechanisms `mpq_numref' and -`mpq_denref', together with `mpz_set'. - - - Function: void mpq_set_num (mpq_t RATIONAL, mpz_t NUMERATOR) - Copy NUMERATOR to the numerator of RATIONAL. When this risks to - make the numerator and denominator of RATIONAL have common - factors, you have to pass RATIONAL to `mpq_canonicalize' before - any operations are performed on RATIONAL. - - This function is equivalent to `mpz_set (mpq_numref (RATIONAL), - NUMERATOR)'. - - - Function: void mpq_set_den (mpq_t RATIONAL, mpz_t DENOMINATOR) - Copy DENOMINATOR to the denominator of RATIONAL. When this risks - to make the numerator and denominator of RATIONAL have common - factors, or if the denominator might be negative, you have to pass - RATIONAL to `mpq_canonicalize' before any operations are performed - on RATIONAL. - - *In version 1 of the library, negative denominators were handled by - copying the sign to the numerator. That is no longer done.* - - This function is equivalent to `mpz_set (mpq_denref (RATIONAL), - DENOMINATORS)'. - - - Function: void mpq_get_num (mpz_t NUMERATOR, mpq_t RATIONAL) - Copy the numerator of RATIONAL to the integer NUMERATOR, to - prepare for integer operations on the numerator. - - This function is equivalent to `mpz_set (NUMERATOR, mpq_numref - (RATIONAL))'. - - - Function: void mpq_get_den (mpz_t DENOMINATOR, mpq_t RATIONAL) - Copy the denominator of RATIONAL to the integer DENOMINATOR, to - prepare for integer operations on the denominator. - - This function is equivalent to `mpz_set (DENOMINATOR, mpq_denref - (RATIONAL))'. - -- cgit v1.1