151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| WELCOME TO FGMP.
 | ||
| 
 | ||
| FGMP is a public domain implementation of a subset of the GNU gmp library
 | ||
| with the same API. 
 | ||
| 
 | ||
| For instance, you can link the following trivial program with either 
 | ||
| this code, or libgmp.a and get the same results.
 | ||
| ------------
 | ||
| #include <stdio.h>
 | ||
| #include "gmp.h"
 | ||
| main()
 | ||
| {
 | ||
|     MP_INT a; MP_INT b; MP_INT c;
 | ||
| 
 | ||
|     mpz_init_set_ui(&a,1); mpz_init_set_ui(&b,2); mpz_init(&c);
 | ||
|     mpz_add(&c,&a,&b);
 | ||
|     printf("\n%s\n", mpz_get_str(NULL,10,&c));
 | ||
| }
 | ||
| 
 | ||
| ------------
 | ||
| 
 | ||
| FGMP is really in the public domain. You can do whatever you want with
 | ||
| it.
 | ||
| 
 | ||
| I wrote FGMP so that we would all have access to a (truly free)
 | ||
| implementation of this subset of the API of GNU libgmp. I encourage
 | ||
| everyone to distribute this as widely as possible.
 | ||
| 
 | ||
| If you need more documentation, I suggest you look at the file
 | ||
| gmp.texi which is included with the GNU gmp library. 
 | ||
| 
 | ||
| You can send me bug reports, implementations of missing functions, flames
 | ||
| and rants by Email. 
 | ||
| 
 | ||
| Any submissions of new code to be integrated into fgmp must also be 
 | ||
| placed in the public domain (For the particularly dense, you can 
 | ||
| release a new fgmp yourself under different licensing terms. This 
 | ||
| is a condition for including a submission in a release of FGMP that 
 | ||
| I personally prepare).
 | ||
| 
 | ||
| Mark Henderson <markh@wimsey.bc.ca>
 | ||
| 
 | ||
| ---
 | ||
| This is the fifth BETA release. 1.0b5
 | ||
| 
 | ||
| I hearby place this file and all of FGMP in the public domain.
 | ||
| 
 | ||
| Thanks to Paul Rouse <par@r-cube.demon.co.uk> for changes to get fgmp 
 | ||
| to work on a 286 MSDOS compiler, the functions mpz_sqrt and 
 | ||
| mpz_sqrtrem, plus other general bug fixes. 
 | ||
| 
 | ||
| Thanks also to Erick Gallesio <eg@kaolin.unice.fr> for a fix
 | ||
| to mpz_init_set_str
 | ||
| 
 | ||
| Define B64 if your "long" type is 64 bits. Otherwise we assume 32
 | ||
| bit longs. (The 64 bit version hasn't been tested enough)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| Platforms:
 | ||
| Linux 0.99 (gcc)
 | ||
| IBM RS6000/AIX 3.2 (IBM xlc compiler and gcc 2.3)
 | ||
| Sun OS 4.1, Sun 3/4
 | ||
| DEC Alpha OSF/1 (only lightly tested, 64 bit longs do make a difference,
 | ||
|     thanks to DEC for providing access via axposf.pa.dec.com). Define B64
 | ||
|     for this platform
 | ||
| MSDOS 286 C compiler (see credits above)
 | ||
| 
 | ||
| ---
 | ||
| Some differences between gmp and fgmp
 | ||
| 
 | ||
| 1. fgmp is considerably slower than gmp
 | ||
| 2. fgmp does not implement the following:
 | ||
|     all mpq_*
 | ||
|     internal mpn_* functions
 | ||
|     mpz_perfect_square_p
 | ||
|     mpz_inp_raw, mpz_out_raw
 | ||
|     mp_set_memory_functions, mpz_out_str, mpz_inp_str
 | ||
| 3. fgmp implements the following in addition to the routines in GNU gmp.
 | ||
|     int mpz_jacobi(MP_INT *a, MP_INT *b)
 | ||
|     - finds the jacobi symbol (a/b)
 | ||
| 4. mpz_sizeinbase often overestimates the exact value
 | ||
| 
 | ||
| 5. To convert your gmp based program to fgmp (subject to the
 | ||
| above)
 | ||
| 
 | ||
| - recompile your source. Make sure to include the gmp.h file included
 | ||
|   with fgmp rather than that included with gmp. (The point is to recompile
 | ||
|   all files which include gmp.h)
 | ||
| - link with gmp.o instead of libgmp.a
 | ||
| 
 | ||
| Here's a complete sorted list of function implemented in fgmp:
 | ||
| 
 | ||
| _mpz_realloc
 | ||
| mpz_abs
 | ||
| mpz_add
 | ||
| mpz_add_ui
 | ||
| mpz_and
 | ||
| mpz_clear
 | ||
| mpz_cmp
 | ||
| mpz_cmp_si
 | ||
| mpz_cmp_ui
 | ||
| mpz_div
 | ||
| mpz_div_2exp
 | ||
| mpz_div_ui
 | ||
| mpz_divmod
 | ||
| mpz_divmod_ui
 | ||
| mpz_fac_ui
 | ||
| mpz_gcd
 | ||
| mpz_gcdext
 | ||
| mpz_get_si
 | ||
| mpz_get_str
 | ||
| mpz_get_ui
 | ||
| mpz_init
 | ||
| mpz_init_set
 | ||
| mpz_init_set_si
 | ||
| mpz_init_set_str
 | ||
| mpz_init_set_ui
 | ||
| mpz_jacobi
 | ||
| mpz_mdiv
 | ||
| mpz_mdiv_ui
 | ||
| mpz_mdivmod
 | ||
| mpz_mdivmod_ui
 | ||
| mpz_mmod
 | ||
| mpz_mmod_ui
 | ||
| mpz_mod
 | ||
| mpz_mod_2exp
 | ||
| mpz_mod_ui
 | ||
| mpz_mul
 | ||
| mpz_mul_2exp
 | ||
| mpz_mul_ui
 | ||
| mpz_neg
 | ||
| mpz_or
 | ||
| mpz_pow_ui
 | ||
| mpz_powm
 | ||
| mpz_powm_ui
 | ||
| mpz_probab_prime_p
 | ||
| mpz_random
 | ||
| mpz_random2
 | ||
| mpz_set
 | ||
| mpz_set_si
 | ||
| mpz_set_str
 | ||
| mpz_set_ui
 | ||
| mpz_size
 | ||
| mpz_sizeinbase
 | ||
| mpz_sqrt
 | ||
| mpz_sqrtrem
 | ||
| mpz_sub
 | ||
| mpz_sub_ui
 | ||
| mpz_xor
 |