[BACK]Return to README CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Annotation of OpenXM_contrib/gmp/README, Revision 1.1.1.1

1.1       maekawa     1:                        THE GNU MP LIBRARY
                      2:
                      3:
                      4: GNU MP is a library for arbitrary precision arithmetic, operating on signed
                      5: integers, rational numbers, and floating point numbers.  It has a rich set
                      6: of functions, and the functions have a regular interface.
                      7:
                      8: GNU MP is designed to be as fast as possible, both for small operands and for
                      9: huge operands.  The speed is achieved by using fullwords as the basic
                     10: arithmetic type, by using fast algorithms, by carefully optimized assembly
                     11: code for the most common inner loops for a lots of CPUs, and by a general
                     12: emphasis on speed (instead of simplicity or elegance).
                     13:
                     14: The speed of GNU MP is believed to be faster than any other similar library.
                     15: The advantage for GNU MP increases with the operand sizes for certain
                     16: operations, since GNU MP in many cases has asymptotically faster algorithms.
                     17:
                     18:
                     19:                        GETTING STARTED
                     20:
                     21: First, you have to configure and compiler GNU MP.  Simply typing
                     22:
                     23:        ./configure; make
                     24:
                     25: will normally do a reasonable job, but will not give optimal library
                     26: execution speed.  So unless you're very unpatient, please read the detailed
                     27: instructions in the file INSTALL or in gmp.texi.
                     28:
                     29: Once you have compiled the library, you should write some small example, and
                     30: make sure you can compile them.  A typical compilation command is this:
                     31:
                     32:        gcc -g your-file.c -I<gmp-source-dir> <gmp-bin-dir>libgmp.a -lm
                     33:
                     34: If you have installed the library, you can simply do:
                     35:
                     36:        gcc -g your-file.c -lgmp -lm
                     37:
                     38: The -lm is normally not needed, since only a few functions in GNU MP use the
                     39: math library.
                     40:
                     41: Here is a sample program that declares 2 variables, initializes them as
                     42: required, and sets one of them from a signed integer, and the other from a
                     43: string of digits.  It then prints the product of the two numbers in base 10.
                     44:
                     45:   #include <stdio.h>
                     46:   #include "gmp.h"
                     47:
                     48:   main ()
                     49:   {
                     50:     mpz_t a, b, p;
                     51:
                     52:     mpz_init (a);                      /* initialize variables */
                     53:     mpz_init (b);
                     54:     mpz_init (p);
                     55:
                     56:     mpz_set_si (a, 756839);            /* assign variables */
                     57:     mpz_set_str (b, "314159265358979323846", 0);
                     58:     mpz_mul (p, a, b);                 /* generate product */
                     59:     mpz_out_str (stdout, 10, p);       /* print number without newline */
                     60:     puts ("");                         /* print newline */
                     61:
                     62:     mpz_clear (a);                     /* clear out variables */
                     63:     mpz_clear (b);
                     64:     mpz_clear (p);
                     65:
                     66:     exit (0);
                     67:   }
                     68:
                     69: This might look tedious, with all initializing and clearing.  Fortunately
                     70: some of these operations can be combined, and other operations can often be
                     71: avoided.  The example above would be written differently by an experienced
                     72: GNU MP user:
                     73:
                     74:   #include <stdio.h>
                     75:   #include "gmp.h"
                     76:
                     77:   main ()
                     78:   {
                     79:     mpz_t b, p;
                     80:
                     81:     mpz_init (p);
                     82:
                     83:     mpz_init_set_str (b, "314159265358979323846", 0);
                     84:     mpz_mul_ui (p, b, 756839);         /* generate product */
                     85:     mpz_out_str (stdout, 10, p);       /* print number without newline */
                     86:     puts ("");                         /* print newline */
                     87:
                     88:     exit (0);
                     89:   }
                     90:
                     91:
                     92:                        OVERVIEW OF GNU MP
                     93:
                     94: There are five classes of functions in GNU MP.
                     95:
                     96:  1. Signed integer arithmetic functions, mpz_*.  These functions are intended
                     97:     to be easy to use, with their regular interface.  The associated type is
                     98:     `mpz_t'.
                     99:
                    100:  2. Rational arithmetic functions, mpq_*.  For now, just a small set of
                    101:     functions necessary for basic rational arithmetics.  The associated type
                    102:     is `mpq_t'.
                    103:
                    104:  3. Floating-point arithmetic functions, mpf_*.  If the C type `double'
                    105:     doesn't give enough precision for your application, declare your
                    106:     variables as `mpf_t' instead, set the precision to any number desired,
                    107:     and call the functions in the mpf class for the arithmetic operations.
                    108:
                    109:  4. Positive-integer, hard-to-use, very low overhead functions are in the
                    110:     mpn_* class.  No memory management is performed.  The caller must ensure
                    111:     enough space is available for the results.  The set of functions is not
                    112:     regular, nor is the calling interface.  These functions accept input
                    113:     arguments in the form of pairs consisting of a pointer to the least
                    114:     significant word, and a integral size telling how many limbs (= words)
                    115:     the pointer points to.
                    116:
                    117:     Almost all calculations, in the entire package, are made by calling these
                    118:     low-level functions.
                    119:
                    120:  5. Berkeley MP compatible functions.
                    121:
                    122:     To use these functions, include the file "mp.h".  You can test if you are
                    123:     using the GNU version by testing if the symbol __GNU_MP__ is defined.
                    124:
                    125: For more information on how to use GNU MP, please refer to the documentation.
                    126: It is composed from the file gmp.texi, and can be displayed on the screen or
                    127: printed.  How to do that, as well how to build the library, is described in
                    128: the INSTALL file in this directory.
                    129:
                    130:
                    131:                        REPORTING BUGS
                    132:
                    133: If you find a bug in the library, please make sure to tell us about it!
                    134:
                    135: Report bugs and propose modifications and enhancements to
                    136: bug-gmp@prep.ai.mit.edu.  What information is needed in a good bug report is
                    137: described in the manual.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>