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

Annotation of OpenXM_contrib/gmp/gmp.info-1, Revision 1.1.1.3

1.1.1.2   maekawa     1: This is gmp.info, produced by makeinfo version 4.0 from gmp.texi.
1.1       maekawa     2:
1.1.1.2   maekawa     3: INFO-DIR-SECTION GNU libraries
1.1       maekawa     4: START-INFO-DIR-ENTRY
1.1.1.2   maekawa     5: * gmp: (gmp).                   GNU Multiple Precision Arithmetic Library.
1.1       maekawa     6: END-INFO-DIR-ENTRY
                      7:
                      8:    This file documents GNU MP, a library for arbitrary-precision
                      9: arithmetic.
                     10:
1.1.1.2   maekawa    11:    Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
                     12: Free Software Foundation, Inc.
1.1       maekawa    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: Top,  Next: Copying,  Prev: (dir),  Up: (dir)
                     30:
                     31: GNU MP
                     32: ******
                     33:
                     34:    This manual documents how to install and use the GNU multiple
1.1.1.3 ! maekawa    35: precision arithmetic library, version 3.1.1.
1.1       maekawa    36:
                     37: * Menu:
                     38:
1.1.1.2   maekawa    39: * Copying::                    GMP Copying Conditions (LGPL).
                     40: * Introduction to GMP::        Brief introduction to GNU MP.
                     41: * Installing GMP::             How to configure and compile the GMP library.
                     42: * GMP Basics::                 What every GMP user should now.
                     43: * Reporting Bugs::             How to usefully report bugs.
                     44: * Integer Functions::          Functions for arithmetic on signed integers.
                     45: * Rational Number Functions::  Functions for arithmetic on rational numbers.
                     46: * Floating-point Functions::   Functions for arithmetic on floats.
                     47: * Low-level Functions::        Fast functions for natural numbers.
                     48: * Random Number Functions::    Functions for generating random numbers.
                     49: * BSD Compatible Functions::   All functions found in BSD MP.
                     50: * Custom Allocation::          How to customize the internal allocation.
1.1       maekawa    51:
1.1.1.2   maekawa    52: * Contributors::              Who brings your this library?
                     53: * References::                 Some useful papers and books to read.
1.1       maekawa    54: * Concept Index::
                     55: * Function Index::
                     56:
                     57: 
1.1.1.2   maekawa    58: File: gmp.info,  Node: Copying,  Next: Introduction to GMP,  Prev: Top,  Up: Top
1.1       maekawa    59:
                     60: GNU MP Copying Conditions
                     61: *************************
                     62:
                     63:    This library is "free"; this means that everyone is free to use it
                     64: and free to redistribute it on a free basis.  The library is not in the
                     65: public domain; it is copyrighted and there are restrictions on its
                     66: distribution, but these restrictions are designed to permit everything
                     67: that a good cooperating citizen would want to do.  What is not allowed
                     68: is to try to prevent others from further sharing any version of this
                     69: library that they might get from you.
                     70:
                     71:    Specifically, we want to make sure that you have the right to give
                     72: away copies of the library, that you receive source code or else can
                     73: get it if you want it, that you can change this library or use pieces
                     74: of it in new free programs, and that you know you can do these things.
                     75:
                     76:    To make sure that everyone has such rights, we have to forbid you to
                     77: deprive anyone else of these rights.  For example, if you distribute
                     78: copies of the GNU MP library, you must give the recipients all the
                     79: rights that you have.  You must make sure that they, too, receive or
                     80: can get the source code.  And you must tell them their rights.
                     81:
                     82:    Also, for our own protection, we must make certain that everyone
                     83: finds out that there is no warranty for the GNU MP library.  If it is
                     84: modified by someone else and passed on, we want their recipients to
                     85: know that what they have is not what we distributed, so that any
                     86: problems introduced by others will not reflect on our reputation.
                     87:
                     88:    The precise conditions of the license for the GNU MP library are
1.1.1.3 ! maekawa    89: found in the Lesser General Public License that accompany the source
1.1       maekawa    90: code.
                     91:
                     92: 
1.1.1.2   maekawa    93: File: gmp.info,  Node: Introduction to GMP,  Next: Installing GMP,  Prev: Copying,  Up: Top
1.1       maekawa    94:
                     95: Introduction to GNU MP
                     96: **********************
                     97:
                     98:    GNU MP is a portable library written in C for arbitrary precision
                     99: arithmetic on integers, rational numbers, and floating-point numbers.
                    100: It aims to provide the fastest possible arithmetic for all applications
                    101: that need higher precision than is directly supported by the basic C
                    102: types.
                    103:
                    104:    Many applications use just a few hundred bits of precision; but some
1.1.1.2   maekawa   105: applications may need thousands or even millions of bits.  GMP is
1.1       maekawa   106: designed to give good performance for both, by choosing algorithms
                    107: based on the sizes of the operands, and by carefully keeping the
                    108: overhead at a minimum.
                    109:
1.1.1.2   maekawa   110:    The speed of GMP is achieved by using fullwords as the basic
1.1       maekawa   111: arithmetic type, by using sophisticated algorithms, by including
                    112: carefully optimized assembly code for the most common inner loops for
                    113: many different CPUs, and by a general emphasis on speed (as opposed to
                    114: simplicity or elegance).
                    115:
1.1.1.2   maekawa   116:    There is carefully optimized assembly code for these CPUs: ARM, DEC
                    117: Alpha 21064, 21164, and 21264, AMD 29000, AMD K6 and Athlon, Hitachi
                    118: SuperH and SH-2, HPPA 1.0, 1.1 and 2.0, Intel Pentium, Pentium
                    119: Pro/Pentium II, generic x86, Intel i960, Motorola MC68000, MC68020,
                    120: MC88100, and MC88110, Motorola/IBM PowerPC 32 and 64, National NS32000,
                    121: IBM POWER, MIPS R3000, R4000, SPARCv7, SuperSPARC, generic SPARCv8,
                    122: UltraSPARC, DEC VAX, and Zilog Z8000.  Some optimizations also for
                    123: Clipper, IBM ROMP (RT), and Pyramid AP/XP.
                    124:
                    125:    There is a mailing list for GMP users.  To join it, send a mail to
                    126: <gmp-request@swox.com> with the word `subscribe' in the message *body*
                    127: (not in the subject line).
                    128:
                    129:    For up-to-date information on GMP, please see the GMP Home Pages at
                    130: `http://www.swox.com/gmp/'.
1.1       maekawa   131:
                    132: How to use this Manual
                    133: ======================
                    134:
1.1.1.2   maekawa   135:    Everyone should read *Note GMP Basics::.  If you need to install the
                    136: library yourself, you need to read *Note Installing GMP::, too.
1.1       maekawa   137:
                    138:    The rest of the manual can be used for later reference, although it
                    139: is probably a good idea to glance through it.
                    140:
                    141: 
1.1.1.2   maekawa   142: File: gmp.info,  Node: Installing GMP,  Next: GMP Basics,  Prev: Introduction to GMP,  Up: Top
                    143:
                    144: Installing GMP
                    145: **************
                    146:
                    147: GMP has an autoconf/automake/libtool based configuration system.  On a
                    148: Unix-like system a basic build can be done with
                    149:
                    150:      ./configure
                    151:      make
1.1       maekawa   152:
1.1.1.2   maekawa   153: Some self-tests can be run with
1.1       maekawa   154:
1.1.1.2   maekawa   155:      make check
                    156:
                    157: And you can install (under `/usr/local' by default) with
                    158:
                    159:      make install
                    160:
                    161: If you experience problems, please report them to <bug-gmp@gnu.org>.
                    162: (*Note Reporting Bugs::, for information on what to include in useful
                    163: bug reports.)
                    164:
                    165: * Menu:
                    166:
                    167: * Build Options::
                    168: * ABI and ISA::
                    169: * Notes for Package Builds::
                    170: * Notes for Particular Systems::
                    171: * Known Build Problems::
                    172:
                    173: 
                    174: File: gmp.info,  Node: Build Options,  Next: ABI and ISA,  Prev: Installing GMP,  Up: Installing GMP
                    175:
                    176: Build Options
                    177: =============
                    178:
                    179: All the usual autoconf configure options are available, run `./configure
                    180: --help' for a summary.
                    181:
                    182: Non-Unix Systems
                    183:      `configure' needs various Unix-like tools installed.  On an MS-DOS
                    184:      system cygwin or djgpp should work.  It might be possible to build
                    185:      without the help of `configure', certainly all the code is there,
                    186:      but unfortunately you'll be on your own.
                    187:
                    188: Object Directory
                    189:      To compile in a separate object directory, `cd' to that directory,
                    190:      and prefix the configure command with the path to the GMP source
                    191:      directory.  For example `../src/gmp/configure'.  Not all `make'
                    192:      programs have the necessary features (`VPATH') to support this.
                    193:      In particular, SunOS and Slowaris `make' have bugs that make them
                    194:      unable to build from a separate object directory.  Use GNU `make'
                    195:      instead.
                    196:
                    197: `--disable-shared', `--disable-static'
                    198:      By default both shared and static libraries are built (where
                    199:      possible), but one or other can be disabled.  Shared libraries are
                    200:      very slightly slower, having a small cost on each function call,
                    201:      but result in smaller executables and permit code sharing between
                    202:      separate running processes.
                    203:
                    204: `--target=CPU-VENDOR-OS'
                    205:      The build target can be specified in the usual way, for either
                    206:      native or cross compilation.
                    207:
                    208:      If `--target' isn't given, `./configure' builds for the host
                    209:      system as determined by `./config.guess'.  On some systems this
                    210:      can't distinguish between different CPUs in a family, and you
                    211:      should check the guess.  Running `./config.guess' on the target
                    212:      system will also show the relevant `VENDOR-OS', if you don't
                    213:      already know what it should be.
1.1       maekawa   214:
                    215:      In general, if you want a library that runs as fast as possible,
1.1.1.2   maekawa   216:      you should configure GMP for the exact CPU type your system uses.
                    217:      However, this may mean the binaries won't run on older members of
                    218:      the family, and might run slower on other members, older or newer.
                    219:      The best idea is always to build GMP for the exact machine type
                    220:      you intend to run it on.
                    221:
                    222:      The following CPU targets have specific assembly code support.  See
                    223:      `configure.in' for which `mpn' subdirectories get used by each.
                    224:
                    225:         * Alpha: `alpha', `alphaev5', `alphaev6'
                    226:
                    227:         * Hitachi: `sh', `sh2'
                    228:
                    229:         * HPPA: `hppa1.0', `hppa1.1', `hppa2.0', `hppa2.0w'
                    230:
                    231:         * MIPS: `mips', `mips3',
                    232:
                    233:         * Motorola: `m68000', `m68k', `m88k', `m88110'
1.1       maekawa   234:
1.1.1.2   maekawa   235:         * POWER: `power1', `power2', `power2sc', `powerpc', `powerpc64'
                    236:
                    237:         * SPARC: `sparc', `sparcv8', `microsparc', `supersparc',
                    238:           `sparcv9', `ultrasparc', `sparc64'
                    239:
                    240:         * 80x86 family: `i386', `i486', `i586', `pentium', `pentiummmx',
                    241:           `pentiumpro', `pentium2', `pentium3', `k6', `k62', `k63',
                    242:           `athlon'
                    243:
                    244:         * Other: `a29k', `arm', `clipper', `i960', `ns32k', `pyramid',
                    245:           `vax', `z8k'
                    246:
                    247:      CPUs not listed use generic C code.  If some of the assembly code
                    248:      causes problems, the generic C code can be selected with CPU
                    249:      `none'.
                    250:
                    251: `CC', `CFLAGS'
                    252:      The C compiler used is chosen from among some likely candidates,
                    253:      with GCC normally preferred if it's present.  The usual
                    254:      `CC=whatever' can be passed to `./configure' to choose something
                    255:      different.
                    256:
                    257:      For some configurations specific compiler flags are set based on
1.1.1.3 ! maekawa   258:      the target CPU and compiler, see `CFLAGS' in the generated
        !           259:      `Makefile's.  The usual `CFLAGS="-whatever"' can be passed to
        !           260:      `./configure' to use something different or to set good flags for
        !           261:      systems GMP doesn't otherwise know.
        !           262:
        !           263:      Note that if `CC' is set then `CFLAGS' must also be set.  This
        !           264:      applies even if `CC' is merely one of the choices GMP would make
        !           265:      itself.  This may change in a future release.
1.1.1.2   maekawa   266:
                    267: `--disable-alloca'
                    268:      By default, GMP allocates temporary workspace using `alloca' if
                    269:      that function is available, or `malloc' if not.  If you're working
                    270:      with large numbers and `alloca' overflows the available stack
                    271:      space, you can build with `--disable-alloca' to use `malloc'
                    272:      instead.  `malloc' will probably be slightly slower than `alloca'.
                    273:
                    274:      When not using `alloca', it's actually the allocation function
                    275:      selected with `mp_set_memory_functions' that's used, this being
                    276:      `malloc' by default.  *Note Custom Allocation::.
                    277:
                    278:      Depending on your system, the only indication of stack overflow
                    279:      might be a segmentation violation.  It might be possible to
                    280:      increase available stack space with `limit', `ulimit' or
                    281:      `setrlimit', or under DJGPP with `stubedit' or `_stklen'.
                    282:
                    283: `--enable-fft'
                    284:      By default multiplications are done using Karatsuba and 3-way
                    285:      Toom-Cook algorithms, but a Fermat FFT can be enabled, for use on
                    286:      large to very large operands.  Currently the FFT is recommended
                    287:      only for knowledgeable users who check the algorithm thresholds
                    288:      for their CPU.
                    289:
                    290: `--enable-mpbsd'
                    291:      The Berkeley MP compatibility library (`libmp.a') and header file
                    292:      (`mp.h') are built and installed only if `--enable-mpbsd' is used.
                    293:      *Note BSD Compatible Functions::.
                    294:
                    295: `MPN_PATH'
                    296:      Various assembler versions of mpn subroutines are provided, and,
                    297:      for a given CPU target, a search is made though a path to choose a
                    298:      version of each.  For example `sparcv8' has path `"sparc32/v8
                    299:      sparc32 generic"', which means it looks first for v8 code, falls
                    300:      back on plain sparc32, and finally falls back on generic C.
                    301:      Knowledgeable users with special requirements can specify a path
                    302:      with `MPN_PATH="dir list"'.  This will normally be unnecessary
                    303:      because all sensible paths should be available under one or other
                    304:      CPU target.
                    305:
                    306: Demonstration Programs
                    307:      The `demos' subdirectory has some sample programs using GMP.  These
                    308:      aren't built or installed, but there's a `Makefile' with rules for
                    309:      them.  For instance, `make pexpr' and then `./pexpr 68^975+10'.
                    310:
                    311: Documentation
                    312:      The document you're now reading is `gmp.texi'.  The usual automake
                    313:      targets are available to make `gmp.ps' and/or `gmp.dvi'.  Some
                    314:      supplementary notes can be found in the `doc' subdirectory.
                    315:
                    316: 
                    317: File: gmp.info,  Node: ABI and ISA,  Next: Notes for Package Builds,  Prev: Build Options,  Up: Installing GMP
1.1       maekawa   318:
1.1.1.2   maekawa   319: ABI and ISA
                    320: ===========
1.1       maekawa   321:
1.1.1.2   maekawa   322:    ABI (Application Binary Interface) refers to the calling conventions
                    323: between functions, meaning what registers are used and what sizes the
                    324: various C data types are.  ISA (Instruction Set Architecture) refers to
                    325: the instructions and registers a CPU has available.
1.1       maekawa   326:
1.1.1.2   maekawa   327:    Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI
                    328: defined, the latter for compatibility with older CPUs in the family.
                    329: GMP chooses the best ABI available for a given target system, and this
                    330: generally gives significantly greater speed.
1.1       maekawa   331:
1.1.1.2   maekawa   332:    The burden is on application programs and cooperating libraries to
                    333: ensure they match the ABI chosen by GMP.  Fortunately this presents a
                    334: difficulty only on a few systems, and if you have one of them then the
                    335: performance gains are enough to make it worth the trouble.
1.1       maekawa   336:
1.1.1.2   maekawa   337:    Some of what's described in this section may change in future
                    338: releases of GMP.
1.1       maekawa   339:
1.1.1.2   maekawa   340: HPPA 2.0
                    341:      CPU target `hppa2.0' uses the hppa2.0n 32-bit ABI, but either a
                    342:      32-bit or 64-bit limb.
1.1       maekawa   343:
1.1.1.2   maekawa   344:      A 64-bit limb is available on HP-UX 10 or up when using `c89'.  No
                    345:      `gcc' support is planned for 64-bit operations in this ABI.
                    346:      Applications must be compiled with the same options as GMP, which
                    347:      means
1.1       maekawa   348:
1.1.1.2   maekawa   349:           c89  +DA2.0 +e -D_LONG_LONG_LIMB
1.1       maekawa   350:
1.1.1.2   maekawa   351:      A 32-bit limb is used in other cases, and no special compiler
                    352:      options are needed.
1.1       maekawa   353:
1.1.1.2   maekawa   354:      CPU target `hppa2.0w' uses the hppa2.0w 64-bit ABI, which is
                    355:      available on HP-UX 11 or up when using `c89'.  `gcc' support for
                    356:      this is in progress.  Applications must be compiled for the same
                    357:      ABI, which means
1.1       maekawa   358:
1.1.1.2   maekawa   359:           c89  +DD64
1.1       maekawa   360:
1.1.1.2   maekawa   361: MIPS 3 and 4 under IRIX 6
                    362:      Targets `mips*-*-irix6*' use the n32 ABI and a 64-bit limb.
                    363:      Applications must be compiled for the same ABI, which means either
1.1       maekawa   364:
1.1.1.2   maekawa   365:           gcc  -mabi=n32
                    366:           cc   -n32
1.1       maekawa   367:
1.1.1.2   maekawa   368: PowerPC 64
                    369:      CPU target `powerpc64' uses either the 32-bit ABI or the AIX
                    370:      64-bit ABI.  The latter is used on targets `powerpc64-*-aix*' and
                    371:      applications must be compiled using either
1.1       maekawa   372:
1.1.1.2   maekawa   373:           gcc  -maix64
                    374:           xlc  -q64
1.1       maekawa   375:
1.1.1.2   maekawa   376:      On other systems the 32-bit ABI is used, but with 64-bit limbs
                    377:      provided by `long long' in `gcc'.  Applications must be compiled
                    378:      using
1.1       maekawa   379:
1.1.1.2   maekawa   380:           gcc  -D_LONG_LONG_LIMB
1.1       maekawa   381:
1.1.1.2   maekawa   382: Sparc V9
                    383:      On a sparc v9 CPU, either the v8plus 32-bit ABI or v9 64-bit ABI
                    384:      is used.  Targets `ultrasparc*-*-solaris2.[7-9]',
                    385:      `sparcv9-*-solaris2.[7-9]' and `sparc64-*-linux*' use the v9 ABI,
                    386:      if the compiler supports it.  Other targets use the v8plus ABI
                    387:      (but with as much of the v9 ISA as possible in the circumstances).
                    388:      Note that Solaris prior to 2.7 doesn't save all registers
                    389:      properly, and hence uses the v8plus ABI.
1.1       maekawa   390:
1.1.1.2   maekawa   391:      For the v8plus ABI, applications can be compiled with either
1.1       maekawa   392:
1.1.1.2   maekawa   393:           gcc  -mv8plus
                    394:           cc   -xarch=v8plus
                    395:
                    396:      For the v9 ABI, applications must be compiled with either
                    397:
                    398:           gcc  -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9
                    399:           cc   -xarch=v9
                    400:
                    401:      Don't be confused by the names of these options, they're called
                    402:      `arch' but they effectively control the ABI.
                    403:
                    404: 
                    405: File: gmp.info,  Node: Notes for Package Builds,  Next: Notes for Particular Systems,  Prev: ABI and ISA,  Up: Installing GMP
                    406:
                    407: Notes for Package Builds
                    408: ========================
                    409:
                    410:    GMP should present no great difficulties for packaging in a binary
                    411: distribution.
                    412:
                    413:    Libtool is used to build the library and `-version-info' is set
                    414: appropriately, having started from `3:0:0' in GMP 3.0.  The GMP 3 series
                    415: will be upwardly binary compatible in each release, but may be adding
                    416: additional function interfaces.  On systems where libtool versioning is
                    417: not fully checked by the loader, an auxiliary mechanism may be needed
                    418: to express that a dynamic linked application depends on a new enough
                    419: minor version of GMP.
                    420:
                    421:    When building a package for a CPU family, care should be taken to use
                    422: `--target' to choose the least common denominator among the CPUs which
                    423: might use the package.  For example this might necessitate `i386' for
                    424: x86s, or plain `sparc' (meaning V7) for SPARCs.
                    425:
                    426:    Users who care about speed will want GMP built for their exact CPU
                    427: type, to make use of the available optimizations.  Providing a way to
                    428: suitably rebuild a package may be useful.  This could be as simple as
                    429: making it possible for a user to omit `--target' in a build so
                    430: `./config.guess' will detect the CPU.  But a way to manually specify a
                    431: `--target' will be wanted for systems where `./config.guess' is inexact.
                    432:
                    433: 
                    434: File: gmp.info,  Node: Notes for Particular Systems,  Next: Known Build Problems,  Prev: Notes for Package Builds,  Up: Installing GMP
                    435:
                    436: Notes for Particular Systems
                    437: ============================
                    438:
                    439: AIX 4.3
                    440:      Targets `*-*-aix4.[3-9]*' have shared libraries disabled since
                    441:      they seem to fail on AIX 4.3.
                    442:
                    443: OpenBSD 2.6
                    444:      `m4' in this release of OpenBSD has a bug in `eval' that makes it
                    445:      unsuitable for `.asm' file processing.  `./configure' will detect
                    446:      the problem and either abort or choose another m4 in the `PATH'.
                    447:      The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4.
                    448:
                    449: Sparc V8
                    450:      Using CPU target `sparcv8' or `supersparc' on relevant systems will
                    451:      give a significant performance increase over the V7 code.
                    452:
                    453: SunOS 4
                    454:      `/usr/bin/m4' lacks various features needed to process `.asm'
                    455:      files, and instead `./configure' will automatically use
                    456:      `/usr/5bin/m4', which we believe is always available (if not then
                    457:      use GNU m4).
                    458:
                    459: x86 Pentium and PentiumPro
                    460:      The Intel Pentium P5 code is good for its intended P5, but quite
                    461:      slow when run on Intel P6 class chips (PPro, P-II, P-III).  `i386'
                    462:      is a better choice if you're making binaries that must run on both.
                    463:
                    464: x86 MMX and old GAS
                    465:      Old versions of GAS don't support MMX instructions, in particular
                    466:      version 1.92.3 that comes with FreeBSD 2.2.8 doesn't (and
                    467:      unfortunately there's no newer assembler for that system).
                    468:
                    469:      If the target CPU has MMX code but the assembler doesn't support
                    470:      it, a warning is given and non-MMX code is used instead.  This
                    471:      will be an inferior build, since the MMX code that's present is
                    472:      there because it's faster than the corresponding plain integer
                    473:      code.
                    474:
                    475: x86 GCC 2.95.2 `-march=pentiumpro'
                    476:      GCC 2.95.2 miscompiles `mpz/powm.c' when `-march=pentiumpro' is
                    477:      used, so that option is omitted from the `CFLAGS' chosen for
                    478:      relevant CPUs.  The problem is believed to be fixed in GCC 2.96.
                    479:
                    480: 
                    481: File: gmp.info,  Node: Known Build Problems,  Prev: Notes for Particular Systems,  Up: Installing GMP
1.1       maekawa   482:
                    483: Known Build Problems
                    484: ====================
                    485:
1.1.1.2   maekawa   486:    You might find more up-to-date information at
                    487: `http://www.swox.com/gmp/'.
                    488:
                    489: Generic C on a 64-bit system
                    490:      When making a generic C build using `--target=none' on a 64-bit
                    491:      system (meaning where `unsigned long' is 64 bits),
                    492:      `BITS_PER_MP_LIMB', `BITS_PER_LONGINT' and `BYTES_PER_MP_LIMB' in
                    493:      `mpn/generic/gmp-mparam.h' need to be changed to 64 and 8.  This
                    494:      will hopefully be automated in a future version of GMP.
                    495:
                    496: NeXT prior to 3.3
                    497:      The system compiler on old versions of NeXT was a massacred and
                    498:      old GCC, even if it called itself `cc'.  This compiler cannot be
                    499:      used to build GMP, you need to get a real GCC, and install that
                    500:      before you compile GMP.  (NeXT may have fixed this in release 3.3
                    501:      of their system.)
                    502:
                    503: POWER and PowerPC
                    504:      Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP
                    505:      on POWER or PowerPC.  If you want to use GCC for these machines,
                    506:      get GCC 2.7.2.1 (or later).
                    507:
                    508: Sequent Symmetry
                    509:      Use the GNU assembler instead of the system assembler, since the
                    510:      latter has serious bugs.
                    511:
                    512: Stripped Libraries
                    513:      GNU binutils `strip' should not be used on the static libraries
                    514:      `libgmp.a' and `libmp.a', neither directly nor via `make
                    515:      install-strip'.  It can be used on the shared libraries
                    516:      `libgmp.so' and `libmp.so' though.
                    517:
                    518:      Currently (binutils 2.10.0), `strip' extracts archives into a
                    519:      single directory, but GMP contains multiple object files of the
                    520:      same name (eg. three versions of `init.o'), and they overwrite
                    521:      each other, leaving only the one that happens to be last.
                    522:
                    523:      If stripped static libraries are wanted, the suggested workaround
                    524:      is to build normally, strip the separate object files, and do
                    525:      another `make all' to rebuild.  Alternately `CFLAGS' with `-g'
                    526:      omitted can always be used if it's just debugging which is
                    527:      unwanted.
                    528:
                    529: SunOS 4 Native Tools
                    530:      The setting for `GSYM_PREFIX' in `config.m4' may be incorrectly
                    531:      determined when using the native `grep', leading at link-time to
                    532:      undefined symbols like `___gmpn_add_n'.  To fix this, after running
                    533:      `./configure', change the relevant line in `config.m4' to
                    534:      `define(<GSYM_PREFIX>, <_>)'.
                    535:
                    536:      The `ranlib' command will need to be run manually when building a
                    537:      static library with the native `ar'.  After `make', run `ranlib
                    538:      .libs/libgmp.a', and when using `--enable-mpbsd' run `ranlib
                    539:      .libs/libmp.a' too.
                    540:
1.1.1.3 ! maekawa   541: `version.c' compilation
        !           542:      The current `./configure' relies on certain features of `sed' that
        !           543:      some old systems don't have.  One symptom is `VERSION' not being
        !           544:      set correctly in the generated `config.h', leading to `version.c'
        !           545:      failing to compile.  Irix 5.3, MIPS RISC/OS and Ultrix 4.4 are
        !           546:      believed to be affected.  GNU `sed' is recommended, though it
        !           547:      might be possible to build by editing `config.h' manually instead.
        !           548:
1.1.1.2   maekawa   549: VAX running Ultrix
                    550:      You need to build and install the GNU assembler before you compile
                    551:      GMP.  The VAX assembly in GMP uses an instruction (`jsobgtr') that
                    552:      cannot be assembled by the Ultrix assembler.
1.1       maekawa   553:
                    554: 
1.1.1.2   maekawa   555: File: gmp.info,  Node: GMP Basics,  Next: Reporting Bugs,  Prev: Installing GMP,  Up: Top
1.1       maekawa   556:
1.1.1.2   maekawa   557: GMP Basics
                    558: **********
1.1       maekawa   559:
1.1.1.2   maekawa   560:    All declarations needed to use GMP are collected in the include file
1.1       maekawa   561: `gmp.h'.  It is designed to work with both C and C++ compilers.
                    562:
1.1.1.2   maekawa   563:    *Using functions, macros, data types, etc. not documented in this
                    564: manual is strongly discouraged.  If you do so your application is
                    565: guaranteed to be incompatible with future versions of GMP.*
                    566:
                    567: * Menu:
                    568:
                    569: * Nomenclature and Types::             Which data types are there?
                    570: * Function Classes::                   How the functions are organized.
                    571: * GMP Variable Conventions::           Some rules and hints about variables.
                    572: * GMP and Reentrancy::                 What about reentrancy?
                    573: * Useful Macros and Constants::        Convenient helpers.
                    574: * Compatibility with older versions::  Compatibility issues.
                    575: * Getting the Latest Version of GMP::          How to get the software.
                    576:
                    577: 
                    578: File: gmp.info,  Node: Nomenclature and Types,  Next: Function Classes,  Prev: GMP Basics,  Up: GMP Basics
                    579:
1.1       maekawa   580: Nomenclature and Types
                    581: ======================
                    582:
                    583: In this manual, "integer" usually means a multiple precision integer, as
1.1.1.2   maekawa   584: defined by the GMP library.  The C data type for such integers is
1.1       maekawa   585: `mpz_t'.  Here are some examples of how to declare such integers:
                    586:
                    587:      mpz_t sum;
                    588:
                    589:      struct foo { mpz_t x, y; };
                    590:
                    591:      mpz_t vec[20];
                    592:
                    593: "Rational number" means a multiple precision fraction.  The C data type
                    594: for these fractions is `mpq_t'.  For example:
                    595:
                    596:      mpq_t quotient;
                    597:
                    598: "Floating point number" or "Float" for short, is an arbitrary precision
1.1.1.2   maekawa   599: mantissa with a limited precision exponent.  The C data type for such
1.1       maekawa   600: objects is `mpf_t'.
                    601:
                    602: A "limb" means the part of a multi-precision number that fits in a
                    603: single word.  (We chose this word because a limb of the human body is
                    604: analogous to a digit, only larger, and containing several digits.)
                    605: Normally a limb contains 32 or 64 bits.  The C data type for a limb is
                    606: `mp_limb_t'.
                    607:
1.1.1.2   maekawa   608: 
                    609: File: gmp.info,  Node: Function Classes,  Next: GMP Variable Conventions,  Prev: Nomenclature and Types,  Up: GMP Basics
                    610:
1.1       maekawa   611: Function Classes
                    612: ================
                    613:
1.1.1.2   maekawa   614:    There are six classes of functions in the GMP library:
1.1       maekawa   615:
                    616:   1. Functions for signed integer arithmetic, with names beginning with
                    617:      `mpz_'.  The associated type is `mpz_t'.  There are about 100
                    618:      functions in this class.
                    619:
                    620:   2. Functions for rational number arithmetic, with names beginning with
                    621:      `mpq_'.  The associated type is `mpq_t'.  There are about 20
                    622:      functions in this class, but the functions in the previous class
                    623:      can be used for performing arithmetic on the numerator and
                    624:      denominator separately.
                    625:
                    626:   3. Functions for floating-point arithmetic, with names beginning with
                    627:      `mpf_'.  The associated type is `mpf_t'.  There are about 50
                    628:      functions is this class.
                    629:
1.1.1.2   maekawa   630:   4. Functions compatible with Berkeley GMP, such as `itom', `madd', and
1.1       maekawa   631:      `mult'.  The associated type is `MINT'.
                    632:
                    633:   5. Fast low-level functions that operate on natural numbers.  These
                    634:      are used by the functions in the preceding groups, and you can
                    635:      also call them directly from very time-critical user programs.
                    636:      These functions' names begin with `mpn_'.  There are about 30
                    637:      (hard-to-use) functions in this class.
                    638:
                    639:      The associated type is array of `mp_limb_t'.
                    640:
                    641:   6. Miscellaneous functions.  Functions for setting up custom
1.1.1.2   maekawa   642:      allocation and functions for generating random numbers.
                    643:
                    644: 
                    645: File: gmp.info,  Node: GMP Variable Conventions,  Next: GMP and Reentrancy,  Prev: Function Classes,  Up: GMP Basics
1.1       maekawa   646:
1.1.1.2   maekawa   647: GMP Variable Conventions
                    648: ========================
1.1       maekawa   649:
1.1.1.2   maekawa   650:    As a general rule, all GMP functions expect output arguments before
1.1       maekawa   651: input arguments.  This notation is based on an analogy with the
                    652: assignment operator.  (The BSD MP compatibility functions disobey this
                    653: rule, having the output argument(s) last.)
                    654:
1.1.1.2   maekawa   655:    GMP lets you use the same variable for both input and output in one
                    656: call.  For example, the main function for integer multiplication,
                    657: `mpz_mul', can be used to square `x' and put the result back in `x' with
1.1       maekawa   658:
1.1.1.2   maekawa   659:      mpz_mul (x, x, x);
                    660:
                    661:    Before you can assign to a GMP variable, you need to initialize it
1.1       maekawa   662: by calling one of the special initialization functions.  When you're
                    663: done with a variable, you need to clear it out, using one of the
                    664: functions for that purpose.  Which function to use depends on the type
                    665: of variable.  See the chapters on integer functions, rational number
                    666: functions, and floating-point functions for details.
                    667:
                    668:    A variable should only be initialized once, or at least cleared out
                    669: between each initialization.  After a variable has been initialized, it
                    670: may be assigned to any number of times.
                    671:
1.1.1.2   maekawa   672:    For efficiency reasons, avoid initializing and clearing out a GMP
                    673: variable in a loop.  Instead, initialize it before entering the loop,
                    674: and clear it out after the loop has exited.
                    675:
                    676:    GMP variables are small, containing only a couple of sizes, and
                    677: pointers to allocated data.  Once you have initialized a GMP variable,
                    678: you don't need to worry about space allocation.  All functions in GMP
                    679: automatically allocate additional space when a variable does not
                    680: already have enough.  They do not, however, reduce the space when a
                    681: smaller value is stored.  Most of the time this policy is best, since
                    682: it avoids frequent re-allocation.
                    683:
                    684:    When a variable of type `mpz_t' is used as a function parameter, it's
                    685: effectively a call-by-reference, meaning anything the function does to
                    686: it will be be done to the original in the caller.  When a function is
                    687: going to return an `mpz_t' result, it should provide a separate
                    688: parameter or parameters that it sets, like the GMP library functions
                    689: do.  A `return' of an `mpz_t' doesn't return the object, only a pointer
                    690: to it, and this is almost certainly not what you want.  All this
                    691: applies to `mpq_t' and `mpf_t' too.
                    692:
                    693:    Here's an example function accepting an `mpz_t' parameter, doing a
                    694: certain calculation, and returning a result.
                    695:
                    696:      void
                    697:      myfunction (mpz_t result, mpz_t param, unsigned long n)
                    698:      {
                    699:        unsigned long  i;
                    700:
                    701:        mpz_mul_ui (result, param, n);
                    702:        for (i = 1; i < n; i++)
                    703:          mpz_add_ui (result, result, i*7);
                    704:      }
                    705:
                    706:      int
                    707:      main (void)
                    708:      {
                    709:        mpz_t  r, n;
                    710:        mpz_init (r);
                    711:        mpz_init_set_str (n, "123456", 0);
                    712:
                    713:        myfunction (r, n, 20L);
                    714:        mpz_out_str (stdout, 10, r); printf ("\n");
                    715:
                    716:        return 0;
                    717:      }
                    718:
                    719:    This example will work if `result' and `param' are the same
                    720: variable, just like the library functions.  But sometimes this is
                    721: tricky to arrange, and an application might not want to bother for its
                    722: own subroutines.
                    723:
                    724:    `mpz_t' is actually implemented as a one-element array of a certain
                    725: structure type.  This is why using it to declare a variable gives an
                    726: object with the fields GMP needs, but then using it as a parameter
                    727: passes a pointer to the object.  Note that the actual contents of an
                    728: `mpz_t' are for internal use only and you should not access them
                    729: directly if you want your code to be compatible with future GMP
                    730: releases.
                    731:
                    732: 
                    733: File: gmp.info,  Node: GMP and Reentrancy,  Next: Useful Macros and Constants,  Prev: GMP Variable Conventions,  Up: GMP Basics
                    734:
                    735: GMP and Reentrancy
                    736: ==================
                    737:
                    738:    The GMP code is reentrant and thread-safe, with some exceptions:
                    739:
                    740:    * The function `mpf_set_default_prec' saves the selected precision in
                    741:      a global variable.
                    742:
                    743:    * The function `mp_set_memory_functions' uses several global
                    744:      variables for storing the selected memory allocation functions.
                    745:
                    746:    * If the memory allocation functions set by a call to
                    747:      `mp_set_memory_functions' (or `malloc' and friends by default) are
                    748:      not reentrant, GMP will not be reentrant either.
                    749:
                    750:    * The old random number functions (`mpz_random', etc) use a random
                    751:      number generator from the C library, usually `mrand48' or
                    752:      `random'.  These routines are not reentrant, since they rely on
                    753:      global state.  (However the newer random number functions that
                    754:      accept a `gmp_randstate_t' parameter are reentrant.)
                    755:
1.1.1.3 ! maekawa   756:    * If `alloca' is not available, or GMP is configured with
        !           757:      `--disable-alloca', the library is not reentrant, due to the
        !           758:      current implementation of `stack-alloc.c'.  In the generated
        !           759:      `config.h', `USE_STACK_ALLOC' set to 1 will mean not reentrant.
        !           760:
1.1.1.2   maekawa   761: 
                    762: File: gmp.info,  Node: Useful Macros and Constants,  Next: Compatibility with older versions,  Prev: GMP and Reentrancy,  Up: GMP Basics
1.1       maekawa   763:
                    764: Useful Macros and Constants
                    765: ===========================
                    766:
                    767:  - Global Constant: const int mp_bits_per_limb
                    768:      The number of bits per limb.
                    769:
                    770:  - Macro: __GNU_MP_VERSION
                    771:  - Macro: __GNU_MP_VERSION_MINOR
1.1.1.2   maekawa   772:  - Macro: __GNU_MP_VERSION_PATCHLEVEL
                    773:      The major and minor GMP version, and patch level, respectively, as
                    774:      integers.  For GMP i.j, these numbers will be i, j, and 0,
                    775:      respectively.  For GMP i.j.k, these numbers will be i, j, and k,
                    776:      respectively.
1.1       maekawa   777:
1.1.1.2   maekawa   778: 
                    779: File: gmp.info,  Node: Compatibility with older versions,  Next: Getting the Latest Version of GMP,  Prev: Useful Macros and Constants,  Up: GMP Basics
1.1       maekawa   780:
1.1.1.2   maekawa   781: Compatibility with older versions
                    782: =================================
1.1       maekawa   783:
1.1.1.2   maekawa   784:    This version of GMP is upwardly binary compatible with versions 3.0
                    785: and 3.0.1, and upwardly compatible at the source level with versions
                    786: 2.0, 2.0.1, and 2.0.2, with the following exceptions.
1.1       maekawa   787:
1.1.1.2   maekawa   788:    * `mpn_gcd' had its source arguments swapped as of GMP 3.0 for
                    789:      consistency with other `mpn' functions.
1.1       maekawa   790:
1.1.1.2   maekawa   791:    * `mpf_get_prec' counted precision slightly differently in GMP 3.0
                    792:      and 3.0.1, but in 3.1 has reverted to the 2.0.x style.
1.1       maekawa   793:
                    794:
1.1.1.2   maekawa   795:    There are a number of compatibility issues between GMP 1 and GMP 2
                    796: that of course also apply when porting applications from GMP 1 to GMP
                    797: 3.  Please see the GMP 2 manual for details.
1.1       maekawa   798:
1.1.1.2   maekawa   799: 
                    800: File: gmp.info,  Node: Getting the Latest Version of GMP,  Prev: Compatibility with older versions,  Up: GMP Basics
1.1       maekawa   801:
1.1.1.2   maekawa   802: Getting the Latest Version of GMP
                    803: =================================
1.1       maekawa   804:
1.1.1.2   maekawa   805:    The latest version of the GMP library is available at
                    806: `ftp://ftp.gnu.org/pub/gnu/gmp'.  Many sites around the world mirror
                    807: `ftp.gnu.org'; please use a mirror site near you, see
                    808: `http://www.gnu.org/order/ftp.html'.
1.1       maekawa   809:
                    810: 
1.1.1.2   maekawa   811: File: gmp.info,  Node: Reporting Bugs,  Next: Integer Functions,  Prev: GMP Basics,  Up: Top
1.1       maekawa   812:
                    813: Reporting Bugs
                    814: **************
                    815:
1.1.1.2   maekawa   816:    If you think you have found a bug in the GMP library, please
1.1       maekawa   817: investigate it and report it.  We have made this library available to
1.1.1.2   maekawa   818: you, and it is not too much to ask you to report the bugs you find.
                    819: Before you report a bug, you may want to check
                    820: `http://www.swox.com/gmp/' for patches for this release.
                    821:
                    822:    Please include the following in any report,
                    823:
                    824:    * The GMP version number, and if pre-packaged or patched then say so.
1.1       maekawa   825:
1.1.1.2   maekawa   826:    * A test program that makes it possible for us to reproduce the bug.
                    827:      Include instructions on how to run the program.
1.1       maekawa   828:
1.1.1.2   maekawa   829:    * A description of what is wrong.  If the results are incorrect, in
                    830:      what way.  If you get a crash, say so.
1.1       maekawa   831:
1.1.1.2   maekawa   832:    * If you get a crash, include a stack backtrace from the debugger if
                    833:      it's informative (`where' in `gdb', or `$C' in `adb').
                    834:
                    835:    * *Please do not send core dumps, executables or `strace's.*
                    836:
                    837:    * The configuration options you used when building GMP, if any.
                    838:
                    839:    * The name of the compiler and its version.  For `gcc', get the
                    840:      version with `gcc -v', otherwise perhaps `what `which cc`', or
                    841:      similar.
                    842:
                    843:    * The output from running `uname -a'.
                    844:
                    845:    * The output from running `./config.guess'.
                    846:
                    847:    * If the bug is related to `configure', then the contents of
                    848:      `config.log'.
                    849:
                    850:    * If the bug is related to an `asm' file not assembling, then the
                    851:      contents of `config.m4'.
1.1       maekawa   852:
                    853:    It is not uncommon that an observed problem is actually due to a bug
1.1.1.2   maekawa   854: in the compiler; the GMP code tends to explore interesting corners in
                    855: compilers.
1.1       maekawa   856:
1.1.1.2   maekawa   857:    If your bug report is good, we will do our best to help you get a
1.1       maekawa   858: corrected version of the library; if the bug report is poor, we won't
1.1.1.2   maekawa   859: do anything about it (except maybe ask you to send a better report).
1.1       maekawa   860:
1.1.1.2   maekawa   861:    Send your report to: <bug-gmp@gnu.org>.
1.1       maekawa   862:
                    863:    If you think something in this manual is unclear, or downright
                    864: incorrect, or if the language needs to be improved, please send a note
                    865: to the same address.
                    866:
                    867: 
                    868: File: gmp.info,  Node: Integer Functions,  Next: Rational Number Functions,  Prev: Reporting Bugs,  Up: Top
                    869:
                    870: Integer Functions
                    871: *****************
                    872:
1.1.1.2   maekawa   873:    This chapter describes the GMP functions for performing integer
1.1       maekawa   874: arithmetic.  These functions start with the prefix `mpz_'.
                    875:
1.1.1.2   maekawa   876:    GMP integers are stored in objects of type `mpz_t'.
1.1       maekawa   877:
                    878: * Menu:
                    879:
                    880: * Initializing Integers::
                    881: * Assigning Integers::
                    882: * Simultaneous Integer Init & Assign::
                    883: * Converting Integers::
                    884: * Integer Arithmetic::
1.1.1.2   maekawa   885: * Integer Division::
                    886: * Integer Exponentiation::
                    887: * Integer Roots::
                    888: * Number Theoretic Functions::
                    889: * Integer Comparisons::
1.1       maekawa   890: * Integer Logic and Bit Fiddling::
                    891: * I/O of Integers::
1.1.1.2   maekawa   892: * Integer Random Numbers::
1.1       maekawa   893: * Miscellaneous Integer Functions::
                    894:
                    895: 
1.1.1.2   maekawa   896: File: gmp.info,  Node: Initializing Integers,  Next: Assigning Integers,  Prev: Integer Functions,  Up: Integer Functions
1.1       maekawa   897:
1.1.1.2   maekawa   898: Initialization Functions
                    899: ========================
1.1       maekawa   900:
                    901:    The functions for integer arithmetic assume that all integer objects
                    902: are initialized.  You do that by calling the function `mpz_init'.
                    903:
                    904:  - Function: void mpz_init (mpz_t INTEGER)
                    905:      Initialize INTEGER with limb space and set the initial numeric
                    906:      value to 0.  Each variable should normally only be initialized
                    907:      once, or at least cleared out (using `mpz_clear') between each
                    908:      initialization.
                    909:
                    910:    Here is an example of using `mpz_init':
                    911:
                    912:      {
                    913:        mpz_t integ;
                    914:        mpz_init (integ);
                    915:        ...
                    916:        mpz_add (integ, ...);
                    917:        ...
                    918:        mpz_sub (integ, ...);
                    919:
                    920:        /* Unless the program is about to exit, do ... */
                    921:        mpz_clear (integ);
                    922:      }
                    923:
                    924: As you can see, you can store new values any number of times, once an
                    925: object is initialized.
                    926:
                    927:  - Function: void mpz_clear (mpz_t INTEGER)
                    928:      Free the limb space occupied by INTEGER.  Make sure to call this
                    929:      function for all `mpz_t' variables when you are done with them.
                    930:
                    931:  - Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC)
                    932:      Change the limb space allocation to NEW_ALLOC limbs.  This
                    933:      function is not normally called from user code, but it can be used
                    934:      to give memory back to the heap, or to increase the space of a
                    935:      variable to avoid repeated automatic re-allocation.
                    936:
                    937:  - Function: void mpz_array_init (mpz_t INTEGER_ARRAY[], size_t
                    938:           ARRAY_SIZE, mp_size_t FIXED_NUM_BITS)
                    939:      Allocate *fixed* limb space for all ARRAY_SIZE integers in
                    940:      INTEGER_ARRAY.  The fixed allocation for each integer in the array
                    941:      is enough to store FIXED_NUM_BITS.  If the fixed space will be
                    942:      insufficient for storing the result of a subsequent calculation,
                    943:      the result is unpredictable.
                    944:
                    945:      This function is useful for decreasing the working set for some
                    946:      algorithms that use large integer arrays.
                    947:
                    948:      There is no way to de-allocate the storage allocated by this
                    949:      function.  Don't call `mpz_clear'!
                    950:
                    951: 
                    952: File: gmp.info,  Node: Assigning Integers,  Next: Simultaneous Integer Init & Assign,  Prev: Initializing Integers,  Up: Integer Functions
                    953:
                    954: Assignment Functions
1.1.1.2   maekawa   955: ====================
1.1       maekawa   956:
                    957:    These functions assign new values to already initialized integers
1.1.1.2   maekawa   958: (*note Initializing Integers::).
1.1       maekawa   959:
                    960:  - Function: void mpz_set (mpz_t ROP, mpz_t OP)
                    961:  - Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP)
                    962:  - Function: void mpz_set_si (mpz_t ROP, signed long int OP)
                    963:  - Function: void mpz_set_d (mpz_t ROP, double OP)
                    964:  - Function: void mpz_set_q (mpz_t ROP, mpq_t OP)
                    965:  - Function: void mpz_set_f (mpz_t ROP, mpf_t OP)
                    966:      Set the value of ROP from OP.
                    967:
                    968:  - Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE)
                    969:      Set the value of ROP from STR, a '\0'-terminated C string in base
                    970:      BASE.  White space is allowed in the string, and is simply
                    971:      ignored.  The base may vary from 2 to 36.  If BASE is 0, the
                    972:      actual base is determined from the leading characters: if the
                    973:      first two characters are `0x' or `0X', hexadecimal is assumed,
                    974:      otherwise if the first character is `0', octal is assumed,
                    975:      otherwise decimal is assumed.
                    976:
                    977:      This function returns 0 if the entire string up to the '\0' is a
                    978:      valid number in base BASE.  Otherwise it returns -1.
                    979:
1.1.1.2   maekawa   980:      [It turns out that it is not entirely true that this function
                    981:      ignores white-space.  It does ignore it between digits, but not
                    982:      after a minus sign or within or after "0x".  We are considering
                    983:      changing the definition of this function, making it fail when
                    984:      there is any white-space in the input, since that makes a lot of
                    985:      sense.  Please tell us your opinion about this change.  Do you
                    986:      really want it to accept "3 14" as meaning 314 as it does now?]
                    987:
                    988:  - Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2)
                    989:      Swap the values ROP1 and ROP2 efficiently.
                    990:
1.1       maekawa   991: 
                    992: File: gmp.info,  Node: Simultaneous Integer Init & Assign,  Next: Converting Integers,  Prev: Assigning Integers,  Up: Integer Functions
                    993:
                    994: Combined Initialization and Assignment Functions
1.1.1.2   maekawa   995: ================================================
1.1       maekawa   996:
1.1.1.2   maekawa   997:    For convenience, GMP provides a parallel series of
                    998: initialize-and-set functions which initialize the output and then store
                    999: the value there.  These functions' names have the form `mpz_init_set...'
1.1       maekawa  1000:
                   1001:    Here is an example of using one:
                   1002:
                   1003:      {
                   1004:        mpz_t pie;
                   1005:        mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10);
                   1006:        ...
                   1007:        mpz_sub (pie, ...);
                   1008:        ...
                   1009:        mpz_clear (pie);
                   1010:      }
                   1011:
                   1012: Once the integer has been initialized by any of the `mpz_init_set...'
                   1013: functions, it can be used as the source or destination operand for the
                   1014: ordinary integer functions.  Don't use an initialize-and-set function
                   1015: on a variable already initialized!
                   1016:
                   1017:  - Function: void mpz_init_set (mpz_t ROP, mpz_t OP)
                   1018:  - Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP)
                   1019:  - Function: void mpz_init_set_si (mpz_t ROP, signed long int OP)
                   1020:  - Function: void mpz_init_set_d (mpz_t ROP, double OP)
                   1021:      Initialize ROP with limb space and set the initial numeric value
                   1022:      from OP.
                   1023:
                   1024:  - Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE)
                   1025:      Initialize ROP and set its value like `mpz_set_str' (see its
                   1026:      documentation above for details).
                   1027:
                   1028:      If the string is a correct base BASE number, the function returns
                   1029:      0; if an error occurs it returns -1.  ROP is initialized even if
                   1030:      an error occurs.  (I.e., you have to call `mpz_clear' for it.)
                   1031:
                   1032: 
                   1033: File: gmp.info,  Node: Converting Integers,  Next: Integer Arithmetic,  Prev: Simultaneous Integer Init & Assign,  Up: Integer Functions
                   1034:
                   1035: Conversion Functions
                   1036: ====================
                   1037:
1.1.1.2   maekawa  1038:    This section describes functions for converting GMP integers to
                   1039: standard C types.  Functions for converting _to_ GMP integers are
                   1040: described in *Note Assigning Integers:: and *Note I/O of Integers::.
                   1041:
                   1042:  - Function: mp_limb_t mpz_getlimbn (mpz_t OP, mp_size_t N)
                   1043:      Return limb #N from OP.  This function allows for very efficient
                   1044:      decomposition of a number in its limbs.
                   1045:
                   1046:      The function `mpz_size' can be used to determine the useful range
                   1047:      for N.
1.1       maekawa  1048:
                   1049:  - Function: unsigned long int mpz_get_ui (mpz_t OP)
                   1050:      Return the least significant part from OP.  This function combined
                   1051:      with
                   1052:      `mpz_tdiv_q_2exp(..., OP, CHAR_BIT*sizeof(unsigned long int))' can
1.1.1.2   maekawa  1053:      be used to decompose an integer into unsigned longs.
1.1       maekawa  1054:
                   1055:  - Function: signed long int mpz_get_si (mpz_t OP)
                   1056:      If OP fits into a `signed long int' return the value of OP.
                   1057:      Otherwise return the least significant part of OP, with the same
                   1058:      sign as OP.
                   1059:
                   1060:      If OP is too large to fit in a `signed long int', the returned
1.1.1.2   maekawa  1061:      result is probably not very useful.  To find out if the value will
                   1062:      fit, use the function `mpz_fits_slong_p'.
1.1       maekawa  1063:
                   1064:  - Function: double mpz_get_d (mpz_t OP)
                   1065:      Convert OP to a double.
                   1066:
                   1067:  - Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP)
                   1068:      Convert OP to a string of digits in base BASE.  The base may vary
                   1069:      from 2 to 36.
                   1070:
1.1.1.2   maekawa  1071:      If STR is `NULL', space for the result string is allocated using
                   1072:      the default allocation function.
1.1       maekawa  1073:
1.1.1.2   maekawa  1074:      If STR is not `NULL', it should point to a block of storage enough
1.1       maekawa  1075:      large for the result.  To find out the right amount of space to
                   1076:      provide for STR, use `mpz_sizeinbase (OP, BASE) + 2'.  The two
                   1077:      extra bytes are for a possible minus sign, and for the terminating
                   1078:      null character.
                   1079:
1.1.1.2   maekawa  1080:      A pointer to the result string is returned.  This pointer will
                   1081:      will either equal STR, or if that is `NULL', will point to the
                   1082:      allocated storage.
                   1083:
1.1       maekawa  1084: 
1.1.1.2   maekawa  1085: File: gmp.info,  Node: Integer Arithmetic,  Next: Integer Division,  Prev: Converting Integers,  Up: Integer Functions
1.1       maekawa  1086:
                   1087: Arithmetic Functions
                   1088: ====================
                   1089:
                   1090:  - Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2)
                   1091:  - Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int
                   1092:           OP2)
                   1093:      Set ROP to OP1 + OP2.
                   1094:
                   1095:  - Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2)
                   1096:  - Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int
                   1097:           OP2)
                   1098:      Set ROP to OP1 - OP2.
                   1099:
                   1100:  - Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2)
1.1.1.2   maekawa  1101:  - Function: void mpz_mul_si (mpz_t ROP, mpz_t OP1, long int OP2)
1.1       maekawa  1102:  - Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int
                   1103:           OP2)
                   1104:      Set ROP to OP1 times OP2.
                   1105:
1.1.1.2   maekawa  1106:  - Function: void mpz_addmul_ui (mpz_t ROP, mpz_t OP1, unsigned long
                   1107:           int OP2)
                   1108:      Add OP1 times OP2 to ROP.
                   1109:
1.1       maekawa  1110:  - Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, unsigned long int
                   1111:           OP2)
                   1112:      Set ROP to OP1 times 2 raised to OP2.  This operation can also be
                   1113:      defined as a left shift, OP2 steps.
                   1114:
                   1115:  - Function: void mpz_neg (mpz_t ROP, mpz_t OP)
                   1116:      Set ROP to -OP.
                   1117:
                   1118:  - Function: void mpz_abs (mpz_t ROP, mpz_t OP)
                   1119:      Set ROP to the absolute value of OP.
                   1120:

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