| version 1.1.1.1, 2000/01/10 15:35:21 |
version 1.1.1.2, 2000/09/09 14:12:11 |
|
|
| |
|
| THE GNU MP LIBRARY |
THE GNU MP LIBRARY |
| |
|
| |
|
| GNU MP is a library for arbitrary precision arithmetic, operating on signed |
GNU MP is a library for arbitrary precision arithmetic, operating on signed |
| integers, rational numbers, and floating point numbers. It has a rich set |
integers, rational numbers, and floating point numbers. It has a rich set of |
| of functions, and the functions have a regular interface. |
functions, and the functions have a regular interface. |
| |
|
| GNU MP is designed to be as fast as possible, both for small operands and for |
GNU MP is designed to be as fast as possible, both for small operands and huge |
| huge operands. The speed is achieved by using fullwords as the basic |
operands. The speed is achieved by using fullwords as the basic arithmetic |
| arithmetic type, by using fast algorithms, by carefully optimized assembly |
type, by using fast algorithms, with carefully optimized assembly code for the |
| code for the most common inner loops for a lots of CPUs, and by a general |
most common inner loops for lots of CPUs, and by a general emphasis on speed |
| emphasis on speed (instead of simplicity or elegance). |
(instead of simplicity or elegance). |
| |
|
| The speed of GNU MP is believed to be faster than any other similar library. |
GNU MP is believed to be faster than any other similar library. Its advantage |
| The advantage for GNU MP increases with the operand sizes for certain |
increases with operand sizes for certain operations, since GNU MP in many |
| operations, since GNU MP in many cases has asymptotically faster algorithms. |
cases has asymptotically faster algorithms. |
| |
|
| |
GNU MP is free software and may be freely copied on the terms contained in the |
| |
files COPYING.LIB and COPYING (most of GNU MP is under the former, some under |
| |
the latter). |
| |
|
| GETTING STARTED |
|
| |
|
| First, you have to configure and compiler GNU MP. Simply typing |
|
| |
|
| ./configure; make |
|
| |
|
| will normally do a reasonable job, but will not give optimal library |
|
| execution speed. So unless you're very unpatient, please read the detailed |
|
| instructions in the file INSTALL or in gmp.texi. |
|
| |
|
| Once you have compiled the library, you should write some small example, and |
|
| make sure you can compile them. A typical compilation command is this: |
|
| |
|
| gcc -g your-file.c -I<gmp-source-dir> <gmp-bin-dir>libgmp.a -lm |
|
| |
|
| If you have installed the library, you can simply do: |
|
| |
|
| gcc -g your-file.c -lgmp -lm |
|
| |
|
| The -lm is normally not needed, since only a few functions in GNU MP use the |
|
| math library. |
|
| |
|
| Here is a sample program that declares 2 variables, initializes them as |
|
| required, and sets one of them from a signed integer, and the other from a |
|
| string of digits. It then prints the product of the two numbers in base 10. |
|
| |
|
| #include <stdio.h> |
|
| #include "gmp.h" |
|
| |
|
| main () |
|
| { |
|
| mpz_t a, b, p; |
|
| |
|
| mpz_init (a); /* initialize variables */ |
|
| mpz_init (b); |
|
| mpz_init (p); |
|
| |
|
| mpz_set_si (a, 756839); /* assign variables */ |
|
| mpz_set_str (b, "314159265358979323846", 0); |
|
| mpz_mul (p, a, b); /* generate product */ |
|
| mpz_out_str (stdout, 10, p); /* print number without newline */ |
|
| puts (""); /* print newline */ |
|
| |
|
| mpz_clear (a); /* clear out variables */ |
|
| mpz_clear (b); |
|
| mpz_clear (p); |
|
| |
|
| exit (0); |
|
| } |
|
| |
|
| This might look tedious, with all initializing and clearing. Fortunately |
|
| some of these operations can be combined, and other operations can often be |
|
| avoided. The example above would be written differently by an experienced |
|
| GNU MP user: |
|
| |
|
| #include <stdio.h> |
|
| #include "gmp.h" |
|
| |
|
| main () |
|
| { |
|
| mpz_t b, p; |
|
| |
|
| mpz_init (p); |
|
| |
|
| mpz_init_set_str (b, "314159265358979323846", 0); |
|
| mpz_mul_ui (p, b, 756839); /* generate product */ |
|
| mpz_out_str (stdout, 10, p); /* print number without newline */ |
|
| puts (""); /* print newline */ |
|
| |
|
| exit (0); |
|
| } |
|
| |
|
| |
|
| OVERVIEW OF GNU MP |
OVERVIEW OF GNU MP |
| |
|
| There are five classes of functions in GNU MP. |
There are five classes of functions in GNU MP. |
| |
|
| 1. Signed integer arithmetic functions, mpz_*. These functions are intended |
1. Signed integer arithmetic functions (mpz). These functions are intended |
| to be easy to use, with their regular interface. The associated type is |
to be easy to use, with their regular interface. The associated type is |
| `mpz_t'. |
`mpz_t'. |
| |
|
| 2. Rational arithmetic functions, mpq_*. For now, just a small set of |
2. Rational arithmetic functions (mpq). For now, just a small set of |
| functions necessary for basic rational arithmetics. The associated type |
functions necessary for basic rational arithmetics. The associated type |
| is `mpq_t'. |
is `mpq_t'. |
| |
|
| 3. Floating-point arithmetic functions, mpf_*. If the C type `double' |
3. Floating-point arithmetic functions (mpf). If the C type `double' |
| doesn't give enough precision for your application, declare your |
doesn't give enough precision for your application, declare your |
| variables as `mpf_t' instead, set the precision to any number desired, |
variables as `mpf_t' instead, set the precision to any number desired, |
| and call the functions in the mpf class for the arithmetic operations. |
and call the functions in the mpf class for the arithmetic operations. |
| |
|
| 4. Positive-integer, hard-to-use, very low overhead functions are in the |
4. Positive-integer, hard-to-use, very low overhead functions are in the |
| mpn_* class. No memory management is performed. The caller must ensure |
mpn class. No memory management is performed. The caller must ensure |
| enough space is available for the results. The set of functions is not |
enough space is available for the results. The set of functions is not |
| regular, nor is the calling interface. These functions accept input |
regular, nor is the calling interface. These functions accept input |
| arguments in the form of pairs consisting of a pointer to the least |
arguments in the form of pairs consisting of a pointer to the least |
| significant word, and a integral size telling how many limbs (= words) |
significant word, and an integral size telling how many limbs (= words) |
| the pointer points to. |
the pointer points to. |
| |
|
| Almost all calculations, in the entire package, are made by calling these |
Almost all calculations, in the entire package, are made by calling these |
| Line 128 printed. How to do that, as well how to build the lib |
|
| Line 61 printed. How to do that, as well how to build the lib |
|
| the INSTALL file in this directory. |
the INSTALL file in this directory. |
| |
|
| |
|
| |
|
| REPORTING BUGS |
REPORTING BUGS |
| |
|
| If you find a bug in the library, please make sure to tell us about it! |
If you find a bug in the library, please make sure to tell us about it! |
| |
|
| Report bugs and propose modifications and enhancements to |
You should first check the GNU MP web pages at http://www.swox.com/gmp/, |
| bug-gmp@prep.ai.mit.edu. What information is needed in a good bug report is |
under "Status of the current release". There will be patches for all known |
| described in the manual. |
serious bugs there. |
| |
|
| |
Report bugs to bug-gmp@gnu.org. What information is needed in a good bug |
| |
report is described in the manual. The same address can be used for |
| |
suggesting modifications and enhancements. |
| |
|
| |
|
| |
|
| |
|
| |
---------------- |
| |
Local variables: |
| |
mode: text |
| |
fill-column: 78 |
| |
End: |