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
|