80 lines
3.3 KiB
Plaintext
80 lines
3.3 KiB
Plaintext
Copyright 2011-2013, 2018 Free Software Foundation, Inc.
|
|
|
|
This file is part of the GNU MP Library.
|
|
|
|
The GNU MP Library is free software; you can redistribute it and/or modify
|
|
it under the terms of either:
|
|
|
|
* the GNU Lesser General Public License as published by the Free
|
|
Software Foundation; either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
or
|
|
|
|
* the GNU General Public License as published by the Free Software
|
|
Foundation; either version 2 of the License, or (at your option) any
|
|
later version.
|
|
|
|
or both in parallel, as here.
|
|
|
|
The GNU MP Library is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received copies of the GNU General Public License and the
|
|
GNU Lesser General Public License along with the GNU MP Library. If not,
|
|
see https://www.gnu.org/licenses/.
|
|
|
|
|
|
This is "mini-gmp", a small implementation of a subset of GMP's mpn,
|
|
mpz and mpq interfaces.
|
|
|
|
It is intended for applications which need arithmetic on numbers
|
|
larger than a machine word, but which don't need to handle very large
|
|
numbers very efficiently. Those applications can include a copy of
|
|
mini-gmp to get a GMP-compatible interface with small footprint. One
|
|
can also arrange for optional linking with the real GMP library, using
|
|
mini-gmp as a fallback when for some reason GMP is not available, or
|
|
not desired as a dependency.
|
|
|
|
The supported GMP subset of the mpn and mpz interfaces is declared in
|
|
mini-gmp.h, and implemented in mini-gmp.c. The implemented
|
|
functions are fully compatible with the corresponding GMP functions,
|
|
as specified in the GMP manual, with a few exceptions:
|
|
|
|
mpz_export and mpz_import support only NAILS = 0.
|
|
|
|
The REALLOC_FUNC and FREE_FUNC registered with
|
|
mp_set_memory_functions does not get the correct size of the
|
|
allocated block in the corresponding argument. mini-gmp always
|
|
passes zero for these rarely used arguments.
|
|
|
|
When mpz_get_str allocates the block, it can be longer than needed.
|
|
|
|
The performance target for mini-gmp is to be at most 10 times slower
|
|
than the real GMP library, for numbers of size up to a few hundred
|
|
bits. No asymptotically fast algorithms are included in mini-gmp, so
|
|
it will be many orders of magnitude slower than GMP for very large
|
|
numbers.
|
|
|
|
The supported GMP subset of the mpq layer is declared in mini-mpq.h,
|
|
and implemented in mini-mpq.c.
|
|
|
|
You should never "install" mini-gmp. Applications can either just
|
|
#include mini-gmp.c (but then, beware that it defines several macros
|
|
and functions outside of the advertised interface), and if needed
|
|
#include mini-mpq.c in a later line (order is important). Or compile
|
|
mini-gmp.c and mini-mpq.c as separate compilation units, and use the
|
|
declarations in mini-gmp.h and mini-mpq.h.
|
|
|
|
The tests subdirectory contains a testsuite. To use it, you need GMP
|
|
and GNU make. Just run make check in the tests directory. If the
|
|
hard-coded compiler settings are not right, you have to either edit the
|
|
Makefile or pass overriding values on the make command line (e.g.,
|
|
make CC=cc check).
|
|
|
|
The initial version of mini-gmp was put together by Niels Möller
|
|
<nisse@lysator.liu.se>, with a fair amount of copy-and-paste from the
|
|
GMP sources.
|