diff --git a/README.md b/README.md index ced2bb5..edca38b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,153 @@ # fgmp FGMP is a public domain implementation of a subset of the GNU gmp library with the same API. + +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 +#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 + +--- +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 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 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 diff --git a/notes b/notes deleted file mode 100644 index f3f6b1b..0000000 --- a/notes +++ /dev/null @@ -1,150 +0,0 @@ -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 -#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 - ---- -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 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 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