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
|