Berkeley MP Compatible Functions
********************************
These functions are intended to be fully compatible with the
Berkeley MP library which is available on many BSD derived U*ix
systems. The `--enable-mpbsd' option must be used when building GNU MP
to make these available (Note:Installing GMP).
The original Berkeley MP library has a usage restriction: you cannot
use the same variable as both source and destination in a single
function call. The compatible functions in GNU MP do not share this
restriction--inputs and outputs may overlap.
It is not recommended that new programs are written using these
functions. Apart from the incomplete set of functions, the interface
for initializing `MINT' objects is more error prone, and the `pow'
function collides with `pow' in `libm.a'.
Include the header `mp.h' to get the definition of the necessary
types and functions. If you are on a BSD derived system, make sure to
include GNU `mp.h' if you are going to link the GNU `libmp.a' to your
program. This means that you probably need to give the `-I<dir>'
option to the compiler, where `<dir>' is the directory where you have
GNU `mp.h'.
- Function: MINT * itom (signed short int INITIAL_VALUE)
Allocate an integer consisting of a `MINT' object and dynamic limb
space. Initialize the integer to INITIAL_VALUE. Return a pointer
to the `MINT' object.
- Function: MINT * xtom (char *INITIAL_VALUE)
Allocate an integer consisting of a `MINT' object and dynamic limb
space. Initialize the integer from INITIAL_VALUE, a hexadecimal,
null-terminated C string. Return a pointer to the `MINT' object.
- Function: void move (MINT *SRC, MINT *DEST)
Set DEST to SRC by copying. Both variables must be previously
initialized.
- Function: void madd (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
Add SRC_1 and SRC_2 and put the sum in DESTINATION.
- Function: void msub (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
Subtract SRC_2 from SRC_1 and put the difference in DESTINATION.
- Function: void mult (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
Multiply SRC_1 and SRC_2 and put the product in DESTINATION.
- Function: void mdiv (MINT *DIVIDEND, MINT *DIVISOR, MINT *QUOTIENT,
MINT *REMAINDER)
- Function: void sdiv (MINT *DIVIDEND, signed short int DIVISOR, MINT
*QUOTIENT, signed short int *REMAINDER)
Set QUOTIENT to DIVIDEND/DIVISOR, and REMAINDER to DIVIDEND mod
DIVISOR. The quotient is rounded towards zero; the remainder has
the same sign as the dividend unless it is zero.
Some implementations of these functions work differently--or not
at all--for negative arguments.
- Function: void msqrt (MINT *OP, MINT *ROOT, MINT *REMAINDER)
Set ROOT to the truncated integer part of the square root of OP,
like `mpz_sqrt'. Set REMAINDER to OP-ROOT*ROOT, i.e. zero if OP
is a perfect square.
If ROOT and REMAINDER are the same variable, the results are
undefined.
- Function: void pow (MINT *BASE, MINT *EXP, MINT *MOD, MINT *DEST)
Set DEST to (BASE raised to EXP) modulo MOD.
- Function: void rpow (MINT *BASE, signed short int EXP, MINT *DEST)
Set DEST to BASE raised to EXP.
- Function: void gcd (MINT *OP1, MINT *OP2, MINT *RES)
Set RES to the greatest common divisor of OP1 and OP2.
- Function: int mcmp (MINT *OP1, MINT *OP2)
Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero
if OP1 = OP2, and a negative value if OP1 < OP2.
- Function: void min (MINT *DEST)
Input a decimal string from `stdin', and put the read integer in
DEST. SPC and TAB are allowed in the number string, and are
ignored.
- Function: void mout (MINT *SRC)
Output SRC to `stdout', as a decimal string. Also output a
newline.
- Function: char * mtox (MINT *OP)
Convert OP to a hexadecimal string, and return a pointer to the
string. The returned string is allocated using the default memory
allocation function, `malloc' by default.
- Function: void mfree (MINT *OP)
De-allocate, the space used by OP. *This function should only be
passed a value returned by `itom' or `xtom'.*