diff options
Diffstat (limited to 'rts/gmp/INSTALL')
-rw-r--r-- | rts/gmp/INSTALL | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/rts/gmp/INSTALL b/rts/gmp/INSTALL new file mode 100644 index 0000000000..62faa1a2e3 --- /dev/null +++ b/rts/gmp/INSTALL @@ -0,0 +1,146 @@ + + INSTALLING GNU MP + ================= + + +These instructions are only for the impatient. Others should read the install +instructions in the manual, gmp.info. Use + + info -f ./gmp.info + +or in emacs + + C-u C-h i gmp.info + + +Here are some brief instructions on how to install GMP, and some examples to +help you get started using GMP. + +First, you need to compile, and optionally install, GMP. Since you're +impatient, try this: + + ./configure; make + +If that fails, or you care about the performance of GMP, you need to read the +full instructions in the chapter "Installing GMP", in the manual. + +Next, try some small test programs, for example the ones below. + +In GMP programs, all variables need to be initialized before they are +assigned, and cleared out before program flow leaves the scope in which they +were declared. Here is an example program that reads two numbers from the +command line, multiplies them, and prints the result to stdout. + + + #include <stdio.h> + #include <gmp.h> /* All GMP programs need to include gmp.h */ + + main (int argc, char **argv) + { + mpz_t a, b, p; + + if (argc != 3) + { printf ("Usage: %s <number> <number>\n", argv[0]); exit (1); } + + /* Initialize variables */ + mpz_init (a); + mpz_init (b); + mpz_init (p); + + /* Assign a and b from base 10 strings in argv */ + mpz_set_str (a, argv[1], 10); + mpz_set_str (b, argv[2], 10); + + /* Multiply a and b and put the result in p */ + mpz_mul (p, a, b); + + /* Print p in base 10 */ + mpz_out_str (stdout, 10, p); + fputc ('\n', stdout); + + /* Clear out variables */ + mpz_clear (a); + mpz_clear (b); + mpz_clear (p); + exit (0); + } + + +This might look tedious, with all the initializing and clearing. Fortunately +some of these operations can be combined, and other operations can often be +avoided. An experienced GMP user might write: + + + #include <stdio.h> + #include <gmp.h> + + main (int argc, char **argv) + { + mpz_t a, b, p; + + if (argc != 3) + { printf ("Usage: %s <number> <number>\n", argv[0]); exit (1); } + + /* Initialize and assign a and b from base 10 strings in argv */ + mpz_init_set_str (a, argv[1], 10); + mpz_init_set_str (b, argv[2], 10); + /* Initialize p */ + mpz_init (p); + + /* Multiply a and b and put the result in p */ + mpz_mul (p, a, b); + + /* Print p in base 10 */ + mpz_out_str (stdout, 10, p); + fputc ('\n', stdout); + + /* Since we're about to exit, no need to clear out variables */ + exit (0); + } + + +Now you have to compile your test program, and link it with the GMP library. +Assuming your working directory is still the gmp source directory, and your +source file is called example.c, enter: + + gcc -g -I. example.c .libs/libgmp.a + +After installing, the command becomes: "gcc -g example.c -lgmp". Also, GMP is +libtool based so you can use that to link if you want. + +Now try to run the example: + + ./a.out 98365871231256752134 319378318340103345227 + 31415926535897932384618573336104570964418 + +The functions used here all operate on signed integers, and have names +starting with "mpz_". There are many more such functions than used in these +examples. See the chapter "Integer Functions" in the manual, for a complete +list. + +There are two other main classes of functions in GMP. They operate on +rational numbers and floating-point numbers, respectively. The chapters +"Rational Number Functions", and "Floating-point Functions" document these +classes. + +To run a set of tests, do "make check". This will take a while. + +To create the printable documentation from the texinfo source, type "make +gmp.dvi" or "make gmp.ps". This requires various "tex" commands. + +To install the library, do "make install" (then you can use -lgmp instead of +.libs/libgmp.a). + +If you decide to use GMP, it is a good idea you at least read the chapter "GMP +Basics" in the manual. + +Some known build problems are noted in the "Installing GMP" chapter of +the manual. Please report other problems to bug-gmp@gnu.org. + + + +---------------- +Local variables: +mode: text +fill-column: 78 +End: |