[BACK]Return to gmp.info-2 CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp

Annotation of OpenXM_contrib/gmp/gmp.info-2, Revision 1.1.1.1

1.1       maekawa     1: This is Info file gmp.info, produced by Makeinfo-1.64 from the input
                      2: file gmp.texi.
                      3:
                      4: START-INFO-DIR-ENTRY
                      5: * gmp: (gmp.info).               GNU Multiple Precision Arithmetic Library.
                      6: END-INFO-DIR-ENTRY
                      7:
                      8:    This file documents GNU MP, a library for arbitrary-precision
                      9: arithmetic.
                     10:
                     11:    Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation,
                     12: Inc.
                     13:
                     14:    Permission is granted to make and distribute verbatim copies of this
                     15: manual provided the copyright notice and this permission notice are
                     16: preserved on all copies.
                     17:
                     18:    Permission is granted to copy and distribute modified versions of
                     19: this manual under the conditions for verbatim copying, provided that
                     20: the entire resulting derived work is distributed under the terms of a
                     21: permission notice identical to this one.
                     22:
                     23:    Permission is granted to copy and distribute translations of this
                     24: manual into another language, under the above conditions for modified
                     25: versions, except that this permission notice may be stated in a
                     26: translation approved by the Foundation.
                     27:
                     28: 
                     29: File: gmp.info,  Node: Floating-point Functions,  Next: Low-level Functions,  Prev: Rational Number Functions,  Up: Top
                     30:
                     31: Floating-point Functions
                     32: ************************
                     33:
                     34:    This is a description of the *preliminary* interface for
                     35: floating-point arithmetic in GNU MP 2.
                     36:
                     37:    The floating-point functions expect arguments of type `mpf_t'.
                     38:
                     39:    The MP floating-point functions have an interface that is similar to
                     40: the MP integer functions.  The function prefix for floating-point
                     41: operations is `mpf_'.
                     42:
                     43:    There is one significant characteristic of floating-point numbers
                     44: that has motivated a difference between this function class and other
                     45: MP function classes: the inherent inexactness of floating point
                     46: arithmetic.  The user has to specify the precision of each variable.  A
                     47: computation that assigns a variable will take place with the precision
                     48: of the assigned variable; the precision of variables used as input is
                     49: ignored.
                     50:
                     51:    The precision of a calculation is defined as follows: Compute the
                     52: requested operation exactly (with "infinite precision"), and truncate
                     53: the result to the destination variable precision.  Even if the user has
                     54: asked for a very high precision, MP will not calculate with superfluous
                     55: digits.  For example, if two low-precision numbers of nearly equal
                     56: magnitude are added, the precision of the result will be limited to
                     57: what is required to represent the result accurately.
                     58:
                     59:    The MP floating-point functions are *not* intended as a smooth
                     60: extension to the IEEE P754 arithmetic.  Specifically, the results
                     61: obtained on one computer often differs from the results obtained on a
                     62: computer with a different word size.
                     63:
                     64: * Menu:
                     65:
                     66: * Initializing Floats::
                     67: * Assigning Floats::
                     68: * Simultaneous Float Init & Assign::
                     69: * Converting Floats::
                     70: * Float Arithmetic::
                     71: * Float Comparison::
                     72: * I/O of Floats::
                     73: * Miscellaneous Float Functions::
                     74:
                     75: 
                     76: File: gmp.info,  Node: Initializing Floats,  Next: Assigning Floats,  Up: Floating-point Functions
                     77:
                     78: Initialization and Assignment Functions
                     79: =======================================
                     80:
                     81:  - Function: void mpf_set_default_prec (unsigned long int PREC)
                     82:      Set the default precision to be *at least* PREC bits.  All
                     83:      subsequent calls to `mpf_init' will use this precision, but
                     84:      previously initialized variables are unaffected.
                     85:
                     86:    An `mpf_t' object must be initialized before storing the first value
                     87: in it.  The functions `mpf_init' and `mpf_init2' are used for that
                     88: purpose.
                     89:
                     90:  - Function: void mpf_init (mpf_t X)
                     91:      Initialize X to 0.  Normally, a variable should be initialized
                     92:      once only or at least be cleared, using `mpf_clear', between
                     93:      initializations.  The precision of X is undefined unless a default
                     94:      precision has already been established by a call to
                     95:      `mpf_set_default_prec'.
                     96:
                     97:  - Function: void mpf_init2 (mpf_t X, unsigned long int PREC)
                     98:      Initialize X to 0 and set its precision to be *at least* PREC
                     99:      bits.  Normally, a variable should be initialized once only or at
                    100:      least be cleared, using `mpf_clear', between initializations.
                    101:
                    102:  - Function: void mpf_clear (mpf_t X)
                    103:      Free the space occupied by X.  Make sure to call this function for
                    104:      all `mpf_t' variables when you are done with them.
                    105:
                    106:    Here is an example on how to initialize floating-point variables:
                    107:      {
                    108:        mpf_t x, y;
                    109:        mpf_init (x);                   /* use default precision */
                    110:        mpf_init2 (y, 256);             /* precision *at least* 256 bits */
                    111:        ...
                    112:        /* Unless the program is about to exit, do ... */
                    113:        mpf_clear (x);
                    114:        mpf_clear (y);
                    115:      }
                    116:
                    117:    The following three functions are useful for changing the precision
                    118: during a calculation.  A typical use would be for adjusting the
                    119: precision gradually in iterative algorithms like Newton-Raphson, making
                    120: the computation precision closely match the actual accurate part of the
                    121: numbers.
                    122:
                    123:  - Function: void mpf_set_prec (mpf_t ROP, unsigned long int PREC)
                    124:      Set the precision of ROP to be *at least* PREC bits.  Since
                    125:      changing the precision involves calls to `realloc', this routine
                    126:      should not be called in a tight loop.
                    127:
                    128:  - Function: unsigned long int mpf_get_prec (mpf_t OP)
                    129:      Return the precision actually used for assignments of OP.
                    130:
                    131:  - Function: void mpf_set_prec_raw (mpf_t ROP, unsigned long int PREC)
                    132:      Set the precision of ROP to be *at least* PREC bits.  This is a
                    133:      low-level function that does not change the allocation.  The PREC
                    134:      argument must not be larger that the precision previously returned
                    135:      by `mpf_get_prec'.  It is crucial that the precision of ROP is
                    136:      ultimately reset to exactly the value returned by `mpf_get_prec'.
                    137:
                    138: 
                    139: File: gmp.info,  Node: Assigning Floats,  Next: Simultaneous Float Init & Assign,  Prev: Initializing Floats,  Up: Floating-point Functions
                    140:
                    141: Assignment Functions
                    142: --------------------
                    143:
                    144:    These functions assign new values to already initialized floats
                    145: (*note Initializing Floats::.).
                    146:
                    147:  - Function: void mpf_set (mpf_t ROP, mpf_t OP)
                    148:  - Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP)
                    149:  - Function: void mpf_set_si (mpf_t ROP, signed long int OP)
                    150:  - Function: void mpf_set_d (mpf_t ROP, double OP)
                    151:  - Function: void mpf_set_z (mpf_t ROP, mpz_t OP)
                    152:  - Function: void mpf_set_q (mpf_t ROP, mpq_t OP)
                    153:      Set the value of ROP from OP.
                    154:
                    155:  - Function: int mpf_set_str (mpf_t ROP, char *STR, int BASE)
                    156:      Set the value of ROP from the string in STR.  The string is of the
                    157:      form `M@N' or, if the base is 10 or less, alternatively `MeN'.
                    158:      `M' is the mantissa and `N' is the exponent.  The mantissa is
                    159:      always in the specified base.  The exponent is either in the
                    160:      specified base or, if BASE is negative, in decimal.
                    161:
                    162:      The argument BASE may be in the ranges 2 to 36, or -36 to -2.
                    163:      Negative values are used to specify that the exponent is in
                    164:      decimal.
                    165:
                    166:      Unlike the corresponding `mpz' function, the base will not be
                    167:      determined from the leading characters of the string if BASE is 0.
                    168:      This is so that numbers like `0.23' are not interpreted as octal.
                    169:
                    170:      White space is allowed in the string, and is simply ignored.
                    171:
                    172:      This function returns 0 if the entire string up to the '\0' is a
                    173:      valid number in base BASE.  Otherwise it returns -1.
                    174:
                    175: 
                    176: File: gmp.info,  Node: Simultaneous Float Init & Assign,  Next: Converting Floats,  Prev: Assigning Floats,  Up: Floating-point Functions
                    177:
                    178: Combined Initialization and Assignment Functions
                    179: ------------------------------------------------
                    180:
                    181:    For convenience, MP provides a parallel series of initialize-and-set
                    182: functions which initialize the output and then store the value there.
                    183: These functions' names have the form `mpf_init_set...'
                    184:
                    185:    Once the float has been initialized by any of the `mpf_init_set...'
                    186: functions, it can be used as the source or destination operand for the
                    187: ordinary float functions.  Don't use an initialize-and-set function on
                    188: a variable already initialized!
                    189:
                    190:  - Function: void mpf_init_set (mpf_t ROP, mpf_t OP)
                    191:  - Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP)
                    192:  - Function: void mpf_init_set_si (mpf_t ROP, signed long int OP)
                    193:  - Function: void mpf_init_set_d (mpf_t ROP, double OP)
                    194:      Initialize ROP and set its value from OP.
                    195:
                    196:      The precision of ROP will be taken from the active default
                    197:      precision, as set by `mpf_set_default_prec'.
                    198:
                    199:  - Function: int mpf_init_set_str (mpf_t ROP, char *STR, int BASE)
                    200:      Initialize ROP and set its value from the string in STR.  See
                    201:      `mpf_set_str' above for details on the assignment operation.
                    202:
                    203:      Note that ROP is initialized even if an error occurs.  (I.e., you
                    204:      have to call `mpf_clear' for it.)
                    205:
                    206:      The precision of ROP will be taken from the active default
                    207:      precision, as set by `mpf_set_default_prec'.
                    208:
                    209: 
                    210: File: gmp.info,  Node: Converting Floats,  Next: Float Arithmetic,  Prev: Simultaneous Float Init & Assign,  Up: Floating-point Functions
                    211:
                    212: Conversion Functions
                    213: ====================
                    214:
                    215:  - Function: double mpf_get_d (mpf_t OP)
                    216:      Convert OP to a double.
                    217:
                    218:  - Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int BASE,
                    219:           size_t N_DIGITS, mpf_t OP)
                    220:      Convert OP to a string of digits in base BASE.  The base may vary
                    221:      from 2 to 36.  Generate at most N_DIGITS significant digits, or if
                    222:      N_DIGITS is 0, the maximum number of digits accurately
                    223:      representable by OP.
                    224:
                    225:      If STR is NULL, space for the mantissa is allocated using the
                    226:      default allocation function, and a pointer to the string is
                    227:      returned.
                    228:
                    229:      If STR is not NULL, it should point to a block of storage enough
                    230:      large for the mantissa, i.e., N_DIGITS + 2.  The two extra bytes
                    231:      are for a possible minus sign, and for the terminating null
                    232:      character.
                    233:
                    234:      The exponent is written through the pointer EXPPTR.
                    235:
                    236:      If N_DIGITS is 0, the maximum number of digits meaningfully
                    237:      achievable from the precision of OP will be generated.  Note that
                    238:      the space requirements for STR in this case will be impossible for
                    239:      the user to predetermine.  Therefore, you need to pass NULL for
                    240:      the string argument whenever N_DIGITS is 0.
                    241:
                    242:      The generated string is a fraction, with an implicit radix point
                    243:      immediately to the left of the first digit.  For example, the
                    244:      number 3.1416 would be returned as "31416" in the string and 1
                    245:      written at EXPPTR.
                    246:
                    247: 
                    248: File: gmp.info,  Node: Float Arithmetic,  Next: Float Comparison,  Prev: Converting Floats,  Up: Floating-point Functions
                    249:
                    250: Arithmetic Functions
                    251: ====================
                    252:
                    253:  - Function: void mpf_add (mpf_t ROP, mpf_t OP1, mpf_t OP2)
                    254:  - Function: void mpf_add_ui (mpf_t ROP, mpf_t OP1, unsigned long int
                    255:           OP2)
                    256:      Set ROP to OP1 + OP2.
                    257:
                    258:  - Function: void mpf_sub (mpf_t ROP, mpf_t OP1, mpf_t OP2)
                    259:  - Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, mpf_t
                    260:           OP2)
                    261:  - Function: void mpf_sub_ui (mpf_t ROP, mpf_t OP1, unsigned long int
                    262:           OP2)
                    263:      Set ROP to OP1 - OP2.
                    264:
                    265:  - Function: void mpf_mul (mpf_t ROP, mpf_t OP1, mpf_t OP2)
                    266:  - Function: void mpf_mul_ui (mpf_t ROP, mpf_t OP1, unsigned long int
                    267:           OP2)
                    268:      Set ROP to OP1 times OP2.
                    269:
                    270:    Division is undefined if the divisor is zero, and passing a zero
                    271: divisor to the divide functions will make these functions intentionally
                    272: divide by zero.  This gives the user the possibility to handle
                    273: arithmetic exceptions in these functions in the same manner as other
                    274: arithmetic exceptions.
                    275:
                    276:  - Function: void mpf_div (mpf_t ROP, mpf_t OP1, mpf_t OP2)
                    277:  - Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, mpf_t
                    278:           OP2)
                    279:  - Function: void mpf_div_ui (mpf_t ROP, mpf_t OP1, unsigned long int
                    280:           OP2)
                    281:      Set ROP to OP1/OP2.
                    282:
                    283:  - Function: void mpf_sqrt (mpf_t ROP, mpf_t OP)
                    284:  - Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP)
                    285:      Set ROP to the square root of OP.
                    286:
                    287:  - Function: void mpf_neg (mpf_t ROP, mpf_t OP)
                    288:      Set ROP to -OP.
                    289:
                    290:  - Function: void mpf_abs (mpf_t ROP, mpf_t OP)
                    291:      Set ROP to the absolute value of OP.
                    292:
                    293:  - Function: void mpf_mul_2exp (mpf_t ROP, mpf_t OP1, unsigned long int
                    294:           OP2)
                    295:      Set ROP to OP1 times 2 raised to OP2.
                    296:
                    297:  - Function: void mpf_div_2exp (mpf_t ROP, mpf_t OP1, unsigned long int
                    298:           OP2)
                    299:      Set ROP to OP1 divided by 2 raised to OP2.
                    300:
                    301: 
                    302: File: gmp.info,  Node: Float Comparison,  Next: I/O of Floats,  Prev: Float Arithmetic,  Up: Floating-point Functions
                    303:
                    304: Comparison Functions
                    305: ====================
                    306:
                    307:  - Function: int mpf_cmp (mpf_t OP1, mpf_t OP2)
                    308:  - Function: int mpf_cmp_ui (mpf_t OP1, unsigned long int OP2)
                    309:  - Function: int mpf_cmp_si (mpf_t OP1, signed long int OP2)
                    310:      Compare OP1 and OP2.  Return a positive value if OP1 > OP2, zero
                    311:      if OP1 = OP2, and a negative value if OP1 < OP2.
                    312:
                    313:  - Function: int mpf_eq (mpf_t OP1, mpf_t OP2, unsigned long int op3)
                    314:      Return non-zero if the first OP3 bits of OP1 and OP2 are equal,
                    315:      zero otherwise.  I.e., test of OP1 and OP2 are approximately equal.
                    316:
                    317:  - Function: void mpf_reldiff (mpf_t ROP, mpf_t OP1, mpf_t OP2)
                    318:      Compute the relative difference between OP1 and OP2 and store the
                    319:      result in ROP.
                    320:
                    321:  - Macro: int mpf_sgn (mpf_t OP)
                    322:      Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0.
                    323:
                    324:      This function is actually implemented as a macro.  It evaluates its
                    325:      arguments multiple times.
                    326:
                    327: 
                    328: File: gmp.info,  Node: I/O of Floats,  Next: Miscellaneous Float Functions,  Prev: Float Comparison,  Up: Floating-point Functions
                    329:
                    330: Input and Output Functions
                    331: ==========================
                    332:
                    333:    Functions that perform input from a stdio stream, and functions that
                    334: output to a stdio stream.  Passing a NULL pointer for a STREAM argument
                    335: to any of these functions will make them read from `stdin' and write to
                    336: `stdout', respectively.
                    337:
                    338:    When using any of these functions, it is a good idea to include
                    339: `stdio.h' before `gmp.h', since that will allow `gmp.h' to define
                    340: prototypes for these functions.
                    341:
                    342:  - Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t
                    343:           N_DIGITS, mpf_t OP)
                    344:      Output OP on stdio stream STREAM, as a string of digits in base
                    345:      BASE.  The base may vary from 2 to 36.  Print at most N_DIGITS
                    346:      significant digits, or if N_DIGITS is 0, the maximum number of
                    347:      digits accurately representable by OP.
                    348:
                    349:      In addition to the significant digits, a leading `0.' and a
                    350:      trailing exponent, in the form `eNNN', are printed.  If BASE is
                    351:      greater than 10, `@' will be used instead of `e' as exponent
                    352:      delimiter.
                    353:
                    354:      Return the number of bytes written, or if an error occurred,
                    355:      return 0.
                    356:
                    357:  - Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE)
                    358:      Input a string in base BASE from stdio stream STREAM, and put the
                    359:      read float in ROP.  The string is of the form `M@N' or, if the
                    360:      base is 10 or less, alternatively `MeN'.  `M' is the mantissa and
                    361:      `N' is the exponent.  The mantissa is always in the specified
                    362:      base.  The exponent is either in the specified base or, if BASE is
                    363:      negative, in decimal.
                    364:
                    365:      The argument BASE may be in the ranges 2 to 36, or -36 to -2.
                    366:      Negative values are used to specify that the exponent is in
                    367:      decimal.
                    368:
                    369:      Unlike the corresponding `mpz' function, the base will not be
                    370:      determined from the leading characters of the string if BASE is 0.
                    371:      This is so that numbers like `0.23' are not interpreted as octal.
                    372:
                    373:      Return the number of bytes read, or if an error occurred, return 0.
                    374:
                    375: 
                    376: File: gmp.info,  Node: Miscellaneous Float Functions,  Prev: I/O of Floats,  Up: Floating-point Functions
                    377:
                    378: Miscellaneous Functions
                    379: =======================
                    380:
                    381:  - Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t
                    382:           MAX_EXP)
                    383:      Generate a random float of at most MAX_SIZE limbs, with long
                    384:      strings of zeros and ones in the binary representation.  The
                    385:      exponent of the number is in the interval -EXP to EXP.  This
                    386:      function is useful for testing functions and algorithms, since
                    387:      this kind of random numbers have proven to be more likely to
                    388:      trigger corner-case bugs.  Negative random numbers are generated
                    389:      when MAX_SIZE is negative.
                    390:
                    391: 
                    392: File: gmp.info,  Node: Low-level Functions,  Next: BSD Compatible Functions,  Prev: Floating-point Functions,  Up: Top
                    393:
                    394: Low-level Functions
                    395: *******************
                    396:
                    397:    This chapter describes low-level MP functions, used to implement the
                    398: high-level MP functions, but also intended for time-critical user code.
                    399:
                    400:    These functions start with the prefix `mpn_'.
                    401:
                    402:    The `mpn' functions are designed to be as fast as possible, *not* to
                    403: provide a coherent calling interface.  The different functions have
                    404: somewhat similar interfaces, but there are variations that make them
                    405: hard to use.  These functions do as little as possible apart from the
                    406: real multiple precision computation, so that no time is spent on things
                    407: that not all callers need.
                    408:
                    409:    A source operand is specified by a pointer to the least significant
                    410: limb and a limb count.  A destination operand is specified by just a
                    411: pointer.  It is the responsibility of the caller to ensure that the
                    412: destination has enough space for storing the result.
                    413:
                    414:    With this way of specifying operands, it is possible to perform
                    415: computations on subranges of an argument, and store the result into a
                    416: subrange of a destination.
                    417:
                    418:    A common requirement for all functions is that each source area
                    419: needs at least one limb.  No size argument may be zero.
                    420:
                    421:    The `mpn' functions is the base for the implementation of the `mpz_',
                    422: `mpf_', and `mpq_' functions.
                    423:
                    424:    This example adds the number beginning at SRC1_PTR and the number
                    425: beginning at SRC2_PTR and writes the sum at DEST_PTR.  All areas have
                    426: SIZE limbs.
                    427:
                    428:      cy = mpn_add_n (dest_ptr, src1_ptr, src2_ptr, size)
                    429:
                    430: In the notation used here, a source operand is identified by the
                    431: pointer to the least significant limb, and the limb count in braces.
                    432: For example, {s1_ptr, s1_size}.
                    433:
                    434:  - Function: mp_limb_t mpn_add_n (mp_limb_t * DEST_PTR, const mp_limb_t
                    435:           * SRC1_PTR, const mp_limb_t * SRC2_PTR, mp_size_t SIZE)
                    436:      Add {SRC1_PTR, SIZE} and {SRC2_PTR, SIZE}, and write the SIZE
                    437:      least significant limbs of the result to DEST_PTR.  Return carry,
                    438:      either 0 or 1.
                    439:
                    440:      This is the lowest-level function for addition.  It is the
                    441:      preferred function for addition, since it is written in assembly
                    442:      for most targets.  For addition of a variable to itself (i.e.,
                    443:      SRC1_PTR equals SRC2_PTR, use `mpn_lshift' with a count of 1 for
                    444:      optimal speed.
                    445:
                    446:  - Function: mp_limb_t mpn_add_1 (mp_limb_t * DEST_PTR, const mp_limb_t
                    447:           * SRC1_PTR, mp_size_t SIZE, mp_limb_t SRC2_LIMB)
                    448:      Add {SRC1_PTR, SIZE} and SRC2_LIMB, and write the SIZE least
                    449:      significant limbs of the result to DEST_PTR.  Return carry, either
                    450:      0 or 1.
                    451:
                    452:  - Function: mp_limb_t mpn_add (mp_limb_t * DEST_PTR, const mp_limb_t *
                    453:           SRC1_PTR, mp_size_t SRC1_SIZE, const mp_limb_t * SRC2_PTR,
                    454:           mp_size_t SRC2_SIZE)
                    455:      Add {SRC1_PTR, SRC1_SIZE} and {SRC2_PTR, SRC2_SIZE}, and write the
                    456:      SRC1_SIZE least significant limbs of the result to DEST_PTR.
                    457:      Return carry, either 0 or 1.
                    458:
                    459:      This function requires that SRC1_SIZE is greater than or equal to
                    460:      SRC2_SIZE.
                    461:
                    462:  - Function: mp_limb_t mpn_sub_n (mp_limb_t * DEST_PTR, const mp_limb_t
                    463:           * SRC1_PTR, const mp_limb_t * SRC2_PTR, mp_size_t SIZE)
                    464:      Subtract {SRC2_PTR, SRC2_SIZE} from {SRC1_PTR, SIZE}, and write
                    465:      the SIZE least significant limbs of the result to DEST_PTR.
                    466:      Return borrow, either 0 or 1.
                    467:
                    468:      This is the lowest-level function for subtraction.  It is the
                    469:      preferred function for subtraction, since it is written in
                    470:      assembly for most targets.
                    471:
                    472:  - Function: mp_limb_t mpn_sub_1 (mp_limb_t * DEST_PTR, const mp_limb_t
                    473:           * SRC1_PTR, mp_size_t SIZE, mp_limb_t SRC2_LIMB)
                    474:      Subtract SRC2_LIMB from {SRC1_PTR, SIZE}, and write the SIZE least
                    475:      significant limbs of the result to DEST_PTR.  Return borrow,
                    476:      either 0 or 1.
                    477:
                    478:  - Function: mp_limb_t mpn_sub (mp_limb_t * DEST_PTR, const mp_limb_t *
                    479:           SRC1_PTR, mp_size_t SRC1_SIZE, const mp_limb_t * SRC2_PTR,
                    480:           mp_size_t SRC2_SIZE)
                    481:      Subtract {SRC2_PTR, SRC2_SIZE} from {SRC1_PTR, SRC1_SIZE}, and
                    482:      write the SRC1_SIZE least significant limbs of the result to
                    483:      DEST_PTR.  Return borrow, either 0 or 1.
                    484:
                    485:      This function requires that SRC1_SIZE is greater than or equal to
                    486:      SRC2_SIZE.
                    487:
                    488:  - Function: void mpn_mul_n (mp_limb_t * DEST_PTR, const mp_limb_t *
                    489:           SRC1_PTR, const mp_limb_t * SRC2_PTR, mp_size_t SIZE)
                    490:      Multiply {SRC1_PTR, SIZE} and {SRC2_PTR, SIZE}, and write the
                    491:      *entire* result to DEST_PTR.
                    492:
                    493:      The destination has to have space for 2SIZE limbs, even if the
                    494:      significant result might be one limb smaller.
                    495:
                    496:  - Function: mp_limb_t mpn_mul_1 (mp_limb_t * DEST_PTR, const mp_limb_t
                    497:           * SRC1_PTR, mp_size_t SIZE, mp_limb_t SRC2_LIMB)
                    498:      Multiply {SRC1_PTR, SIZE} and SRC2_LIMB, and write the SIZE least
                    499:      significant limbs of the product to DEST_PTR.  Return the most
                    500:      significant limb of the product.
                    501:
                    502:      This is a low-level function that is a building block for general
                    503:      multiplication as well as other operations in MP.  It is written
                    504:      in assembly for most targets.
                    505:
                    506:      Don't call this function if SRC2_LIMB is a power of 2; use
                    507:      `mpn_lshift' with a count equal to the logarithm of SRC2_LIMB
                    508:      instead, for optimal speed.
                    509:
                    510:  - Function: mp_limb_t mpn_addmul_1 (mp_limb_t * DEST_PTR, const
                    511:           mp_limb_t * SRC1_PTR, mp_size_t SIZE, mp_limb_t SRC2_LIMB)
                    512:      Multiply {SRC1_PTR, SIZE} and SRC2_LIMB, and add the SIZE least
                    513:      significant limbs of the product to {DEST_PTR, SIZE} and write the
                    514:      result to DEST_PTR DEST_PTR.  Return the most significant limb of
                    515:      the product, plus carry-out from the addition.
                    516:
                    517:      This is a low-level function that is a building block for general
                    518:      multiplication as well as other operations in MP.  It is written
                    519:      in assembly for most targets.
                    520:
                    521:  - Function: mp_limb_t mpn_submul_1 (mp_limb_t * DEST_PTR, const
                    522:           mp_limb_t * SRC1_PTR, mp_size_t SIZE, mp_limb_t SRC2_LIMB)
                    523:      Multiply {SRC1_PTR, SIZE} and SRC2_LIMB, and subtract the SIZE
                    524:      least significant limbs of the product from {DEST_PTR, SIZE} and
                    525:      write the result to DEST_PTR.  Return the most significant limb of
                    526:      the product, minus borrow-out from the subtraction.
                    527:
                    528:      This is a low-level function that is a building block for general
                    529:      multiplication and division as well as other operations in MP.  It
                    530:      is written in assembly for most targets.
                    531:
                    532:  - Function: mp_limb_t mpn_mul (mp_limb_t * DEST_PTR, const mp_limb_t *
                    533:           SRC1_PTR, mp_size_t SRC1_SIZE, const mp_limb_t * SRC2_PTR,
                    534:           mp_size_t SRC2_SIZE)
                    535:      Multiply {SRC1_PTR, SRC1_SIZE} and {SRC2_PTR, SRC2_SIZE}, and
                    536:      write the result to DEST_PTR.  Return the most significant limb of
                    537:      the result.
                    538:
                    539:      The destination has to have space for SRC1_SIZE + SRC1_SIZE limbs,
                    540:      even if the result might be one limb smaller.
                    541:
                    542:      This function requires that SRC1_SIZE is greater than or equal to
                    543:      SRC2_SIZE.  The destination must be distinct from either input
                    544:      operands.
                    545:
                    546:  - Function: mp_size_t mpn_divrem (mp_limb_t * R1P, mp_size_t XSIZE,
                    547:           mp_limb_t * RS2P, mp_size_t RS2SIZE, const mp_limb_t * S3P,
                    548:           mp_size_t S3SIZE)
                    549:      Divide {RS2P, RS2SIZE} by {S3P, S3SIZE}, and write the quotient at
                    550:      R1P, with the exception of the most significant limb, which is
                    551:      returned.  The remainder replaces the dividend at RS2P.
                    552:
                    553:      In addition to an integer quotient, XSIZE fraction limbs are
                    554:      developed, and stored after the integral limbs.  For most usages,
                    555:      XSIZE will be zero.
                    556:
                    557:      It is required that RS2SIZE is greater than or equal to S3SIZE.
                    558:      It is required that the most significant bit of the divisor is set.
                    559:
                    560:      If the quotient is not needed, pass RS2P + S3SIZE as R1P.  Aside
                    561:      from that special case, no overlap between arguments is permitted.
                    562:
                    563:      Return the most significant limb of the quotient, either 0 or 1.
                    564:
                    565:      The area at R1P needs to be RS2SIZE - S3SIZE + XSIZE limbs large.
                    566:
                    567:  - Function: mp_limb_t mpn_divrem_1 (mp_limb_t * R1P, mp_size_t XSIZE,
                    568:           mp_limb_t * S2P, mp_size_t S2SIZE, mp_limb_t S3LIMB)
                    569:      Divide {S2P, S2SIZE} by S3LIMB, and write the quotient at R1P.
                    570:      Return the remainder.
                    571:
                    572:      In addition to an integer quotient, XSIZE fraction limbs are
                    573:      developed, and stored after the integral limbs.  For most usages,
                    574:      XSIZE will be zero.
                    575:
                    576:      The areas at R1P and S2P have to be identical or completely
                    577:      separate, not partially overlapping.
                    578:
                    579:  - Function: mp_size_t mpn_divmod (mp_limb_t * R1P, mp_limb_t * RS2P,
                    580:           mp_size_t RS2SIZE, const mp_limb_t * S3P, mp_size_t S3SIZE)
                    581:      *This interface is obsolete.  It will disappear from future
                    582:      releases.  Use `mpn_divrem' in its stead.*
                    583:
                    584:  - Function: mp_limb_t mpn_divmod_1 (mp_limb_t * R1P, mp_limb_t * S2P,
                    585:           mp_size_t S2SIZE, mp_limb_t S3LIMB)
                    586:      *This interface is obsolete.  It will disappear from future
                    587:      releases.  Use `mpn_divrem_1' in its stead.*
                    588:
                    589:  - Function: mp_limb_t mpn_mod_1 (mp_limb_t * S1P, mp_size_t S1SIZE,
                    590:           mp_limb_t S2LIMB)
                    591:      Divide {S1P, S1SIZE} by S2LIMB, and return the remainder.
                    592:
                    593:  - Function: mp_limb_t mpn_preinv_mod_1 (mp_limb_t * S1P, mp_size_t
                    594:           S1SIZE, mp_limb_t S2LIMB, mp_limb_t S3LIMB)
                    595:      *This interface is obsolete.  It will disappear from future
                    596:      releases.  Use `mpn_mod_1' in its stead.*
                    597:
                    598:  - Function: mp_limb_t mpn_bdivmod (mp_limb_t * DEST_PTR, mp_limb_t *
                    599:           S1P, mp_size_t S1SIZE, const mp_limb_t * S2P, mp_size_t
                    600:           S2SIZE, unsigned long int D)
                    601:      The function puts the low [D/BITS_PER_MP_LIMB] limbs of Q = {S1P,
                    602:      S1SIZE}/{S2P, S2SIZE} mod 2^D at DEST_PTR, and returns the high D
                    603:      mod BITS_PER_MP_LIMB bits of Q.
                    604:
                    605:      {S1P, S1SIZE} - Q * {S2P, S2SIZE} mod 2^(S1SIZE*BITS_PER_MP_LIMB)
                    606:      is placed at S1P.  Since the low [D/BITS_PER_MP_LIMB] limbs of
                    607:      this difference are zero, it is possible to overwrite the low
                    608:      limbs at S1P with this difference, provided DEST_PTR <= S1P.
                    609:
                    610:      This function requires that S1SIZE * BITS_PER_MP_LIMB >= D, and
                    611:      that {S2P, S2SIZE} is odd.
                    612:
                    613:      *This interface is preliminary.  It might change incompatibly in
                    614:      future revisions.*
                    615:
                    616:  - Function: mp_limb_t mpn_lshift (mp_limb_t * DEST_PTR, const
                    617:           mp_limb_t * SRC_PTR, mp_size_t SRC_SIZE, unsigned long int
                    618:           COUNT)
                    619:      Shift {SRC_PTR, SRC_SIZE} COUNT bits to the left, and write the
                    620:      SRC_SIZE least significant limbs of the result to DEST_PTR.  COUNT
                    621:      might be in the range 1 to n - 1, on an n-bit machine. The bits
                    622:      shifted out to the left are returned.
                    623:
                    624:      Overlapping of the destination space and the source space is
                    625:      allowed in this function, provided DEST_PTR >= SRC_PTR.
                    626:
                    627:      This function is written in assembly for most targets.
                    628:
                    629:  - Function: mp_limp_t mpn_rshift (mp_limb_t * DEST_PTR, const
                    630:           mp_limb_t * SRC_PTR, mp_size_t SRC_SIZE, unsigned long int
                    631:           COUNT)
                    632:      Shift {SRC_PTR, SRC_SIZE} COUNT bits to the right, and write the
                    633:      SRC_SIZE most significant limbs of the result to DEST_PTR.  COUNT
                    634:      might be in the range 1 to n - 1, on an n-bit machine.  The bits
                    635:      shifted out to the right are returned.
                    636:
                    637:      Overlapping of the destination space and the source space is
                    638:      allowed in this function, provided DEST_PTR <= SRC_PTR.
                    639:
                    640:      This function is written in assembly for most targets.
                    641:
                    642:  - Function: int mpn_cmp (const mp_limb_t * SRC1_PTR, const mp_limb_t *
                    643:           SRC2_PTR, mp_size_t SIZE)
                    644:      Compare {SRC1_PTR, SIZE} and {SRC2_PTR, SIZE} and return a
                    645:      positive value if src1 > src2, 0 of they are equal, and a negative
                    646:      value if src1 < src2.
                    647:
                    648:  - Function: mp_size_t mpn_gcd (mp_limb_t * DEST_PTR, mp_limb_t *
                    649:           SRC1_PTR, mp_size_t SRC1_SIZE, mp_limb_t * SRC2_PTR,
                    650:           mp_size_t SRC2_SIZE)
                    651:      Puts at DEST_PTR the greatest common divisor of {SRC1_PTR,
                    652:      SRC1_SIZE} and {SRC2_PTR, SRC2_SIZE}; both source operands are
                    653:      destroyed by the operation.  The size in limbs of the greatest
                    654:      common divisor is returned.
                    655:
                    656:      {SRC1_PTR, SRC1_SIZE} must be odd, and {SRC2_PTR, SRC2_SIZE} must
                    657:      have at least as many bits as {SRC1_PTR, SRC1_SIZE}.
                    658:
                    659:      *This interface is preliminary.  It might change incompatibly in
                    660:      future revisions.*
                    661:
                    662:  - Function: mp_limb_t mpn_gcd_1 (const mp_limb_t * SRC1_PTR, mp_size_t
                    663:           SRC1_SIZE, mp_limb_t SRC2_LIMB)
                    664:      Return the greatest common divisor of {SRC1_PTR, SRC1_SIZE} and
                    665:      SRC2_LIMB, where SRC2_LIMB (as well as SRC1_SIZE) must be
                    666:      different from 0.
                    667:
                    668:  - Function: mp_size_t mpn_gcdext (mp_limb_t * R1P, mp_limb_t * R2P,
                    669:           mp_limb_t * S1P, mp_size_t S1SIZE, mp_limb_t * S2P, mp_size_t
                    670:           S2SIZE)
                    671:      Puts at R1P the greatest common divisor of {S1P, S1SIZE} and {S2P,
                    672:      S2SIZE}.  The first cofactor is written at R2P.  Both source
                    673:      operands are destroyed by the operation.  The size in limbs of the
                    674:      greatest common divisor is returned.
                    675:
                    676:      *This interface is preliminary.  It might change incompatibly in
                    677:      future revisions.*
                    678:
                    679:  - Function: mp_size_t mpn_sqrtrem (mp_limb_t * R1P, mp_limb_t * R2P,
                    680:           const mp_limb_t * SP, mp_size_t SIZE)
                    681:      Compute the square root of {SP, SIZE} and put the result at R1P.
                    682:      Write the remainder at R2P, unless R2P is NULL.
                    683:
                    684:      Return the size of the remainder, whether R2P was NULL or non-NULL.
                    685:      Iff the operand was a perfect square, the return value will be 0.
                    686:
                    687:      The areas at R1P and SP have to be distinct.  The areas at R2P and
                    688:      SP have to be identical or completely separate, not partially
                    689:      overlapping.
                    690:
                    691:      The area at R1P needs to have space for ceil(SIZE/2) limbs.  The
                    692:      area at R2P needs to be SIZE limbs large.
                    693:
                    694:      *This interface is preliminary.  It might change incompatibly in
                    695:      future revisions.*
                    696:
                    697:  - Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE,
                    698:           mp_limb_t * S1P, mp_size_t S1SIZE)
                    699:      Convert {S1P, S1SIZE} to a raw unsigned char array in base BASE.
                    700:      The string is not in ASCII; to convert it to printable format, add
                    701:      the ASCII codes for `0' or `A', depending on the base and range.
                    702:      There may be leading zeros in the string.
                    703:
                    704:      The area at S1P is clobbered.
                    705:
                    706:      Return the number of characters in STR.
                    707:
                    708:      The area at STR has to have space for the largest possible number
                    709:      represented by a S1SIZE long limb array, plus one extra character.
                    710:
                    711:  - Function: mp_size_t mpn_set_str (mp_limb_t * R1P, const char *STR,
                    712:           size_t strsize, int BASE)
                    713:      Convert the raw unsigned char array at STR of length STRSIZE to a
                    714:      limb array {S1P, S1SIZE}.  The base of STR is BASE.
                    715:
                    716:      Return the number of limbs stored in R1P.
                    717:
                    718:  - Function: unsigned long int mpn_scan0 (const mp_limb_t * S1P,
                    719:           unsigned long int BIT)
                    720:      Scan S1P from bit position BIT for the next clear bit.
                    721:
                    722:      It is required that there be a clear bit within the area at S1P at
                    723:      or beyond bit position BIT, so that the function has something to
                    724:      return.
                    725:
                    726:      *This interface is preliminary.  It might change incompatibly in
                    727:      future revisions.*
                    728:
                    729:  - Function: unsigned long int mpn_scan1 (const mp_limb_t * S1P,
                    730:           unsigned long int BIT)
                    731:      Scan S1P from bit position BIT for the next set bit.
                    732:
                    733:      It is required that there be a set bit within the area at S1P at or
                    734:      beyond bit position BIT, so that the function has something to
                    735:      return.
                    736:
                    737:      *This interface is preliminary.  It might change incompatibly in
                    738:      future revisions.*
                    739:
                    740:  - Function: void mpn_random2 (mp_limb_t * R1P, mp_size_t R1SIZE)
                    741:      Generate a random number of length R1SIZE with long strings of
                    742:      zeros and ones in the binary representation, and store it at R1P.
                    743:
                    744:      The generated random numbers are intended for testing the
                    745:      correctness of the implementation of the `mpn' routines.
                    746:
                    747:  - Function: unsigned long int mpn_popcount (const mp_limb_t * S1P,
                    748:           unsigned long int SIZE)
                    749:      Count the number of set bits in {S1P, SIZE}.
                    750:
                    751:  - Function: unsigned long int mpn_hamdist (const mp_limb_t * S1P,
                    752:           const mp_limb_t * S2P, unsigned long int SIZE)
                    753:      Compute the hamming distance between {S1P, SIZE} and {S2P, SIZE}.
                    754:
                    755:  - Function: int mpn_perfect_square_p (const mp_limb_t * S1P, mp_size_t
                    756:           SIZE)
                    757:      Return non-zero iff {S1P, SIZE} is a perfect square.
                    758:
                    759: 
                    760: File: gmp.info,  Node: BSD Compatible Functions,  Next: Custom Allocation,  Prev: Low-level Functions,  Up: Top
                    761:
                    762: Berkeley MP Compatible Functions
                    763: ********************************
                    764:
                    765:    These functions are intended to be fully compatible with the
                    766: Berkeley MP library which is available on many BSD derived U*ix systems.
                    767:
                    768:    The original Berkeley MP library has a usage restriction: you cannot
                    769: use the same variable as both source and destination in a single
                    770: function call.  The compatible functions in GNU MP do not share this
                    771: restriction--inputs and outputs may overlap.
                    772:
                    773:    It is not recommended that new programs are written using these
                    774: functions.  Apart from the incomplete set of functions, the interface
                    775: for initializing `MINT' objects is more error prone, and the `pow'
                    776: function collides with `pow' in `libm.a'.
                    777:
                    778:    Include the header `mp.h' to get the definition of the necessary
                    779: types and functions.  If you are on a BSD derived system, make sure to
                    780: include GNU `mp.h' if you are going to link the GNU `libmp.a' to you
                    781: program.  This means that you probably need to give the -I<dir> option
                    782: to the compiler, where <dir> is the directory where you have GNU `mp.h'.
                    783:
                    784:  - Function: MINT * itom (signed short int INITIAL_VALUE)
                    785:      Allocate an integer consisting of a `MINT' object and dynamic limb
                    786:      space.  Initialize the integer to INITIAL_VALUE.  Return a pointer
                    787:      to the `MINT' object.
                    788:
                    789:  - Function: MINT * xtom (char *INITIAL_VALUE)
                    790:      Allocate an integer consisting of a `MINT' object and dynamic limb
                    791:      space.  Initialize the integer from INITIAL_VALUE, a hexadecimal,
                    792:      '\0'-terminate C string.  Return a pointer to the `MINT' object.
                    793:
                    794:  - Function: void move (MINT *SRC, MINT *DEST)
                    795:      Set DEST to SRC by copying.  Both variables must be previously
                    796:      initialized.
                    797:
                    798:  - Function: void madd (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
                    799:      Add SRC_1 and SRC_2 and put the sum in DESTINATION.
                    800:
                    801:  - Function: void msub (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
                    802:      Subtract SRC_2 from SRC_1 and put the difference in DESTINATION.
                    803:
                    804:  - Function: void mult (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION)
                    805:      Multiply SRC_1 and SRC_2 and put the product in DESTINATION.
                    806:
                    807:  - Function: void mdiv (MINT *DIVIDEND, MINT *DIVISOR, MINT *QUOTIENT,
                    808:           MINT *REMAINDER)
                    809:  - Function: void sdiv (MINT *DIVIDEND, signed short int DIVISOR, MINT
                    810:           *QUOTIENT, signed short int *REMAINDER)
                    811:      Set QUOTIENT to DIVIDEND/DIVISOR, and REMAINDER to DIVIDEND mod
                    812:      DIVISOR.  The quotient is rounded towards zero; the remainder has
                    813:      the same sign as the dividend unless it is zero.
                    814:
                    815:      Some implementations of these functions work differently--or not
                    816:      at all--for negative arguments.
                    817:
                    818:  - Function: void msqrt (MINT *OPERAND, MINT *ROOT, MINT *REMAINDER)
                    819:      Set ROOT to the truncated integer part of the square root of
                    820:      OPERAND.  Set REMAINDER to OPERAND-ROOT*ROOT, (i.e., zero if
                    821:      OPERAND is a perfect square).
                    822:
                    823:      If ROOT and REMAINDER are the same variable, the results are
                    824:      undefined.
                    825:
                    826:  - Function: void pow (MINT *BASE, MINT *EXP, MINT *MOD, MINT *DEST)
                    827:      Set DEST to (BASE raised to EXP) modulo MOD.
                    828:
                    829:  - Function: void rpow (MINT *BASE, signed short int EXP, MINT *DEST)
                    830:      Set DEST to BASE raised to EXP.
                    831:
                    832:  - Function: void gcd (MINT *OPERAND1, MINT *OPERAND2, MINT *RES)
                    833:      Set RES to the greatest common divisor of OPERAND1 and OPERAND2.
                    834:
                    835:  - Function: int mcmp (MINT *OPERAND1, MINT *OPERAND2)
                    836:      Compare OPERAND1 and OPERAND2.  Return a positive value if
                    837:      OPERAND1 > OPERAND2, zero if OPERAND1 = OPERAND2, and a negative
                    838:      value if OPERAND1 < OPERAND2.
                    839:
                    840:  - Function: void min (MINT *DEST)
                    841:      Input a decimal string from `stdin', and put the read integer in
                    842:      DEST.  SPC and TAB are allowed in the number string, and are
                    843:      ignored.
                    844:
                    845:  - Function: void mout (MINT *SRC)
                    846:      Output SRC to `stdout', as a decimal string.  Also output a
                    847:      newline.
                    848:
                    849:  - Function: char * mtox (MINT *OPERAND)
                    850:      Convert OPERAND to a hexadecimal string, and return a pointer to
                    851:      the string.  The returned string is allocated using the default
                    852:      memory allocation function, `malloc' by default.
                    853:
                    854:  - Function: void mfree (MINT *OPERAND)
                    855:      De-allocate, the space used by OPERAND.  *This function should
                    856:      only be passed a value returned by `itom' or `xtom'.*
                    857:
                    858: 
                    859: File: gmp.info,  Node: Custom Allocation,  Next: Contributors,  Prev: BSD Compatible Functions,  Up: Top
                    860:
                    861: Custom Allocation
                    862: *****************
                    863:
                    864:    By default, the MP functions use `malloc', `realloc', and `free' for
                    865: memory allocation.  If `malloc' or `realloc' fails, the MP library
                    866: terminates execution after printing a fatal error message to standard
                    867: error.
                    868:
                    869:    For some applications, you may wish to allocate memory in other
                    870: ways, or you may not want to have a fatal error when there is no more
                    871: memory available.  To accomplish this, you can specify alternative
                    872: memory allocation functions.
                    873:
                    874:  - Function: void mp_set_memory_functions (
                    875:           void *(*ALLOC_FUNC_PTR) (size_t),
                    876:           void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t),
                    877:           void (*FREE_FUNC_PTR) (void *, size_t))
                    878:      Replace the current allocation functions from the arguments.  If
                    879:      an argument is NULL, the corresponding default function is
                    880:      retained.
                    881:
                    882:      *Make sure to call this function in such a way that there are no
                    883:      active MP objects that were allocated using the previously active
                    884:      allocation function!  Usually, that means that you have to call
                    885:      this function before any other MP function.*
                    886:
                    887:    The functions you supply should fit the following declarations:
                    888:
                    889:  - Function: void * allocate_function (size_t ALLOC_SIZE)
                    890:      This function should return a pointer to newly allocated space
                    891:      with at least ALLOC_SIZE storage units.
                    892:
                    893:  - Function: void * reallocate_function (void *PTR, size_t OLD_SIZE,
                    894:           size_t NEW_SIZE)
                    895:      This function should return a pointer to newly allocated space of
                    896:      at least NEW_SIZE storage units, after copying at least the first
                    897:      OLD_SIZE storage units from PTR.  It should also de-allocate the
                    898:      space at PTR.
                    899:
                    900:      You can assume that the space at PTR was formerly returned from
                    901:      `allocate_function' or `reallocate_function', for a request for
                    902:      OLD_SIZE storage units.
                    903:
                    904:  - Function: void deallocate_function (void *PTR, size_t SIZE)
                    905:      De-allocate the space pointed to by PTR.
                    906:
                    907:      You can assume that the space at PTR was formerly returned from
                    908:      `allocate_function' or `reallocate_function', for a request for
                    909:      SIZE storage units.
                    910:
                    911:    (A "storage unit" is the unit in which the `sizeof' operator returns
                    912: the size of an object, normally an 8 bit byte.)
                    913:
                    914: 
                    915: File: gmp.info,  Node: Contributors,  Next: References,  Prev: Custom Allocation,  Up: Top
                    916:
                    917: Contributors
                    918: ************
                    919:
                    920:    I would like to thank Gunnar Sjoedin and Hans Riesel for their help
                    921: with mathematical problems, Richard Stallman for his help with design
                    922: issues and for revising the first version of this manual, Brian Beuning
                    923: and Doug Lea for their testing of early versions of the library.
                    924:
                    925:    John Amanatides of York University in Canada contributed the function
                    926: `mpz_probab_prime_p'.
                    927:
                    928:    Paul Zimmermann of Inria sparked the development of GMP 2, with his
                    929: comparisons between bignum packages.
                    930:
                    931:    Ken Weber (Kent State University, Universidade Federal do Rio Grande
                    932: do Sul) contributed `mpz_gcd', `mpz_divexact', `mpn_gcd', and
                    933: `mpn_bdivmod', partially supported by CNPq (Brazil) grant 301314194-2.
                    934:
                    935:    Per Bothner of Cygnus Support helped to set up MP to use Cygnus'
                    936: configure.  He has also made valuable suggestions and tested numerous
                    937: intermediary releases.
                    938:
                    939:    Joachim Hollman was involved in the design of the `mpf' interface,
                    940: and in the `mpz' design revisions for version 2.
                    941:
                    942:    Bennet Yee contributed the functions `mpz_jacobi' and `mpz_legendre'.
                    943:
                    944:    Andreas Schwab contributed the files `mpn/m68k/lshift.S' and
                    945: `mpn/m68k/rshift.S'.
                    946:
                    947:    The development of floating point functions of GNU MP 2, were
                    948: supported in part by the ESPRIT-BRA (Basic Research Activities) 6846
                    949: project POSSO (POlynomial System SOlving).
                    950:
                    951:    GNU MP 2 was finished and released by TMG Datakonsult,
                    952: Sodermannagatan 5, 116 23 STOCKHOLM, SWEDEN, in cooperation with the
                    953: IDA Center for Computing Sciences, USA.
                    954:
                    955: 
                    956: File: gmp.info,  Node: References,  Prev: Contributors,  Up: Top
                    957:
                    958: References
                    959: **********
                    960:
                    961:    * Donald E. Knuth, "The Art of Computer Programming", vol 2,
                    962:      "Seminumerical Algorithms", 2nd edition, Addison-Wesley, 1981.
                    963:
                    964:    * John D. Lipson, "Elements of Algebra and Algebraic Computing", The
                    965:      Benjamin Cummings Publishing Company Inc, 1981.
                    966:
                    967:    * Richard M. Stallman, "Using and Porting GCC", Free Software
                    968:      Foundation, 1995.
                    969:
                    970:    * Peter L. Montgomery, "Modular Multiplication Without Trial
                    971:      Division", in Mathematics of Computation, volume 44, number 170,
                    972:      April 1985.
                    973:
                    974:    * Torbjorn Granlund and Peter L. Montgomery, "Division by Invariant
                    975:      Integers using Multiplication", in Proceedings of the SIGPLAN
                    976:      PLDI'94 Conference, June 1994.
                    977:
                    978:    * Tudor Jebelean, "An algorithm for exact division", Journal of
                    979:      Symbolic Computation, v. 15, 1993, pp. 169-180.
                    980:
                    981:    * Kenneth Weber, "The accelerated integer GCD algorithm", ACM
                    982:      Transactions on Mathematical Software, v. 21 (March), 1995, pp.
                    983:      111-122.
                    984:
                    985: 
                    986: File: gmp.info,  Node: Concept Index,  Up: Top
                    987:
                    988: Concept Index
                    989: *************
                    990:
                    991: * Menu:
                    992:
                    993: * gmp.h:                                MP Basics.
                    994: * mp.h:                                 BSD Compatible Functions.
                    995: * Arithmetic functions <1>:             Float Arithmetic.
                    996: * Arithmetic functions:                 Integer Arithmetic.
                    997: * Bit manipulation functions:           Integer Logic and Bit Fiddling.
                    998: * BSD MP compatible functions:          BSD Compatible Functions.
                    999: * Comparison functions:                 Float Comparison.
                   1000: * Conditions for copying GNU MP:        Copying.
                   1001: * Conversion functions <1>:             Converting Integers.
                   1002: * Conversion functions:                 Converting Floats.
                   1003: * Copying conditions:                   Copying.
                   1004: * Float arithmetic functions:           Float Arithmetic.
                   1005: * Float assignment functions:           Assigning Floats.
                   1006: * Float comparisons functions:          Float Comparison.
                   1007: * Float functions:                      Floating-point Functions.
                   1008: * Float input and output functions:     I/O of Floats.
                   1009: * Floating-point functions:             Floating-point Functions.
                   1010: * Floating-point number:                MP Basics.
                   1011: * I/O functions <1>:                    I/O of Floats.
                   1012: * I/O functions:                        I/O of Integers.
                   1013: * Initialization and assignment functions <1>: Simultaneous Float Init & Assign.
                   1014: * Initialization and assignment functions: Simultaneous Integer Init & Assign.
                   1015: * Input functions <1>:                  I/O of Integers.
                   1016: * Input functions:                      I/O of Floats.
                   1017: * Installation:                         Installing MP.
                   1018: * Integer:                              MP Basics.
                   1019: * Integer arithmetic functions:         Integer Arithmetic.
                   1020: * Integer assignment functions:         Assigning Integers.
                   1021: * Integer conversion functions:         Converting Integers.
                   1022: * Integer functions:                    Integer Functions.
                   1023: * Integer input and output functions:   I/O of Integers.
                   1024: * Limb:                                 MP Basics.
                   1025: * Logical functions:                    Integer Logic and Bit Fiddling.
                   1026: * Low-level functions:                  Low-level Functions.
                   1027: * Miscellaneous float functions:        Miscellaneous Float Functions.
                   1028: * Miscellaneous integer functions:      Miscellaneous Integer Functions.
                   1029: * Output functions <1>:                 I/O of Floats.
                   1030: * Output functions:                     I/O of Integers.
                   1031: * Rational number:                      MP Basics.
                   1032: * Rational number functions:            Rational Number Functions.
                   1033: * Reporting bugs:                       Reporting Bugs.
                   1034: * User-defined precision:               Floating-point Functions.
                   1035:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>