gmp.texi
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:420k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. input texinfo    @c -*-texinfo-*-
  2. @c %**start of header
  3. @setfilename gmp.info
  4. @documentencoding ISO-8859-1
  5. @include version.texi
  6. @settitle GNU MP @value{VERSION}
  7. @synindex tp fn
  8. @iftex
  9. @afourpaper
  10. @end iftex
  11. @comment %**end of header
  12. @copying
  13. This manual describes how to install and use the GNU multiple precision
  14. arithmetic library, version @value{VERSION}.
  15. Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
  16. 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
  17. Permission is granted to copy, distribute and/or modify this document under
  18. the terms of the GNU Free Documentation License, Version 1.3 or any later
  19. version published by the Free Software Foundation; with no Invariant Sections,
  20. with the Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover
  21. Texts being ``You have freedom to copy and modify this GNU Manual, like GNU
  22. software''.  A copy of the license is included in
  23. @ref{GNU Free Documentation License}.
  24. @end copying
  25. @c  Note the @ref above must be on one line, a line break in an @ref within
  26. @c  @copying will bomb in recent texinfo.tex (eg. 2004-04-07.08 which comes
  27. @c  with texinfo 4.7), with messages about missing @endcsname.
  28. @c  Texinfo version 4.2 or up will be needed to process this file.
  29. @c
  30. @c  The version number and edition number are taken from version.texi provided
  31. @c  by automake (note that it's regenerated only if you configure with
  32. @c  --enable-maintainer-mode).
  33. @c
  34. @c  Notes discussing the present version number of GMP in relation to previous
  35. @c  ones (for instance in the "Compatibility" section) must be updated at
  36. @c  manually though.
  37. @c
  38. @c  @cindex entries have been made for function categories and programming
  39. @c  topics.  The "mpn" section is not included in this, because a beginner
  40. @c  looking for "GCD" or something is only going to be confused by pointers to
  41. @c  low level routines.
  42. @c
  43. @c  @cindex entries are present for processors and systems when there's
  44. @c  particular notes concerning them, but not just for everything GMP
  45. @c  supports.
  46. @c
  47. @c  Index entries for files use @code rather than @file, @samp or @option,
  48. @c  since the latter come out with quotes in TeX, which are nice in the text
  49. @c  but don't look so good in index columns.
  50. @c
  51. @c  Tex:
  52. @c
  53. @c  A suitable texinfo.tex is supplied, a newer one should work equally well.
  54. @c
  55. @c  HTML:
  56. @c
  57. @c  Nothing special is done for links to external manuals, they just come out
  58. @c  in the usual makeinfo style, eg. "../libc/Locales.html".  If you have
  59. @c  local copies of such manuals then this is a good thing, if not then you
  60. @c  may want to search-and-replace to some online source.
  61. @c
  62. @dircategory GNU libraries
  63. @direntry
  64. * gmp: (gmp).                   GNU Multiple Precision Arithmetic Library.
  65. @end direntry
  66. @c  html <meta name="description" content="...">
  67. @documentdescription
  68. How to install and use the GNU multiple precision arithmetic library, version @value{VERSION}.
  69. @end documentdescription
  70. @c smallbook
  71. @finalout
  72. @setchapternewpage on
  73. @ifnottex
  74. @node Top, Copying, (dir), (dir)
  75. @top GNU MP
  76. @end ifnottex
  77. @iftex
  78. @titlepage
  79. @title GNU MP
  80. @subtitle The GNU Multiple Precision Arithmetic Library
  81. @subtitle Edition @value{EDITION}
  82. @subtitle @value{UPDATED}
  83. @author by Torbj@"orn Granlund and the GMP development team
  84. @c @email{tg@@gmplib.org}
  85. @c Include the Distribution inside the titlepage so
  86. @c that headings are turned off.
  87. @tex
  88. globalparindent=0pt
  89. globalparskip=8pt
  90. globalbaselineskip=13pt
  91. @end tex
  92. @page
  93. @vskip 0pt plus 1filll
  94. @end iftex
  95. @insertcopying
  96. @ifnottex
  97. @sp 1
  98. @end ifnottex
  99. @iftex
  100. @end titlepage
  101. @headings double
  102. @end iftex
  103. @c  Don't bother with contents for html, the menus seem adequate.
  104. @ifnothtml
  105. @contents
  106. @end ifnothtml
  107. @menu
  108. * Copying::                    GMP Copying Conditions (LGPL).
  109. * Introduction to GMP::        Brief introduction to GNU MP.
  110. * Installing GMP::             How to configure and compile the GMP library.
  111. * GMP Basics::                 What every GMP user should know.
  112. * Reporting Bugs::             How to usefully report bugs.
  113. * Integer Functions::          Functions for arithmetic on signed integers.
  114. * Rational Number Functions::  Functions for arithmetic on rational numbers.
  115. * Floating-point Functions::   Functions for arithmetic on floats.
  116. * Low-level Functions::        Fast functions for natural numbers.
  117. * Random Number Functions::    Functions for generating random numbers.
  118. * Formatted Output::           @code{printf} style output.
  119. * Formatted Input::            @code{scanf} style input.
  120. * C++ Class Interface::        Class wrappers around GMP types.
  121. * BSD Compatible Functions::   All functions found in BSD MP.
  122. * Custom Allocation::          How to customize the internal allocation.
  123. * Language Bindings::          Using GMP from other languages.
  124. * Algorithms::                 What happens behind the scenes.
  125. * Internals::                  How values are represented behind the scenes.
  126. * Contributors::               Who brings you this library?
  127. * References::                 Some useful papers and books to read.
  128. * GNU Free Documentation License::
  129. * Concept Index::
  130. * Function Index::
  131. @end menu
  132. @c  @m{T,N} is $T$ in tex or @math{N} otherwise.  This is an easy way to give
  133. @c  different forms for math in tex and info.  Commas in N or T don't work,
  134. @c  but @C{} can be used instead.  , works in info but not in tex.
  135. @iftex
  136. @macro m {T,N}
  137. @tex$T$@end tex
  138. @end macro
  139. @end iftex
  140. @ifnottex
  141. @macro m {T,N}
  142. @math{N}
  143. @end macro
  144. @end ifnottex
  145. @macro C {}
  146. ,
  147. @end macro
  148. @c  @ms{V,N} is $V_N$ in tex or just vn otherwise.  This suits simple
  149. @c  subscripts like @ms{x,0}.
  150. @iftex
  151. @macro ms {V,N}
  152. @tex$V_{N}$@end tex
  153. @end macro
  154. @end iftex
  155. @ifnottex
  156. @macro ms {V,N}
  157. V\N
  158. @end macro
  159. @end ifnottex
  160. @c  @nicode{S} is plain S in info, or @code{S} elsewhere.  This can be used
  161. @c  when the quotes that @code{} gives in info aren't wanted, but the
  162. @c  fontification in tex or html is wanted.  Doesn't work as @nicode{'\0'}
  163. @c  though (gives two backslashes in tex).
  164. @ifinfo
  165. @macro nicode {S}
  166. S
  167. @end macro
  168. @end ifinfo
  169. @ifnotinfo
  170. @macro nicode {S}
  171. @code{S}
  172. @end macro
  173. @end ifnotinfo
  174. @c  @nisamp{S} is plain S in info, or @samp{S} elsewhere.  This can be used
  175. @c  when the quotes that @samp{} gives in info aren't wanted, but the
  176. @c  fontification in tex or html is wanted.
  177. @ifinfo
  178. @macro nisamp {S}
  179. S
  180. @end macro
  181. @end ifinfo
  182. @ifnotinfo
  183. @macro nisamp {S}
  184. @samp{S}
  185. @end macro
  186. @end ifnotinfo
  187. @c  Usage: @GMPtimes{}
  188. @c  Give either times or the word "times".
  189. @tex
  190. gdefGMPtimes{times}
  191. @end tex
  192. @ifnottex
  193. @macro GMPtimes
  194. times
  195. @end macro
  196. @end ifnottex
  197. @c  Usage: @GMPmultiply{}
  198. @c  Give * in info, or nothing in tex.
  199. @tex
  200. gdefGMPmultiply{}
  201. @end tex
  202. @ifnottex
  203. @macro GMPmultiply
  204. *
  205. @end macro
  206. @end ifnottex
  207. @c  Usage: @GMPabs{x}
  208. @c  Give either |x| in tex, or abs(x) in info or html.
  209. @tex
  210. gdefGMPabs#1{|#1|}
  211. @end tex
  212. @ifnottex
  213. @macro GMPabs {X}
  214. @abs{}(X)
  215. @end macro
  216. @end ifnottex
  217. @c  Usage: @GMPfloor{x}
  218. @c  Give either lfloor xrfloor in tex, or floor(x) in info or html.
  219. @tex
  220. gdefGMPfloor#1{lfloor #1rfloor}
  221. @end tex
  222. @ifnottex
  223. @macro GMPfloor {X}
  224. floor(X)
  225. @end macro
  226. @end ifnottex
  227. @c  Usage: @GMPceil{x}
  228. @c  Give either lceil xrceil in tex, or ceil(x) in info or html.
  229. @tex
  230. gdefGMPceil#1{lceil #1 rceil}
  231. @end tex
  232. @ifnottex
  233. @macro GMPceil {X}
  234. ceil(X)
  235. @end macro
  236. @end ifnottex
  237. @c  Math operators already available in tex, made available in info too.
  238. @c  For example @bmod{} can be used in both tex and info.
  239. @ifnottex
  240. @macro bmod
  241. mod
  242. @end macro
  243. @macro gcd
  244. gcd
  245. @end macro
  246. @macro ge
  247. >=
  248. @end macro
  249. @macro le
  250. <=
  251. @end macro
  252. @macro log
  253. log
  254. @end macro
  255. @macro min
  256. min
  257. @end macro
  258. @macro leftarrow
  259. <-
  260. @end macro
  261. @macro rightarrow
  262. ->
  263. @end macro
  264. @end ifnottex
  265. @c  New math operators.
  266. @c  @abs{} can be used in both tex and info, or just abs in tex.
  267. @tex
  268. gdefabs{mathop{rm abs}}
  269. @end tex
  270. @ifnottex
  271. @macro abs
  272. abs
  273. @end macro
  274. @end ifnottex
  275. @c  @cross{} is a times symbol in tex, or an "x" in info.  In tex it works
  276. @c  inside or outside $ $.
  277. @tex
  278. gdefcross{ifmmodetimeselse$times$fi}
  279. @end tex
  280. @ifnottex
  281. @macro cross
  282. x
  283. @end macro
  284. @end ifnottex
  285. @c  @times{} made available as a "*" in info and html (already works in tex).
  286. @ifnottex
  287. @macro times
  288. *
  289. @end macro
  290. @end ifnottex
  291. @c  Usage: @W{text}
  292. @c  Like @w{} but working in math mode too.
  293. @tex
  294. gdefW#1{ifmmode{#1}elsew{#1}fi}
  295. @end tex
  296. @ifnottex
  297. @macro W {S}
  298. @w{S}
  299. @end macro
  300. @end ifnottex
  301. @c  Usage: GMPdisplay{text}
  302. @c  Put the given text in an @display style indent, but without turning off
  303. @c  paragraph reflow etc.
  304. @tex
  305. gdefGMPdisplay#1{%
  306. noindent
  307. advanceleftskip by lispnarrowing
  308. #1par}
  309. @end tex
  310. @c  Usage: GMPhat
  311. @c  A new hat that will work in math mode, unlike the texinfo redefined
  312. @c  version.
  313. @tex
  314. gdefGMPhat{mathaccent"705E}
  315. @end tex
  316. @c  Usage: GMPraise{text}
  317. @c  For use in a $ $ math expression as an alternative to "^".  This is good
  318. @c  for @code{} in an exponent, since there seems to be no superscript font
  319. @c  for that.
  320. @tex
  321. gdefGMPraise#1{mskip0.5thinmuskiphbox{raise0.8exhbox{#1}}}
  322. @end tex
  323. @c  Usage: @texlinebreak{}
  324. @c  A line break as per @*, but only in tex.
  325. @iftex
  326. @macro texlinebreak
  327. @*
  328. @end macro
  329. @end iftex
  330. @ifnottex
  331. @macro texlinebreak
  332. @end macro
  333. @end ifnottex
  334. @c  Usage: @maybepagebreak
  335. @c  Allow tex to insert a page break, if it feels the urge.
  336. @c  Normally blocks of @deftypefun/funx are kept together, which can lead to
  337. @c  some poor page break positioning if it's a big block, like the sets of
  338. @c  division functions etc.
  339. @tex
  340. gdefmaybepagebreak{penalty0}
  341. @end tex
  342. @ifnottex
  343. @macro maybepagebreak
  344. @end macro
  345. @end ifnottex
  346. @c  Usage: @GMPreftop{info,title}
  347. @c  Usage: @GMPpxreftop{info,title}
  348. @c
  349. @c  Like @ref{} and @pxref{}, but designed for a reference to the top of a
  350. @c  document, not a particular section.  The TeX output for plain @ref insists
  351. @c  on printing a particular section, GMPreftop gives just the title.
  352. @c
  353. @c  The texinfo manual recommends putting a likely section name in references
  354. @c  like this, eg. "Introduction", but it seems better to just give the title.
  355. @c
  356. @iftex
  357. @macro GMPreftop{info,title}
  358. @i{title}
  359. @end macro
  360. @macro GMPpxreftop{info,title}
  361. see @i{title}
  362. @end macro
  363. @end iftex
  364. @c
  365. @ifnottex
  366. @macro GMPreftop{info,title}
  367. @ref{Top,title,title,info,title}
  368. @end macro
  369. @macro GMPpxreftop{info,title}
  370. @pxref{Top,title,title,info,title}
  371. @end macro
  372. @end ifnottex
  373. @node Copying, Introduction to GMP, Top, Top
  374. @comment  node-name, next, previous,  up
  375. @unnumbered GNU MP Copying Conditions
  376. @cindex Copying conditions
  377. @cindex Conditions for copying GNU MP
  378. @cindex License conditions
  379. This library is @dfn{free}; this means that everyone is free to use it and
  380. free to redistribute it on a free basis.  The library is not in the public
  381. domain; it is copyrighted and there are restrictions on its distribution, but
  382. these restrictions are designed to permit everything that a good cooperating
  383. citizen would want to do.  What is not allowed is to try to prevent others
  384. from further sharing any version of this library that they might get from
  385. you.@refill
  386. Specifically, we want to make sure that you have the right to give away copies
  387. of the library, that you receive source code or else can get it if you want
  388. it, that you can change this library or use pieces of it in new free programs,
  389. and that you know you can do these things.@refill
  390. To make sure that everyone has such rights, we have to forbid you to deprive
  391. anyone else of these rights.  For example, if you distribute copies of the GNU
  392. MP library, you must give the recipients all the rights that you have.  You
  393. must make sure that they, too, receive or can get the source code.  And you
  394. must tell them their rights.@refill
  395. Also, for our own protection, we must make certain that everyone finds out
  396. that there is no warranty for the GNU MP library.  If it is modified by
  397. someone else and passed on, we want their recipients to know that what they
  398. have is not what we distributed, so that any problems introduced by others
  399. will not reflect on our reputation.@refill
  400. The precise conditions of the license for the GNU MP library are found in the
  401. Lesser General Public License version 3 that accompanies the source code,
  402. see @file{COPYING.LIB}.  Certain demonstration programs are provided under the
  403. terms of the plain General Public License version 3, see @file{COPYING}.
  404. @node Introduction to GMP, Installing GMP, Copying, Top
  405. @comment  node-name,  next,  previous,  up
  406. @chapter Introduction to GNU MP
  407. @cindex Introduction
  408. GNU MP is a portable library written in C for arbitrary precision arithmetic
  409. on integers, rational numbers, and floating-point numbers.  It aims to provide
  410. the fastest possible arithmetic for all applications that need higher
  411. precision than is directly supported by the basic C types.
  412. Many applications use just a few hundred bits of precision; but some
  413. applications may need thousands or even millions of bits.  GMP is designed to
  414. give good performance for both, by choosing algorithms based on the sizes of
  415. the operands, and by carefully keeping the overhead at a minimum.
  416. The speed of GMP is achieved by using fullwords as the basic arithmetic type,
  417. by using sophisticated algorithms, by including carefully optimized assembly
  418. code for the most common inner loops for many different CPUs, and by a general
  419. emphasis on speed (as opposed to simplicity or elegance).
  420. There is assembly code for these CPUs:
  421. @cindex CPU types
  422. ARM,
  423. DEC Alpha 21064, 21164, and 21264,
  424. AMD 29000,
  425. AMD K6, K6-2, Athlon, and Athlon64,
  426. Hitachi SuperH and SH-2,
  427. HPPA 1.0, 1.1 and 2.0,
  428. Intel Pentium, Pentium Pro/II/III, Pentium 4, generic x86,
  429. Intel IA-64, i960,
  430. Motorola MC68000, MC68020, MC88100, and MC88110,
  431. Motorola/IBM PowerPC 32 and 64,
  432. National NS32000,
  433. IBM POWER,
  434. MIPS R3000, R4000,
  435. SPARCv7, SuperSPARC, generic SPARCv8, UltraSPARC,
  436. DEC VAX,
  437. and
  438. Zilog Z8000.
  439. Some optimizations also for
  440. Cray vector systems,
  441. Clipper,
  442. IBM ROMP (RT),
  443. and
  444. Pyramid AP/XP.
  445. @cindex Home page
  446. @cindex Web page
  447. @noindent
  448. For up-to-date information on GMP, please see the GMP web pages at
  449. @display
  450. @uref{http://gmplib.org/}
  451. @end display
  452. @cindex Latest version of GMP
  453. @cindex Anonymous FTP of latest version
  454. @cindex FTP of latest version
  455. @noindent
  456. The latest version of the library is available at
  457. @display
  458. @uref{ftp://ftp.gnu.org/gnu/gmp/}
  459. @end display
  460. Many sites around the world mirror @samp{ftp.gnu.org}, please use a mirror
  461. near you, see @uref{http://www.gnu.org/order/ftp.html} for a full list.
  462. @cindex Mailing lists
  463. There are three public mailing lists of interest.  One for release
  464. announcements, one for general questions and discussions about usage of the GMP
  465. library and one for bug reports.  For more information, see
  466. @display
  467. @uref{http://gmplib.org/mailman/listinfo/}.
  468. @end display
  469. The proper place for bug reports is @email{gmp-bugs@@gmplib.org}.  See
  470. @ref{Reporting Bugs} for information about reporting bugs.
  471. @sp 1
  472. @section How to use this Manual
  473. @cindex About this manual
  474. Everyone should read @ref{GMP Basics}.  If you need to install the library
  475. yourself, then read @ref{Installing GMP}.  If you have a system with multiple
  476. ABIs, then read @ref{ABI and ISA}, for the compiler options that must be used
  477. on applications.
  478. The rest of the manual can be used for later reference, although it is
  479. probably a good idea to glance through it.
  480. @node Installing GMP, GMP Basics, Introduction to GMP, Top
  481. @comment  node-name,  next,  previous,  up
  482. @chapter Installing GMP
  483. @cindex Installing GMP
  484. @cindex Configuring GMP
  485. @cindex Building GMP
  486. GMP has an autoconf/automake/libtool based configuration system.  On a
  487. Unix-like system a basic build can be done with
  488. @example
  489. ./configure
  490. make
  491. @end example
  492. @noindent
  493. Some self-tests can be run with
  494. @example
  495. make check
  496. @end example
  497. @noindent
  498. And you can install (under @file{/usr/local} by default) with
  499. @example
  500. make install
  501. @end example
  502. If you experience problems, please report them to @email{gmp-bugs@@gmplib.org}.
  503. See @ref{Reporting Bugs}, for information on what to include in useful bug
  504. reports.
  505. @menu
  506. * Build Options::
  507. * ABI and ISA::
  508. * Notes for Package Builds::
  509. * Notes for Particular Systems::
  510. * Known Build Problems::
  511. * Performance optimization::
  512. @end menu
  513. @node Build Options, ABI and ISA, Installing GMP, Installing GMP
  514. @section Build Options
  515. @cindex Build options
  516. All the usual autoconf configure options are available, run @samp{./configure
  517. --help} for a summary.  The file @file{INSTALL.autoconf} has some generic
  518. installation information too.
  519. @table @asis
  520. @item Tools
  521. @cindex Non-Unix systems
  522. @samp{configure} requires various Unix-like tools.  See @ref{Notes for
  523. Particular Systems}, for some options on non-Unix systems.
  524. It might be possible to build without the help of @samp{configure}, certainly
  525. all the code is there, but unfortunately you'll be on your own.
  526. @item Build Directory
  527. @cindex Build directory
  528. To compile in a separate build directory, @command{cd} to that directory, and
  529. prefix the configure command with the path to the GMP source directory.  For
  530. example
  531. @example
  532. cd /my/build/dir
  533. /my/sources/gmp-@value{VERSION}/configure
  534. @end example
  535. Not all @samp{make} programs have the necessary features (@code{VPATH}) to
  536. support this.  In particular, SunOS and Slowaris @command{make} have bugs that
  537. make them unable to build in a separate directory.  Use GNU @command{make}
  538. instead.
  539. @item @option{--prefix} and @option{--exec-prefix}
  540. @cindex Prefix
  541. @cindex Exec prefix
  542. @cindex Install prefix
  543. @cindex @code{--prefix}
  544. @cindex @code{--exec-prefix}
  545. The @option{--prefix} option can be used in the normal way to direct GMP to
  546. install under a particular tree.  The default is @samp{/usr/local}.
  547. @option{--exec-prefix} can be used to direct architecture-dependent files like
  548. @file{libgmp.a} to a different location.  This can be used to share
  549. architecture-independent parts like the documentation, but separate the
  550. dependent parts.  Note however that @file{gmp.h} and @file{mp.h} are
  551. architecture-dependent since they encode certain aspects of @file{libgmp}, so
  552. it will be necessary to ensure both @file{$prefix/include} and
  553. @file{$exec_prefix/include} are available to the compiler.
  554. @item @option{--disable-shared}, @option{--disable-static}
  555. @cindex @code{--disable-shared}
  556. @cindex @code{--disable-static}
  557. By default both shared and static libraries are built (where possible), but
  558. one or other can be disabled.  Shared libraries result in smaller executables
  559. and permit code sharing between separate running processes, but on some CPUs
  560. are slightly slower, having a small cost on each function call.
  561. @item Native Compilation, @option{--build=CPU-VENDOR-OS}
  562. @cindex Native compilation
  563. @cindex Build system
  564. @cindex @code{--build}
  565. For normal native compilation, the system can be specified with
  566. @samp{--build}.  By default @samp{./configure} uses the output from running
  567. @samp{./config.guess}.  On some systems @samp{./config.guess} can determine
  568. the exact CPU type, on others it will be necessary to give it explicitly.  For
  569. example,
  570. @example
  571. ./configure --build=ultrasparc-sun-solaris2.7
  572. @end example
  573. In all cases the @samp{OS} part is important, since it controls how libtool
  574. generates shared libraries.  Running @samp{./config.guess} is the simplest way
  575. to see what it should be, if you don't know already.
  576. @item Cross Compilation, @option{--host=CPU-VENDOR-OS}
  577. @cindex Cross compiling
  578. @cindex Host system
  579. @cindex @code{--host}
  580. When cross-compiling, the system used for compiling is given by @samp{--build}
  581. and the system where the library will run is given by @samp{--host}.  For
  582. example when using a FreeBSD Athlon system to build GNU/Linux m68k binaries,
  583. @example
  584. ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu
  585. @end example
  586. Compiler tools are sought first with the host system type as a prefix.  For
  587. example @command{m68k-mac-linux-gnu-ranlib} is tried, then plain
  588. @command{ranlib}.  This makes it possible for a set of cross-compiling tools
  589. to co-exist with native tools.  The prefix is the argument to @samp{--host},
  590. and this can be an alias, such as @samp{m68k-linux}.  But note that tools
  591. don't have to be setup this way, it's enough to just have a @env{PATH} with a
  592. suitable cross-compiling @command{cc} etc.
  593. Compiling for a different CPU in the same family as the build system is a form
  594. of cross-compilation, though very possibly this would merely be special
  595. options on a native compiler.  In any case @samp{./configure} avoids depending
  596. on being able to run code on the build system, which is important when
  597. creating binaries for a newer CPU since they very possibly won't run on the
  598. build system.
  599. In all cases the compiler must be able to produce an executable (of whatever
  600. format) from a standard C @code{main}.  Although only object files will go to
  601. make up @file{libgmp}, @samp{./configure} uses linking tests for various
  602. purposes, such as determining what functions are available on the host system.
  603. Currently a warning is given unless an explicit @samp{--build} is used when
  604. cross-compiling, because it may not be possible to correctly guess the build
  605. system type if the @env{PATH} has only a cross-compiling @command{cc}.
  606. Note that the @samp{--target} option is not appropriate for GMP@.  It's for use
  607. when building compiler tools, with @samp{--host} being where they will run,
  608. and @samp{--target} what they'll produce code for.  Ordinary programs or
  609. libraries like GMP are only interested in the @samp{--host} part, being where
  610. they'll run.  (Some past versions of GMP used @samp{--target} incorrectly.)
  611. @item CPU types
  612. @cindex CPU types
  613. In general, if you want a library that runs as fast as possible, you should
  614. configure GMP for the exact CPU type your system uses.  However, this may mean
  615. the binaries won't run on older members of the family, and might run slower on
  616. other members, older or newer.  The best idea is always to build GMP for the
  617. exact machine type you intend to run it on.
  618. The following CPUs have specific support.  See @file{configure.in} for details
  619. of what code and compiler options they select.
  620. @itemize @bullet
  621. @c Keep this formatting, it's easy to read and it can be grepped to
  622. @c automatically test that CPUs listed get through ./config.sub
  623. @item
  624. Alpha:
  625. @nisamp{alpha},
  626. @nisamp{alphaev5},
  627. @nisamp{alphaev56},
  628. @nisamp{alphapca56},
  629. @nisamp{alphapca57},
  630. @nisamp{alphaev6},
  631. @nisamp{alphaev67},
  632. @nisamp{alphaev68}
  633. @nisamp{alphaev7}
  634. @item
  635. Cray:
  636. @nisamp{c90},
  637. @nisamp{j90},
  638. @nisamp{t90},
  639. @nisamp{sv1}
  640. @item
  641. HPPA:
  642. @nisamp{hppa1.0},
  643. @nisamp{hppa1.1},
  644. @nisamp{hppa2.0},
  645. @nisamp{hppa2.0n},
  646. @nisamp{hppa2.0w},
  647. @nisamp{hppa64}
  648. @item
  649. IA-64:
  650. @nisamp{ia64},
  651. @nisamp{itanium},
  652. @nisamp{itanium2}
  653. @item
  654. MIPS:
  655. @nisamp{mips},
  656. @nisamp{mips3},
  657. @nisamp{mips64}
  658. @item
  659. Motorola:
  660. @nisamp{m68k},
  661. @nisamp{m68000},
  662. @nisamp{m68010},
  663. @nisamp{m68020},
  664. @nisamp{m68030},
  665. @nisamp{m68040},
  666. @nisamp{m68060},
  667. @nisamp{m68302},
  668. @nisamp{m68360},
  669. @nisamp{m88k},
  670. @nisamp{m88110}
  671. @item
  672. POWER:
  673. @nisamp{power},
  674. @nisamp{power1},
  675. @nisamp{power2},
  676. @nisamp{power2sc}
  677. @item
  678. PowerPC:
  679. @nisamp{powerpc},
  680. @nisamp{powerpc64},
  681. @nisamp{powerpc401},
  682. @nisamp{powerpc403},
  683. @nisamp{powerpc405},
  684. @nisamp{powerpc505},
  685. @nisamp{powerpc601},
  686. @nisamp{powerpc602},
  687. @nisamp{powerpc603},
  688. @nisamp{powerpc603e},
  689. @nisamp{powerpc604},
  690. @nisamp{powerpc604e},
  691. @nisamp{powerpc620},
  692. @nisamp{powerpc630},
  693. @nisamp{powerpc740},
  694. @nisamp{powerpc7400},
  695. @nisamp{powerpc7450},
  696. @nisamp{powerpc750},
  697. @nisamp{powerpc801},
  698. @nisamp{powerpc821},
  699. @nisamp{powerpc823},
  700. @nisamp{powerpc860},
  701. @nisamp{powerpc970}
  702. @item
  703. SPARC:
  704. @nisamp{sparc},
  705. @nisamp{sparcv8},
  706. @nisamp{microsparc},
  707. @nisamp{supersparc},
  708. @nisamp{sparcv9},
  709. @nisamp{ultrasparc},
  710. @nisamp{ultrasparc2},
  711. @nisamp{ultrasparc2i},
  712. @nisamp{ultrasparc3},
  713. @nisamp{sparc64}
  714. @item
  715. x86 family:
  716. @nisamp{i386},
  717. @nisamp{i486},
  718. @nisamp{i586},
  719. @nisamp{pentium},
  720. @nisamp{pentiummmx},
  721. @nisamp{pentiumpro},
  722. @nisamp{pentium2},
  723. @nisamp{pentium3},
  724. @nisamp{pentium4},
  725. @nisamp{k6},
  726. @nisamp{k62},
  727. @nisamp{k63},
  728. @nisamp{athlon},
  729. @nisamp{amd64},
  730. @nisamp{viac3},
  731. @nisamp{viac32}
  732. @item
  733. Other:
  734. @nisamp{a29k},
  735. @nisamp{arm},
  736. @nisamp{clipper},
  737. @nisamp{i960},
  738. @nisamp{ns32k},
  739. @nisamp{pyramid},
  740. @nisamp{sh},
  741. @nisamp{sh2},
  742. @nisamp{vax},
  743. @nisamp{z8k}
  744. @end itemize
  745. CPUs not listed will use generic C code.
  746. @item Generic C Build
  747. @cindex Generic C
  748. If some of the assembly code causes problems, or if otherwise desired, the
  749. generic C code can be selected with CPU @samp{none}.  For example,
  750. @example
  751. ./configure --host=none-unknown-freebsd3.5
  752. @end example
  753. Note that this will run quite slowly, but it should be portable and should at
  754. least make it possible to get something running if all else fails.
  755. @item Fat binary, @option{--enable-fat}
  756. @cindex Fat binary
  757. @cindex @option{--enable-fat}
  758. Using @option{--enable-fat} selects a ``fat binary'' build on x86, where
  759. optimized low level subroutines are chosen at runtime according to the CPU
  760. detected.  This means more code, but gives good performance on all x86 chips.
  761. (This option might become available for more architectures in the future.)
  762. @item @option{ABI}
  763. @cindex ABI
  764. On some systems GMP supports multiple ABIs (application binary interfaces),
  765. meaning data type sizes and calling conventions.  By default GMP chooses the
  766. best ABI available, but a particular ABI can be selected.  For example
  767. @example
  768. ./configure --host=mips64-sgi-irix6 ABI=n32
  769. @end example
  770. See @ref{ABI and ISA}, for the available choices on relevant CPUs, and what
  771. applications need to do.
  772. @item @option{CC}, @option{CFLAGS}
  773. @cindex C compiler
  774. @cindex @code{CC}
  775. @cindex @code{CFLAGS}
  776. By default the C compiler used is chosen from among some likely candidates,
  777. with @command{gcc} normally preferred if it's present.  The usual
  778. @samp{CC=whatever} can be passed to @samp{./configure} to choose something
  779. different.
  780. For various systems, default compiler flags are set based on the CPU and
  781. compiler.  The usual @samp{CFLAGS="-whatever"} can be passed to
  782. @samp{./configure} to use something different or to set good flags for systems
  783. GMP doesn't otherwise know.
  784. The @samp{CC} and @samp{CFLAGS} used are printed during @samp{./configure},
  785. and can be found in each generated @file{Makefile}.  This is the easiest way
  786. to check the defaults when considering changing or adding something.
  787. Note that when @samp{CC} and @samp{CFLAGS} are specified on a system
  788. supporting multiple ABIs it's important to give an explicit
  789. @samp{ABI=whatever}, since GMP can't determine the ABI just from the flags and
  790. won't be able to select the correct assembly code.
  791. If just @samp{CC} is selected then normal default @samp{CFLAGS} for that
  792. compiler will be used (if GMP recognises it).  For example @samp{CC=gcc} can
  793. be used to force the use of GCC, with default flags (and default ABI).
  794. @item @option{CPPFLAGS}
  795. @cindex @code{CPPFLAGS}
  796. Any flags like @samp{-D} defines or @samp{-I} includes required by the
  797. preprocessor should be set in @samp{CPPFLAGS} rather than @samp{CFLAGS}.
  798. Compiling is done with both @samp{CPPFLAGS} and @samp{CFLAGS}, but
  799. preprocessing uses just @samp{CPPFLAGS}.  This distinction is because most
  800. preprocessors won't accept all the flags the compiler does.  Preprocessing is
  801. done separately in some configure tests, and in the @samp{ansi2knr} support
  802. for K&R compilers.
  803. @item @option{CC_FOR_BUILD}
  804. @cindex @code{CC_FOR_BUILD}
  805. Some build-time programs are compiled and run to generate host-specific data
  806. tables.  @samp{CC_FOR_BUILD} is the compiler used for this.  It doesn't need
  807. to be in any particular ABI or mode, it merely needs to generate executables
  808. that can run.  The default is to try the selected @samp{CC} and some likely
  809. candidates such as @samp{cc} and @samp{gcc}, looking for something that works.
  810. No flags are used with @samp{CC_FOR_BUILD} because a simple invocation like
  811. @samp{cc foo.c} should be enough.  If some particular options are required
  812. they can be included as for instance @samp{CC_FOR_BUILD="cc -whatever"}.
  813. @item C++ Support, @option{--enable-cxx}
  814. @cindex C++ support
  815. @cindex @code{--enable-cxx}
  816. C++ support in GMP can be enabled with @samp{--enable-cxx}, in which case a
  817. C++ compiler will be required.  As a convenience @samp{--enable-cxx=detect}
  818. can be used to enable C++ support only if a compiler can be found.  The C++
  819. support consists of a library @file{libgmpxx.la} and header file
  820. @file{gmpxx.h} (@pxref{Headers and Libraries}).
  821. A separate @file{libgmpxx.la} has been adopted rather than having C++ objects
  822. within @file{libgmp.la} in order to ensure dynamic linked C programs aren't
  823. bloated by a dependency on the C++ standard library, and to avoid any chance
  824. that the C++ compiler could be required when linking plain C programs.
  825. @file{libgmpxx.la} will use certain internals from @file{libgmp.la} and can
  826. only be expected to work with @file{libgmp.la} from the same GMP version.
  827. Future changes to the relevant internals will be accompanied by renaming, so a
  828. mismatch will cause unresolved symbols rather than perhaps mysterious
  829. misbehaviour.
  830. In general @file{libgmpxx.la} will be usable only with the C++ compiler that
  831. built it, since name mangling and runtime support are usually incompatible
  832. between different compilers.
  833. @item @option{CXX}, @option{CXXFLAGS}
  834. @cindex C++ compiler
  835. @cindex @code{CXX}
  836. @cindex @code{CXXFLAGS}
  837. When C++ support is enabled, the C++ compiler and its flags can be set with
  838. variables @samp{CXX} and @samp{CXXFLAGS} in the usual way.  The default for
  839. @samp{CXX} is the first compiler that works from a list of likely candidates,
  840. with @command{g++} normally preferred when available.  The default for
  841. @samp{CXXFLAGS} is to try @samp{CFLAGS}, @samp{CFLAGS} without @samp{-g}, then
  842. for @command{g++} either @samp{-g -O2} or @samp{-O2}, or for other compilers
  843. @samp{-g} or nothing.  Trying @samp{CFLAGS} this way is convenient when using
  844. @samp{gcc} and @samp{g++} together, since the flags for @samp{gcc} will
  845. usually suit @samp{g++}.
  846. It's important that the C and C++ compilers match, meaning their startup and
  847. runtime support routines are compatible and that they generate code in the
  848. same ABI (if there's a choice of ABIs on the system).  @samp{./configure}
  849. isn't currently able to check these things very well itself, so for that
  850. reason @samp{--disable-cxx} is the default, to avoid a build failure due to a
  851. compiler mismatch.  Perhaps this will change in the future.
  852. Incidentally, it's normally not good enough to set @samp{CXX} to the same as
  853. @samp{CC}.  Although @command{gcc} for instance recognises @file{foo.cc} as
  854. C++ code, only @command{g++} will invoke the linker the right way when
  855. building an executable or shared library from C++ object files.
  856. @item Temporary Memory, @option{--enable-alloca=<choice>}
  857. @cindex Temporary memory
  858. @cindex Stack overflow
  859. @cindex @code{alloca}
  860. @cindex @code{--enable-alloca}
  861. GMP allocates temporary workspace using one of the following three methods,
  862. which can be selected with for instance
  863. @samp{--enable-alloca=malloc-reentrant}.
  864. @itemize @bullet
  865. @item
  866. @samp{alloca} - C library or compiler builtin.
  867. @item
  868. @samp{malloc-reentrant} - the heap, in a re-entrant fashion.
  869. @item
  870. @samp{malloc-notreentrant} - the heap, with global variables.
  871. @end itemize
  872. For convenience, the following choices are also available.
  873. @samp{--disable-alloca} is the same as @samp{no}.
  874. @itemize @bullet
  875. @item
  876. @samp{yes} - a synonym for @samp{alloca}.
  877. @item
  878. @samp{no} - a synonym for @samp{malloc-reentrant}.
  879. @item
  880. @samp{reentrant} - @code{alloca} if available, otherwise
  881. @samp{malloc-reentrant}.  This is the default.
  882. @item
  883. @samp{notreentrant} - @code{alloca} if available, otherwise
  884. @samp{malloc-notreentrant}.
  885. @end itemize
  886. @code{alloca} is reentrant and fast, and is recommended.  It actually allocates
  887. just small blocks on the stack; larger ones use malloc-reentrant.
  888. @samp{malloc-reentrant} is, as the name suggests, reentrant and thread safe,
  889. but @samp{malloc-notreentrant} is faster and should be used if reentrancy is
  890. not required.
  891. The two malloc methods in fact use the memory allocation functions selected by
  892. @code{mp_set_memory_functions}, these being @code{malloc} and friends by
  893. default.  @xref{Custom Allocation}.
  894. An additional choice @samp{--enable-alloca=debug} is available, to help when
  895. debugging memory related problems (@pxref{Debugging}).
  896. @item FFT Multiplication, @option{--disable-fft}
  897. @cindex FFT multiplication
  898. @cindex @code{--disable-fft}
  899. By default multiplications are done using Karatsuba, 3-way Toom, and
  900. Fermat FFT@.  The FFT is only used on large to very large operands and can be
  901. disabled to save code size if desired.
  902. @item Berkeley MP, @option{--enable-mpbsd}
  903. @cindex Berkeley MP compatible functions
  904. @cindex BSD MP compatible functions
  905. @cindex @code{--enable-mpbsd}
  906. The Berkeley MP compatibility library (@file{libmp}) and header file
  907. (@file{mp.h}) are built and installed only if @option{--enable-mpbsd} is used.
  908. @xref{BSD Compatible Functions}.
  909. @item Assertion Checking, @option{--enable-assert}
  910. @cindex Assertion checking
  911. @cindex @code{--enable-assert}
  912. This option enables some consistency checking within the library.  This can be
  913. of use while debugging, @pxref{Debugging}.
  914. @item Execution Profiling, @option{--enable-profiling=prof/gprof/instrument}
  915. @cindex Execution profiling
  916. @cindex @code{--enable-profiling}
  917. Enable profiling support, in one of various styles, @pxref{Profiling}.
  918. @item @option{MPN_PATH}
  919. @cindex @code{MPN_PATH}
  920. Various assembly versions of each mpn subroutines are provided.  For a given
  921. CPU, a search is made though a path to choose a version of each.  For example
  922. @samp{sparcv8} has
  923. @example
  924. MPN_PATH="sparc32/v8 sparc32 generic"
  925. @end example
  926. which means look first for v8 code, then plain sparc32 (which is v7), and
  927. finally fall back on generic C@.  Knowledgeable users with special requirements
  928. can specify a different path.  Normally this is completely unnecessary.
  929. @item Documentation
  930. @cindex Documentation formats
  931. @cindex Texinfo
  932. The source for the document you're now reading is @file{doc/gmp.texi}, in
  933. Texinfo format, see @GMPreftop{texinfo, Texinfo}.
  934. @cindex Postscript
  935. @cindex DVI
  936. @cindex PDF
  937. Info format @samp{doc/gmp.info} is included in the distribution.  The usual
  938. automake targets are available to make PostScript, DVI, PDF and HTML (these
  939. will require various @TeX{} and Texinfo tools).
  940. @cindex DocBook
  941. @cindex XML
  942. DocBook and XML can be generated by the Texinfo @command{makeinfo} program
  943. too, see @ref{makeinfo options,, Options for @command{makeinfo}, texinfo,
  944. Texinfo}.
  945. Some supplementary notes can also be found in the @file{doc} subdirectory.
  946. @end table
  947. @need 2000
  948. @node ABI and ISA, Notes for Package Builds, Build Options, Installing GMP
  949. @section ABI and ISA
  950. @cindex ABI
  951. @cindex Application Binary Interface
  952. @cindex ISA
  953. @cindex Instruction Set Architecture
  954. ABI (Application Binary Interface) refers to the calling conventions between
  955. functions, meaning what registers are used and what sizes the various C data
  956. types are.  ISA (Instruction Set Architecture) refers to the instructions and
  957. registers a CPU has available.
  958. Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI defined, the
  959. latter for compatibility with older CPUs in the family.  GMP supports some
  960. CPUs like this in both ABIs.  In fact within GMP @samp{ABI} means a
  961. combination of chip ABI, plus how GMP chooses to use it.  For example in some
  962. 32-bit ABIs, GMP may support a limb as either a 32-bit @code{long} or a 64-bit
  963. @code{long long}.
  964. By default GMP chooses the best ABI available for a given system, and this
  965. generally gives significantly greater speed.  But an ABI can be chosen
  966. explicitly to make GMP compatible with other libraries, or particular
  967. application requirements.  For example,
  968. @example
  969. ./configure ABI=32
  970. @end example
  971. In all cases it's vital that all object code used in a given program is
  972. compiled for the same ABI.
  973. Usually a limb is implemented as a @code{long}.  When a @code{long long} limb
  974. is used this is encoded in the generated @file{gmp.h}.  This is convenient for
  975. applications, but it does mean that @file{gmp.h} will vary, and can't be just
  976. copied around.  @file{gmp.h} remains compiler independent though, since all
  977. compilers for a particular ABI will be expected to use the same limb type.
  978. Currently no attempt is made to follow whatever conventions a system has for
  979. installing library or header files built for a particular ABI@.  This will
  980. probably only matter when installing multiple builds of GMP, and it might be
  981. as simple as configuring with a special @samp{libdir}, or it might require
  982. more than that.  Note that builds for different ABIs need to done separately,
  983. with a fresh @command{./configure} and @command{make} each.
  984. @sp 1
  985. @table @asis
  986. @need 1000
  987. @item AMD64 (@samp{x86_64})
  988. @cindex AMD64
  989. On AMD64 systems supporting both 32-bit and 64-bit modes for applications, the
  990. following ABI choices are available.
  991. @table @asis
  992. @item @samp{ABI=64}
  993. The 64-bit ABI uses 64-bit limbs and pointers and makes full use of the chip
  994. architecture.  This is the default.  Applications will usually not need
  995. special compiler flags, but for reference the option is
  996. @example
  997. gcc  -m64
  998. @end example
  999. @item @samp{ABI=32}
  1000. The 32-bit ABI is the usual i386 conventions.  This will be slower, and is not
  1001. recommended except for inter-operating with other code not yet 64-bit capable.
  1002. Applications must be compiled with
  1003. @example
  1004. gcc  -m32
  1005. @end example
  1006. (In GCC 2.95 and earlier there's no @samp{-m32} option, it's the only mode.)
  1007. @end table
  1008. @sp 1
  1009. @need 1000
  1010. @item HPPA 2.0 (@samp{hppa2.0*}, @samp{hppa64})
  1011. @cindex HPPA
  1012. @cindex HP-UX
  1013. @table @asis
  1014. @item @samp{ABI=2.0w}
  1015. The 2.0w ABI uses 64-bit limbs and pointers and is available on HP-UX 11 or
  1016. up.  Applications must be compiled with
  1017. @example
  1018. gcc [built for 2.0w]
  1019. cc  +DD64
  1020. @end example
  1021. @item @samp{ABI=2.0n}
  1022. The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal calling
  1023. conventions, but with 64-bit instructions permitted within functions.  GMP
  1024. uses a 64-bit @code{long long} for a limb.  This ABI is available on hppa64
  1025. GNU/Linux and on HP-UX 10 or higher.  Applications must be compiled with
  1026. @example
  1027. gcc [built for 2.0n]
  1028. cc  +DA2.0 +e
  1029. @end example
  1030. Note that current versions of GCC (eg.@: 3.2) don't generate 64-bit
  1031. instructions for @code{long long} operations and so may be slower than for
  1032. 2.0w.  (The GMP assembly code is the same though.)
  1033. @item @samp{ABI=1.0}
  1034. HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit HPPA 1.0 ABI@.
  1035. No special compiler options are needed for applications.
  1036. @end table
  1037. All three ABIs are available for CPU types @samp{hppa2.0w}, @samp{hppa2.0} and
  1038. @samp{hppa64}, but for CPU type @samp{hppa2.0n} only 2.0n or 1.0 are
  1039. considered.
  1040. Note that GCC on HP-UX has no options to choose between 2.0n and 2.0w modes,
  1041. unlike HP @command{cc}.  Instead it must be built for one or the other ABI@.
  1042. GMP will detect how it was built, and skip to the corresponding @samp{ABI}.
  1043. @sp 1
  1044. @need 1500
  1045. @item IA-64 under HP-UX (@samp{ia64*-*-hpux*}, @samp{itanium*-*-hpux*})
  1046. @cindex IA-64
  1047. @cindex HP-UX
  1048. HP-UX supports two ABIs for IA-64.  GMP performance is the same in both.
  1049. @table @asis
  1050. @item @samp{ABI=32}
  1051. In the 32-bit ABI, pointers, @code{int}s and @code{long}s are 32 bits and GMP
  1052. uses a 64 bit @code{long long} for a limb.  Applications can be compiled
  1053. without any special flags since this ABI is the default in both HP C and GCC,
  1054. but for reference the flags are
  1055. @example
  1056. gcc  -milp32
  1057. cc   +DD32
  1058. @end example
  1059. @item @samp{ABI=64}
  1060. In the 64-bit ABI, @code{long}s and pointers are 64 bits and GMP uses a
  1061. @code{long} for a limb.  Applications must be compiled with
  1062. @example
  1063. gcc  -mlp64
  1064. cc   +DD64
  1065. @end example
  1066. @end table
  1067. On other IA-64 systems, GNU/Linux for instance, @samp{ABI=64} is the only
  1068. choice.
  1069. @sp 1
  1070. @need 1000
  1071. @item MIPS under IRIX 6 (@samp{mips*-*-irix[6789]})
  1072. @cindex MIPS
  1073. @cindex IRIX
  1074. IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs o32, n32,
  1075. and 64.  n32 or 64 are recommended, and GMP performance will be the same in
  1076. each.  The default is n32.
  1077. @table @asis
  1078. @item @samp{ABI=o32}
  1079. The o32 ABI is 32-bit pointers and integers, and no 64-bit operations.  GMP
  1080. will be slower than in n32 or 64, this option only exists to support old
  1081. compilers, eg.@: GCC 2.7.2.  Applications can be compiled with no special
  1082. flags on an old compiler, or on a newer compiler with
  1083. @example
  1084. gcc  -mabi=32
  1085. cc   -32
  1086. @end example
  1087. @item @samp{ABI=n32}
  1088. The n32 ABI is 32-bit pointers and integers, but with a 64-bit limb using a
  1089. @code{long long}.  Applications must be compiled with
  1090. @example
  1091. gcc  -mabi=n32
  1092. cc   -n32
  1093. @end example
  1094. @item @samp{ABI=64}
  1095. The 64-bit ABI is 64-bit pointers and integers.  Applications must be compiled
  1096. with
  1097. @example
  1098. gcc  -mabi=64
  1099. cc   -64
  1100. @end example
  1101. @end table
  1102. Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have the necessary
  1103. support for n32 or 64 and so only gets a 32-bit limb and the MIPS 2 code.
  1104. @sp 1
  1105. @need 1000
  1106. @item PowerPC 64 (@samp{powerpc64}, @samp{powerpc620}, @samp{powerpc630}, @samp{powerpc970}, @samp{power4}, @samp{power5})
  1107. @cindex PowerPC
  1108. @table @asis
  1109. @item @samp{ABI=aix64}
  1110. @cindex AIX
  1111. The AIX 64 ABI uses 64-bit limbs and pointers and is the default on PowerPC 64
  1112. @samp{*-*-aix*} systems.  Applications must be compiled with
  1113. @example
  1114. gcc  -maix64
  1115. xlc  -q64
  1116. @end example
  1117. @item @samp{ABI=mode64}
  1118. The @samp{mode64} ABI uses 64-bit limbs and pointers, and is the default on
  1119. 64-bit GNU/Linux, BSD, and Mac OS X/Darwin systems.  Applications must be
  1120. compiled with
  1121. @example
  1122. gcc  -m64
  1123. @end example
  1124. @item @samp{ABI=mode32}
  1125. @cindex AIX
  1126. The @samp{mode32} ABI uses a 64-bit @code{long long} limb but with the chip
  1127. still in 32-bit mode and using 32-bit calling conventions.  This is the default
  1128. on for systems where the true 64-bit ABIs are unavailable.  No special compiler
  1129. options are needed for applications.
  1130. @item @samp{ABI=32}
  1131. This is the basic 32-bit PowerPC ABI, with a 32-bit limb.  No special compiler
  1132. options are needed for applications.
  1133. @end table
  1134. GMP speed is greatest in @samp{aix64} and @samp{mode32}.  In @samp{ABI=32}
  1135. only the 32-bit ISA is used and this doesn't make full use of a 64-bit chip.
  1136. On a suitable system we could perhaps use more of the ISA, but there are no
  1137. plans to do so.
  1138. @sp 1
  1139. @need 1000
  1140. @item Sparc V9 (@samp{sparc64}, @samp{sparcv9}, @samp{ultrasparc*})
  1141. @cindex Sparc V9
  1142. @cindex Solaris
  1143. @cindex Sun
  1144. @table @asis
  1145. @item @samp{ABI=64}
  1146. The 64-bit V9 ABI is available on the various BSD sparc64 ports, recent
  1147. versions of Sparc64 GNU/Linux, and Solaris 2.7 and up (when the kernel is in
  1148. 64-bit mode).  GCC 3.2 or higher, or Sun @command{cc} is required.  On
  1149. GNU/Linux, depending on the default @command{gcc} mode, applications must be
  1150. compiled with
  1151. @example
  1152. gcc  -m64
  1153. @end example
  1154. On Solaris applications must be compiled with
  1155. @example
  1156. gcc  -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9
  1157. cc   -xarch=v9
  1158. @end example
  1159. On the BSD sparc64 systems no special options are required, since 64-bits is
  1160. the only ABI available.
  1161. @item @samp{ABI=32}
  1162. For the basic 32-bit ABI, GMP still uses as much of the V9 ISA as it can.  In
  1163. the Sun documentation this combination is known as ``v8plus''.  On GNU/Linux,
  1164. depending on the default @command{gcc} mode, applications may need to be
  1165. compiled with
  1166. @example
  1167. gcc  -m32
  1168. @end example
  1169. On Solaris, no special compiler options are required for applications, though
  1170. using something like the following is recommended.  (@command{gcc} 2.8 and
  1171. earlier only support @samp{-mv8} though.)
  1172. @example
  1173. gcc  -mv8plus
  1174. cc   -xarch=v8plus
  1175. @end example
  1176. @end table
  1177. GMP speed is greatest in @samp{ABI=64}, so it's the default where available.
  1178. The speed is partly because there are extra registers available and partly
  1179. because 64-bits is considered the more important case and has therefore had
  1180. better code written for it.
  1181. Don't be confused by the names of the @samp{-m} and @samp{-x} compiler
  1182. options, they're called @samp{arch} but effectively control both ABI and ISA@.
  1183. On Solaris 2.6 and earlier, only @samp{ABI=32} is available since the kernel
  1184. doesn't save all registers.
  1185. On Solaris 2.7 with the kernel in 32-bit mode, a normal native build will
  1186. reject @samp{ABI=64} because the resulting executables won't run.
  1187. @samp{ABI=64} can still be built if desired by making it look like a
  1188. cross-compile, for example
  1189. @example
  1190. ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64
  1191. @end example
  1192. @end table
  1193. @need 2000
  1194. @node Notes for Package Builds, Notes for Particular Systems, ABI and ISA, Installing GMP
  1195. @section Notes for Package Builds
  1196. @cindex Build notes for binary packaging
  1197. @cindex Packaged builds
  1198. GMP should present no great difficulties for packaging in a binary
  1199. distribution.
  1200. @cindex Libtool versioning
  1201. @cindex Shared library versioning
  1202. Libtool is used to build the library and @samp{-version-info} is set
  1203. appropriately, having started from @samp{3:0:0} in GMP 3.0 (@pxref{Versioning,
  1204. Library interface versions, Library interface versions, libtool, GNU
  1205. Libtool}).
  1206. The GMP 4 series will be upwardly binary compatible in each release and will
  1207. be upwardly binary compatible with all of the GMP 3 series.  Additional
  1208. function interfaces may be added in each release, so on systems where libtool
  1209. versioning is not fully checked by the loader an auxiliary mechanism may be
  1210. needed to express that a dynamic linked application depends on a new enough
  1211. GMP.
  1212. An auxiliary mechanism may also be needed to express that @file{libgmpxx.la}
  1213. (from @option{--enable-cxx}, @pxref{Build Options}) requires @file{libgmp.la}
  1214. from the same GMP version, since this is not done by the libtool versioning,
  1215. nor otherwise.  A mismatch will result in unresolved symbols from the linker,
  1216. or perhaps the loader.
  1217. When building a package for a CPU family, care should be taken to use
  1218. @samp{--host} (or @samp{--build}) to choose the least common denominator among
  1219. the CPUs which might use the package.  For example this might mean plain
  1220. @samp{sparc} (meaning V7) for SPARCs.
  1221. For x86s, @option{--enable-fat} sets things up for a fat binary build, making a
  1222. runtime selection of optimized low level routines.  This is a good choice for
  1223. packaging to run on a range of x86 chips.
  1224. Users who care about speed will want GMP built for their exact CPU type, to
  1225. make best use of the available optimizations.  Providing a way to suitably
  1226. rebuild a package may be useful.  This could be as simple as making it
  1227. possible for a user to omit @samp{--build} (and @samp{--host}) so
  1228. @samp{./config.guess} will detect the CPU@.  But a way to manually specify a
  1229. @samp{--build} will be wanted for systems where @samp{./config.guess} is
  1230. inexact.
  1231. On systems with multiple ABIs, a packaged build will need to decide which
  1232. among the choices is to be provided, see @ref{ABI and ISA}.  A given run of
  1233. @samp{./configure} etc will only build one ABI@.  If a second ABI is also
  1234. required then a second run of @samp{./configure} etc must be made, starting
  1235. from a clean directory tree (@samp{make distclean}).
  1236. As noted under ``ABI and ISA'', currently no attempt is made to follow system
  1237. conventions for install locations that vary with ABI, such as
  1238. @file{/usr/lib/sparcv9} for @samp{ABI=64} as opposed to @file{/usr/lib} for
  1239. @samp{ABI=32}.  A package build can override @samp{libdir} and other standard
  1240. variables as necessary.
  1241. Note that @file{gmp.h} is a generated file, and will be architecture and ABI
  1242. dependent.  When attempting to install two ABIs simultaneously it will be
  1243. important that an application compile gets the correct @file{gmp.h} for its
  1244. desired ABI@.  If compiler include paths don't vary with ABI options then it
  1245. might be necessary to create a @file{/usr/include/gmp.h} which tests
  1246. preprocessor symbols and chooses the correct actual @file{gmp.h}.
  1247. @need 2000
  1248. @node Notes for Particular Systems, Known Build Problems, Notes for Package Builds, Installing GMP
  1249. @section Notes for Particular Systems
  1250. @cindex Build notes for particular systems
  1251. @cindex Particular systems
  1252. @cindex Systems
  1253. @table @asis
  1254. @c This section is more or less meant for notes about performance or about
  1255. @c build problems that have been worked around but might leave a user
  1256. @c scratching their head.  Fun with different ABIs on a system belongs in the
  1257. @c above section.
  1258. @item AIX 3 and 4
  1259. @cindex AIX
  1260. On systems @samp{*-*-aix[34]*} shared libraries are disabled by default, since
  1261. some versions of the native @command{ar} fail on the convenience libraries
  1262. used.  A shared build can be attempted with
  1263. @example
  1264. ./configure --enable-shared --disable-static
  1265. @end example
  1266. Note that the @samp{--disable-static} is necessary because in a shared build
  1267. libtool makes @file{libgmp.a} a symlink to @file{libgmp.so}, apparently for
  1268. the benefit of old versions of @command{ld} which only recognise @file{.a},
  1269. but unfortunately this is done even if a fully functional @command{ld} is
  1270. available.
  1271. @item ARM
  1272. @cindex ARM
  1273. On systems @samp{arm*-*-*}, versions of GCC up to and including 2.95.3 have a
  1274. bug in unsigned division, giving wrong results for some operands.  GMP
  1275. @samp{./configure} will demand GCC 2.95.4 or later.
  1276. @item Compaq C++
  1277. @cindex Compaq C++
  1278. Compaq C++ on OSF 5.1 has two flavours of @code{iostream}, a standard one and
  1279. an old pre-standard one (see @samp{man iostream_intro}).  GMP can only use the
  1280. standard one, which unfortunately is not the default but must be selected by
  1281. defining @code{__USE_STD_IOSTREAM}.  Configure with for instance
  1282. @example
  1283. ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM
  1284. @end example
  1285. @item Floating Point Mode
  1286. @cindex Floating point mode
  1287. @cindex Hardware floating point mode
  1288. @cindex Precision of hardware floating point
  1289. @cindex x87
  1290. On some systems, the hardware floating point has a control mode which can set
  1291. all operations to be done in a particular precision, for instance single,
  1292. double or extended on x86 systems (x87 floating point).  The GMP functions
  1293. involving a @code{double} cannot be expected to operate to their full
  1294. precision when the hardware is in single precision mode.  Of course this
  1295. affects all code, including application code, not just GMP.
  1296. @item MS-DOS and MS Windows
  1297. @cindex MS-DOS
  1298. @cindex MS Windows
  1299. @cindex Windows
  1300. @cindex Cygwin
  1301. @cindex DJGPP
  1302. @cindex MINGW
  1303. On an MS-DOS system DJGPP can be used to build GMP, and on an MS Windows
  1304. system Cygwin, DJGPP and MINGW can be used.  All three are excellent ports of
  1305. GCC and the various GNU tools.
  1306. @display
  1307. @uref{http://www.cygwin.com/}
  1308. @uref{http://www.delorie.com/djgpp/}
  1309. @uref{http://www.mingw.org/}
  1310. @end display
  1311. @cindex Interix
  1312. @cindex Services for Unix
  1313. Microsoft also publishes an Interix ``Services for Unix'' which can be used to
  1314. build GMP on Windows (with a normal @samp{./configure}), but it's not free
  1315. software.
  1316. @item MS Windows DLLs
  1317. @cindex DLLs
  1318. @cindex MS Windows
  1319. @cindex Windows
  1320. On systems @samp{*-*-cygwin*}, @samp{*-*-mingw*} and @samp{*-*-pw32*} by
  1321. default GMP builds only a static library, but a DLL can be built instead using
  1322. @example
  1323. ./configure --disable-static --enable-shared
  1324. @end example
  1325. Static and DLL libraries can't both be built, since certain export directives
  1326. in @file{gmp.h} must be different.
  1327. A MINGW DLL build of GMP can be used with Microsoft C@.  Libtool doesn't
  1328. install a @file{.lib} format import library, but it can be created with MS
  1329. @command{lib} as follows, and copied to the install directory.  Similarly for
  1330. @file{libmp} and @file{libgmpxx}.
  1331. @example
  1332. cd .libs
  1333. lib /def:libgmp-3.dll.def /out:libgmp-3.lib
  1334. @end example
  1335. MINGW uses the C runtime library @samp{msvcrt.dll} for I/O, so applications
  1336. wanting to use the GMP I/O routines must be compiled with @samp{cl /MD} to do
  1337. the same.  If one of the other C runtime library choices provided by MS C is
  1338. desired then the suggestion is to use the GMP string functions and confine I/O
  1339. to the application.
  1340. @item Motorola 68k CPU Types
  1341. @cindex 68000
  1342. @samp{m68k} is taken to mean 68000.  @samp{m68020} or higher will give a
  1343. performance boost on applicable CPUs.  @samp{m68360} can be used for CPU32
  1344. series chips.  @samp{m68302} can be used for ``Dragonball'' series chips,
  1345. though this is merely a synonym for @samp{m68000}.
  1346. @item OpenBSD 2.6
  1347. @cindex OpenBSD
  1348. @command{m4} in this release of OpenBSD has a bug in @code{eval} that makes it
  1349. unsuitable for @file{.asm} file processing.  @samp{./configure} will detect
  1350. the problem and either abort or choose another m4 in the @env{PATH}.  The bug
  1351. is fixed in OpenBSD 2.7, so either upgrade or use GNU m4.
  1352. @item Power CPU Types
  1353. @cindex Power/PowerPC
  1354. In GMP, CPU types @samp{power*} and @samp{powerpc*} will each use instructions
  1355. not available on the other, so it's important to choose the right one for the
  1356. CPU that will be used.  Currently GMP has no assembly code support for using
  1357. just the common instruction subset.  To get executables that run on both, the
  1358. current suggestion is to use the generic C code (CPU @samp{none}), possibly
  1359. with appropriate compiler options (like @samp{-mcpu=common} for
  1360. @command{gcc}).  CPU @samp{rs6000} (which is not a CPU but a family of
  1361. workstations) is accepted by @file{config.sub}, but is currently equivalent to
  1362. @samp{none}.
  1363. @item Sparc CPU Types
  1364. @cindex Sparc
  1365. @samp{sparcv8} or @samp{supersparc} on relevant systems will give a
  1366. significant performance increase over the V7 code selected by plain
  1367. @samp{sparc}.
  1368. @item Sparc App Regs
  1369. @cindex Sparc
  1370. The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the
  1371. ``application registers'' @code{g2}, @code{g3} and @code{g4}, the same way
  1372. that the GCC default @samp{-mapp-regs} does (@pxref{SPARC Options,, SPARC
  1373. Options, gcc, Using the GNU Compiler Collection (GCC)}).
  1374. This makes that code unsuitable for use with the special V9
  1375. @samp{-mcmodel=embmedany} (which uses @code{g4} as a data segment pointer),
  1376. and for applications wanting to use those registers for special purposes.  In
  1377. these cases the only suggestion currently is to build GMP with CPU @samp{none}
  1378. to avoid the assembly code.
  1379. @item SunOS 4
  1380. @cindex SunOS
  1381. @command{/usr/bin/m4} lacks various features needed to process @file{.asm}
  1382. files, and instead @samp{./configure} will automatically use
  1383. @command{/usr/5bin/m4}, which we believe is always available (if not then use
  1384. GNU m4).
  1385. @item x86 CPU Types
  1386. @cindex x86
  1387. @cindex 80x86
  1388. @cindex i386
  1389. @samp{i586}, @samp{pentium} or @samp{pentiummmx} code is good for its intended
  1390. P5 Pentium chips, but quite slow when run on Intel P6 class chips (PPro, P-II,
  1391. P-III)@.  @samp{i386} is a better choice when making binaries that must run on
  1392. both.
  1393. @item x86 MMX and SSE2 Code
  1394. @cindex MMX
  1395. @cindex SSE2
  1396. If the CPU selected has MMX code but the assembler doesn't support it, a
  1397. warning is given and non-MMX code is used instead.  This will be an inferior
  1398. build, since the MMX code that's present is there because it's faster than the
  1399. corresponding plain integer code.  The same applies to SSE2.
  1400. Old versions of @samp{gas} don't support MMX instructions, in particular
  1401. version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent OpenBSD 3.1
  1402. doesn't.
  1403. Solaris 2.6 and 2.7 @command{as} generate incorrect object code for register
  1404. to register @code{movq} instructions, and so can't be used for MMX code.
  1405. Install a recent @command{gas} if MMX code is wanted on these systems.
  1406. @end table
  1407. @need 2000
  1408. @node Known Build Problems, Performance optimization, Notes for Particular Systems, Installing GMP
  1409. @section Known Build Problems
  1410. @cindex Build problems known
  1411. @c This section is more or less meant for known build problems that are not
  1412. @c otherwise worked around and require some sort of manual intervention.
  1413. You might find more up-to-date information at @uref{http://gmplib.org/}.
  1414. @table @asis
  1415. @item Compiler link options
  1416. The version of libtool currently in use rather aggressively strips compiler
  1417. options when linking a shared library.  This will hopefully be relaxed in the
  1418. future, but for now if this is a problem the suggestion is to create a little
  1419. script to hide them, and for instance configure with
  1420. @example
  1421. ./configure CC=gcc-with-my-options
  1422. @end example
  1423. @item DJGPP (@samp{*-*-msdosdjgpp*})
  1424. @cindex DJGPP
  1425. The DJGPP port of @command{bash} 2.03 is unable to run the @samp{configure}
  1426. script, it exits silently, having died writing a preamble to
  1427. @file{config.log}.  Use @command{bash} 2.04 or higher.
  1428. @samp{make all} was found to run out of memory during the final
  1429. @file{libgmp.la} link on one system tested, despite having 64Mb available.
  1430. Running @samp{make libgmp.la} directly helped, perhaps recursing into the
  1431. various subdirectories uses up memory.
  1432. @item GNU binutils @command{strip} prior to 2.12
  1433. @cindex Stripped libraries
  1434. @cindex Binutils @command{strip}
  1435. @cindex GNU @command{strip}
  1436. @command{strip} from GNU binutils 2.11 and earlier should not be used on the
  1437. static libraries @file{libgmp.a} and @file{libmp.a} since it will discard all
  1438. but the last of multiple archive members with the same name, like the three
  1439. versions of @file{init.o} in @file{libgmp.a}.  Binutils 2.12 or higher can be
  1440. used successfully.
  1441. The shared libraries @file{libgmp.so} and @file{libmp.so} are not affected by
  1442. this and any version of @command{strip} can be used on them.
  1443. @item @command{make} syntax error
  1444. @cindex SCO
  1445. @cindex IRIX
  1446. On certain versions of SCO OpenServer 5 and IRIX 6.5 the native @command{make}
  1447. is unable to handle the long dependencies list for @file{libgmp.la}.  The
  1448. symptom is a ``syntax error'' on the following line of the top-level
  1449. @file{Makefile}.
  1450. @example
  1451. libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES)
  1452. @end example
  1453. Either use GNU Make, or as a workaround remove
  1454. @code{$(libgmp_la_DEPENDENCIES)} from that line (which will make the initial
  1455. build work, but if any recompiling is done @file{libgmp.la} might not be
  1456. rebuilt).
  1457. @item MacOS X (@samp{*-*-darwin*})
  1458. @cindex MacOS X
  1459. @cindex Darwin
  1460. Libtool currently only knows how to create shared libraries on MacOS X using
  1461. the native @command{cc} (which is a modified GCC), not a plain GCC@.  A
  1462. static-only build should work though (@samp{--disable-shared}).
  1463. @item NeXT prior to 3.3
  1464. @cindex NeXT
  1465. The system compiler on old versions of NeXT was a massacred and old GCC, even
  1466. if it called itself @file{cc}.  This compiler cannot be used to build GMP, you
  1467. need to get a real GCC, and install that.  (NeXT may have fixed this in
  1468. release 3.3 of their system.)
  1469. @item POWER and PowerPC
  1470. @cindex Power/PowerPC
  1471. Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP on POWER or
  1472. PowerPC@.  If you want to use GCC for these machines, get GCC 2.7.2.1 (or
  1473. later).
  1474. @item Sequent Symmetry
  1475. @cindex Sequent Symmetry
  1476. Use the GNU assembler instead of the system assembler, since the latter has
  1477. serious bugs.
  1478. @item Solaris 2.6
  1479. @cindex Solaris
  1480. The system @command{sed} prints an error ``Output line too long'' when libtool
  1481. builds @file{libgmp.la}.  This doesn't seem to cause any obvious ill effects,
  1482. but GNU @command{sed} is recommended, to avoid any doubt.
  1483. @item Sparc Solaris 2.7 with gcc 2.95.2 in @samp{ABI=32}
  1484. @cindex Solaris
  1485. A shared library build of GMP seems to fail in this combination, it builds but
  1486. then fails the tests, apparently due to some incorrect data relocations within
  1487. @code{gmp_randinit_lc_2exp_size}.  The exact cause is unknown,
  1488. @samp{--disable-shared} is recommended.
  1489. @end table
  1490. @need 2000
  1491. @node Performance optimization, , Known Build Problems, Installing GMP
  1492. @section Performance optimization
  1493. @cindex Optimizing performance
  1494. @c At some point, this should perhaps move to a separate chapter on optimizing
  1495. @c performance.
  1496. For optimal performance, build GMP for the exact CPU type of the target
  1497. computer, see @ref{Build Options}.
  1498. Unlike what is the case for most other programs, the compiler typically
  1499. doesn't matter much, since GMP uses assembly language for the most critical
  1500. operation.
  1501. In particular for long-running GMP applications, and applications demanding
  1502. extremely large numbers, building and running the @code{tuneup} program in the
  1503. @file{tune} subdirectory, can be important.  For example,
  1504. @example
  1505. cd tune
  1506. make tuneup
  1507. ./tuneup
  1508. @end example
  1509. will generate better contents for the @file{gmp-mparam.h} parameter file.
  1510. To use the results, put the output in the file file indicated in the
  1511. @samp{Parameters for ...} header.  Then recompile from scratch.
  1512. The @code{tuneup} program takes one useful parameter, @samp{-f NNN}, which
  1513. instructs the program how long to check FFT multiply parameters.  If you're
  1514. going to use GMP for extremely large numbers, you may want to run @code{tuneup}
  1515. with a large NNN value.
  1516. @node GMP Basics, Reporting Bugs, Installing GMP, Top
  1517. @comment  node-name,  next,  previous,  up
  1518. @chapter GMP Basics
  1519. @cindex Basics
  1520. @strong{Using functions, macros, data types, etc.@: not documented in this
  1521. manual is strongly discouraged.  If you do so your application is guaranteed
  1522. to be incompatible with future versions of GMP.}
  1523. @menu
  1524. * Headers and Libraries::
  1525. * Nomenclature and Types::
  1526. * Function Classes::
  1527. * Variable Conventions::
  1528. * Parameter Conventions::
  1529. * Memory Management::
  1530. * Reentrancy::
  1531. * Useful Macros and Constants::
  1532. * Compatibility with older versions::
  1533. * Demonstration Programs::
  1534. * Efficiency::
  1535. * Debugging::
  1536. * Profiling::
  1537. * Autoconf::
  1538. * Emacs::
  1539. @end menu
  1540. @node Headers and Libraries, Nomenclature and Types, GMP Basics, GMP Basics
  1541. @section Headers and Libraries
  1542. @cindex Headers
  1543. @cindex @file{gmp.h}
  1544. @cindex Include files
  1545. @cindex @code{#include}
  1546. All declarations needed to use GMP are collected in the include file
  1547. @file{gmp.h}.  It is designed to work with both C and C++ compilers.
  1548. @example
  1549. #include <gmp.h>
  1550. @end example
  1551. @cindex @code{stdio.h}
  1552. Note however that prototypes for GMP functions with @code{FILE *} parameters
  1553. are only provided if @code{<stdio.h>} is included too.
  1554. @example
  1555. #include <stdio.h>
  1556. #include <gmp.h>
  1557. @end example
  1558. @cindex @code{stdarg.h}
  1559. Likewise @code{<stdarg.h>} (or @code{<varargs.h>}) is required for prototypes
  1560. with @code{va_list} parameters, such as @code{gmp_vprintf}.  And
  1561. @code{<obstack.h>} for prototypes with @code{struct obstack} parameters, such
  1562. as @code{gmp_obstack_printf}, when available.
  1563. @cindex Libraries
  1564. @cindex Linking
  1565. @cindex @code{libgmp}
  1566. All programs using GMP must link against the @file{libgmp} library.  On a
  1567. typical Unix-like system this can be done with @samp{-lgmp}, for example
  1568. @example
  1569. gcc myprogram.c -lgmp
  1570. @end example
  1571. @cindex @code{libgmpxx}
  1572. GMP C++ functions are in a separate @file{libgmpxx} library.  This is built
  1573. and installed if C++ support has been enabled (@pxref{Build Options}).  For
  1574. example,
  1575. @example
  1576. g++ mycxxprog.cc -lgmpxx -lgmp
  1577. @end example
  1578. @cindex Libtool
  1579. GMP is built using Libtool and an application can use that to link if desired,
  1580. @GMPpxreftop{libtool, GNU Libtool}.
  1581. If GMP has been installed to a non-standard location then it may be necessary
  1582. to use @samp{-I} and @samp{-L} compiler options to point to the right
  1583. directories, and some sort of run-time path for a shared library.
  1584. @node Nomenclature and Types, Function Classes, Headers and Libraries, GMP Basics
  1585. @section Nomenclature and Types
  1586. @cindex Nomenclature
  1587. @cindex Types
  1588. @cindex Integer
  1589. @tindex @code{mpz_t}
  1590. In this manual, @dfn{integer} usually means a multiple precision integer, as
  1591. defined by the GMP library.  The C data type for such integers is @code{mpz_t}.
  1592. Here are some examples of how to declare such integers:
  1593. @example
  1594. mpz_t sum;
  1595. struct foo @{ mpz_t x, y; @};
  1596. mpz_t vec[20];
  1597. @end example
  1598. @cindex Rational number
  1599. @tindex @code{mpq_t}
  1600. @dfn{Rational number} means a multiple precision fraction.  The C data type
  1601. for these fractions is @code{mpq_t}.  For example:
  1602. @example
  1603. mpq_t quotient;
  1604. @end example
  1605. @cindex Floating-point number
  1606. @tindex @code{mpf_t}
  1607. @dfn{Floating point number} or @dfn{Float} for short, is an arbitrary precision
  1608. mantissa with a limited precision exponent.  The C data type for such objects
  1609. is @code{mpf_t}.  For example:
  1610. @example
  1611. mpf_t fp;
  1612. @end example
  1613. @tindex @code{mp_exp_t}
  1614. The floating point functions accept and return exponents in the C type
  1615. @code{mp_exp_t}.  Currently this is usually a @code{long}, but on some systems
  1616. it's an @code{int} for efficiency.
  1617. @cindex Limb
  1618. @tindex @code{mp_limb_t}
  1619. A @dfn{limb} means the part of a multi-precision number that fits in a single
  1620. machine word.  (We chose this word because a limb of the human body is
  1621. analogous to a digit, only larger, and containing several digits.)  Normally a
  1622. limb is 32 or 64 bits.  The C data type for a limb is @code{mp_limb_t}.
  1623. @tindex @code{mp_size_t}
  1624. Counts of limbs of a multi-precision number represented in the C type
  1625. @code{mp_size_t}.  Currently this is normally a @code{long}, but on some
  1626. systems it's an @code{int} for efficiency, and on some systems it will be
  1627. @code{long long} in the future.
  1628. @tindex @code{mp_bitcnt_t}
  1629. Counts of bits of a multi-precision number are represented in the C type
  1630. @code{mp_bitcnt_t}.  Currently this is always an @code{unsigned long}, but on
  1631. some systems it will be an @code{unsigned long long} in the future .
  1632. @cindex Random state
  1633. @tindex @code{gmp_randstate_t}
  1634. @dfn{Random state} means an algorithm selection and current state data.  The C
  1635. data type for such objects is @code{gmp_randstate_t}.  For example:
  1636. @example
  1637. gmp_randstate_t rstate;
  1638. @end example
  1639. Also, in general @code{mp_bitcnt_t} is used for bit counts and ranges, and
  1640. @code{size_t} is used for byte or character counts.
  1641. @node Function Classes, Variable Conventions, Nomenclature and Types, GMP Basics
  1642. @section Function Classes
  1643. @cindex Function classes
  1644. There are six classes of functions in the GMP library:
  1645. @enumerate
  1646. @item
  1647. Functions for signed integer arithmetic, with names beginning with
  1648. @code{mpz_}.  The associated type is @code{mpz_t}.  There are about 150
  1649. functions in this class.  (@pxref{Integer Functions})
  1650. @item
  1651. Functions for rational number arithmetic, with names beginning with
  1652. @code{mpq_}.  The associated type is @code{mpq_t}.  There are about 40
  1653. functions in this class, but the integer functions can be used for arithmetic
  1654. on the numerator and denominator separately.  (@pxref{Rational Number
  1655. Functions})
  1656. @item
  1657. Functions for floating-point arithmetic, with names beginning with
  1658. @code{mpf_}.  The associated type is @code{mpf_t}.  There are about 60
  1659. functions is this class.  (@pxref{Floating-point Functions})
  1660. @item
  1661. Functions compatible with Berkeley MP, such as @code{itom}, @code{madd}, and
  1662. @code{mult}.  The associated type is @code{MINT}.  (@pxref{BSD Compatible
  1663. Functions})
  1664. @item
  1665. Fast low-level functions that operate on natural numbers.  These are used by
  1666. the functions in the preceding groups, and you can also call them directly
  1667. from very time-critical user programs.  These functions' names begin with
  1668. @code{mpn_}.  The associated type is array of @code{mp_limb_t}.  There are
  1669. about 30 (hard-to-use) functions in this class.  (@pxref{Low-level Functions})
  1670. @item
  1671. Miscellaneous functions.  Functions for setting up custom allocation and
  1672. functions for generating random numbers.  (@pxref{Custom Allocation}, and
  1673. @pxref{Random Number Functions})
  1674. @end enumerate
  1675. @node Variable Conventions, Parameter Conventions, Function Classes, GMP Basics
  1676. @section Variable Conventions
  1677. @cindex Variable conventions
  1678. @cindex Conventions for variables
  1679. GMP functions generally have output arguments before input arguments.  This
  1680. notation is by analogy with the assignment operator.  The BSD MP compatibility
  1681. functions are exceptions, having the output arguments last.
  1682. GMP lets you use the same variable for both input and output in one call.  For
  1683. example, the main function for integer multiplication, @code{mpz_mul}, can be
  1684. used to square @code{x} and put the result back in @code{x} with
  1685. @example
  1686. mpz_mul (x, x, x);
  1687. @end example
  1688. Before you can assign to a GMP variable, you need to initialize it by calling
  1689. one of the special initialization functions.  When you're done with a
  1690. variable, you need to clear it out, using one of the functions for that
  1691. purpose.  Which function to use depends on the type of variable.  See the
  1692. chapters on integer functions, rational number functions, and floating-point
  1693. functions for details.
  1694. A variable should only be initialized once, or at least cleared between each
  1695. initialization.  After a variable has been initialized, it may be assigned to
  1696. any number of times.
  1697. For efficiency reasons, avoid excessive initializing and clearing.  In
  1698. general, initialize near the start of a function and clear near the end.  For
  1699. example,
  1700. @example
  1701. void
  1702. foo (void)
  1703. @{
  1704.   mpz_t  n;
  1705.   int    i;
  1706.   mpz_init (n);
  1707.   for (i = 1; i < 100; i++)
  1708.     @{
  1709.       mpz_mul (n, @dots{});
  1710.       mpz_fdiv_q (n, @dots{});
  1711.       @dots{}
  1712.     @}
  1713.   mpz_clear (n);
  1714. @}
  1715. @end example
  1716. @node Parameter Conventions, Memory Management, Variable Conventions, GMP Basics
  1717. @section Parameter Conventions
  1718. @cindex Parameter conventions
  1719. @cindex Conventions for parameters
  1720. When a GMP variable is used as a function parameter, it's effectively a
  1721. call-by-reference, meaning if the function stores a value there it will change
  1722. the original in the caller.  Parameters which are input-only can be designated
  1723. @code{const} to provoke a compiler error or warning on attempting to modify
  1724. them.
  1725. When a function is going to return a GMP result, it should designate a
  1726. parameter that it sets, like the library functions do.  More than one value
  1727. can be returned by having more than one output parameter, again like the
  1728. library functions.  A @code{return} of an @code{mpz_t} etc doesn't return the
  1729. object, only a pointer, and this is almost certainly not what's wanted.
  1730. Here's an example accepting an @code{mpz_t} parameter, doing a calculation,
  1731. and storing the result to the indicated parameter.
  1732. @example
  1733. void
  1734. foo (mpz_t result, const mpz_t param, unsigned long n)
  1735. @{
  1736.   unsigned long  i;
  1737.   mpz_mul_ui (result, param, n);
  1738.   for (i = 1; i < n; i++)
  1739.     mpz_add_ui (result, result, i*7);
  1740. @}
  1741. int
  1742. main (void)
  1743. @{
  1744.   mpz_t  r, n;
  1745.   mpz_init (r);
  1746.   mpz_init_set_str (n, "123456", 0);
  1747.   foo (r, n, 20L);
  1748.   gmp_printf ("%Zdn", r);
  1749.   return 0;
  1750. @}
  1751. @end example
  1752. @code{foo} works even if the mainline passes the same variable for
  1753. @code{param} and @code{result}, just like the library functions.  But
  1754. sometimes it's tricky to make that work, and an application might not want to
  1755. bother supporting that sort of thing.
  1756. For interest, the GMP types @code{mpz_t} etc are implemented as one-element
  1757. arrays of certain structures.  This is why declaring a variable creates an
  1758. object with the fields GMP needs, but then using it as a parameter passes a
  1759. pointer to the object.  Note that the actual fields in each @code{mpz_t} etc
  1760. are for internal use only and should not be accessed directly by code that
  1761. expects to be compatible with future GMP releases.
  1762. @need 1000
  1763. @node Memory Management, Reentrancy, Parameter Conventions, GMP Basics
  1764. @section Memory Management
  1765. @cindex Memory management
  1766. The GMP types like @code{mpz_t} are small, containing only a couple of sizes,
  1767. and pointers to allocated data.  Once a variable is initialized, GMP takes
  1768. care of all space allocation.  Additional space is allocated whenever a
  1769. variable doesn't have enough.
  1770. @code{mpz_t} and @code{mpq_t} variables never reduce their allocated space.
  1771. Normally this is the best policy, since it avoids frequent reallocation.
  1772. Applications that need to return memory to the heap at some particular point
  1773. can use @code{mpz_realloc2}, or clear variables no longer needed.
  1774. @code{mpf_t} variables, in the current implementation, use a fixed amount of
  1775. space, determined by the chosen precision and allocated at initialization, so
  1776. their size doesn't change.
  1777. All memory is allocated using @code{malloc} and friends by default, but this
  1778. can be changed, see @ref{Custom Allocation}.  Temporary memory on the stack is
  1779. also used (via @code{alloca}), but this can be changed at build-time if
  1780. desired, see @ref{Build Options}.
  1781. @node Reentrancy, Useful Macros and Constants, Memory Management, GMP Basics
  1782. @section Reentrancy
  1783. @cindex Reentrancy
  1784. @cindex Thread safety
  1785. @cindex Multi-threading
  1786. @noindent
  1787. GMP is reentrant and thread-safe, with some exceptions:
  1788. @itemize @bullet
  1789. @item
  1790. If configured with @option{--enable-alloca=malloc-notreentrant} (or with
  1791. @option{--enable-alloca=notreentrant} when @code{alloca} is not available),
  1792. then naturally GMP is not reentrant.
  1793. @item
  1794. @code{mpf_set_default_prec} and @code{mpf_init} use a global variable for the
  1795. selected precision.  @code{mpf_init2} can be used instead, and in the C++
  1796. interface an explicit precision to the @code{mpf_class} constructor.
  1797. @item
  1798. @code{mpz_random} and the other old random number functions use a global
  1799. random state and are hence not reentrant.  The newer random number functions
  1800. that accept a @code{gmp_randstate_t} parameter can be used instead.
  1801. @item
  1802. @code{gmp_randinit} (obsolete) returns an error indication through a global
  1803. variable, which is not thread safe.  Applications are advised to use
  1804. @code{gmp_randinit_default} or @code{gmp_randinit_lc_2exp} instead.
  1805. @item
  1806. @code{mp_set_memory_functions} uses global variables to store the selected
  1807. memory allocation functions.
  1808. @item
  1809. If the memory allocation functions set by a call to
  1810. @code{mp_set_memory_functions} (or @code{malloc} and friends by default) are
  1811. not reentrant, then GMP will not be reentrant either.
  1812. @item
  1813. If the standard I/O functions such as @code{fwrite} are not reentrant then the
  1814. GMP I/O functions using them will not be reentrant either.
  1815. @item
  1816. It's safe for two threads to read from the same GMP variable simultaneously,
  1817. but it's not safe for one to read while the another might be writing, nor for
  1818. two threads to write simultaneously.  It's not safe for two threads to
  1819. generate a random number from the same @code{gmp_randstate_t} simultaneously,
  1820. since this involves an update of that variable.
  1821. @end itemize
  1822. @need 2000
  1823. @node Useful Macros and Constants, Compatibility with older versions, Reentrancy, GMP Basics
  1824. @section Useful Macros and Constants
  1825. @cindex Useful macros and constants
  1826. @cindex Constants
  1827. @deftypevr {Global Constant} {const int} mp_bits_per_limb
  1828. @findex mp_bits_per_limb
  1829. @cindex Bits per limb
  1830. @cindex Limb size
  1831. The number of bits per limb.
  1832. @end deftypevr
  1833. @defmac __GNU_MP_VERSION
  1834. @defmacx __GNU_MP_VERSION_MINOR
  1835. @defmacx __GNU_MP_VERSION_PATCHLEVEL
  1836. @cindex Version number
  1837. @cindex GMP version number
  1838. The major and minor GMP version, and patch level, respectively, as integers.
  1839. For GMP i.j, these numbers will be i, j, and 0, respectively.
  1840. For GMP i.j.k, these numbers will be i, j, and k, respectively.
  1841. @end defmac
  1842. @deftypevr {Global Constant} {const char * const} gmp_version
  1843. @findex gmp_version
  1844. The GMP version number, as a null-terminated string, in the form ``i.j.k''.
  1845. This release is @nicode{"@value{VERSION}"}.  Note that the format ``i.j'' was
  1846. used when k was zero was used before version 4.3.0.
  1847. @end deftypevr
  1848. @defmac __GMP_CC
  1849. @defmacx __GMP_CFLAGS
  1850. The compiler and compiler flags, respectively, used when compiling GMP, as
  1851. strings.
  1852. @end defmac
  1853. @node Compatibility with older versions, Demonstration Programs, Useful Macros and Constants, GMP Basics
  1854. @section Compatibility with older versions
  1855. @cindex Compatibility with older versions
  1856. @cindex Past GMP versions
  1857. @cindex Upward compatibility
  1858. This version of GMP is upwardly binary compatible with all 4.x and 3.x
  1859. versions, and upwardly compatible at the source level with all 2.x versions,
  1860. with the following exceptions.
  1861. @itemize @bullet
  1862. @item
  1863. @code{mpn_gcd} had its source arguments swapped as of GMP 3.0, for consistency
  1864. with other @code{mpn} functions.
  1865. @item
  1866. @code{mpf_get_prec} counted precision slightly differently in GMP 3.0 and
  1867. 3.0.1, but in 3.1 reverted to the 2.x style.
  1868. @end itemize
  1869. There are a number of compatibility issues between GMP 1 and GMP 2 that of
  1870. course also apply when porting applications from GMP 1 to GMP 4.  Please
  1871. see the GMP 2 manual for details.
  1872. The Berkeley MP compatibility library (@pxref{BSD Compatible Functions}) is
  1873. source and binary compatible with the standard @file{libmp}.
  1874. @c @enumerate
  1875. @c @item Integer division functions round the result differently.  The obsolete
  1876. @c functions (@code{mpz_div}, @code{mpz_divmod}, @code{mpz_mdiv},
  1877. @c @code{mpz_mdivmod}, etc) now all use floor rounding (i.e., they round the
  1878. @c quotient towards
  1879. @c @ifinfo
  1880. @c @minus{}infinity).
  1881. @c @end ifinfo
  1882. @c @iftex
  1883. @c @tex
  1884. @c $-infty$).
  1885. @c @end tex
  1886. @c @end iftex
  1887. @c There are a lot of functions for integer division, giving the user better
  1888. @c control over the rounding.
  1889. @c @item The function @code{mpz_mod} now compute the true @strong{mod} function.
  1890. @c @item The functions @code{mpz_powm} and @code{mpz_powm_ui} now use
  1891. @c @strong{mod} for reduction.
  1892. @c @item The assignment functions for rational numbers do no longer canonicalize
  1893. @c their results.  In the case a non-canonical result could arise from an
  1894. @c assignment, the user need to insert an explicit call to
  1895. @c @code{mpq_canonicalize}.  This change was made for efficiency.
  1896. @c @item Output generated by @code{mpz_out_raw} in this release cannot be read
  1897. @c by @code{mpz_inp_raw} in previous releases.  This change was made for making
  1898. @c the file format truly portable between machines with different word sizes.
  1899. @c @item Several @code{mpn} functions have changed.  But they were intentionally
  1900. @c undocumented in previous releases.
  1901. @c @item The functions @code{mpz_cmp_ui}, @code{mpz_cmp_si}, and @code{mpq_cmp_ui}
  1902. @c are now implemented as macros, and thereby sometimes evaluate their
  1903. @c arguments multiple times.
  1904. @c @item The functions @code{mpz_pow_ui} and @code{mpz_ui_pow_ui} now yield 1
  1905. @c for 0^0.  (In version 1, they yielded 0.)
  1906. @c In version 1 of the library, @code{mpq_set_den} handled negative
  1907. @c denominators by copying the sign to the numerator.  That is no longer done.
  1908. @c Pure assignment functions do not canonicalize the assigned variable.  It is
  1909. @c the responsibility of the user to canonicalize the assigned variable before
  1910. @c any arithmetic operations are performed on that variable.
  1911. @c Note that this is an incompatible change from version 1 of the library.
  1912. @c @end enumerate
  1913. @need 1000
  1914. @node Demonstration Programs, Efficiency, Compatibility with older versions, GMP Basics
  1915. @section Demonstration programs
  1916. @cindex Demonstration programs
  1917. @cindex Example programs
  1918. @cindex Sample programs
  1919. The @file{demos} subdirectory has some sample programs using GMP@.  These
  1920. aren't built or installed, but there's a @file{Makefile} with rules for them.
  1921. For instance,
  1922. @example
  1923. make pexpr
  1924. ./pexpr 68^975+10
  1925. @end example
  1926. @noindent
  1927. The following programs are provided
  1928. @itemize @bullet
  1929. @item
  1930. @cindex Expression parsing demo
  1931. @cindex Parsing expressions demo
  1932. @samp{pexpr} is an expression evaluator, the program used on the GMP web page.
  1933. @item
  1934. @cindex Expression parsing demo
  1935. @cindex Parsing expressions demo
  1936. The @samp{calc} subdirectory has a similar but simpler evaluator using
  1937. @command{lex} and @command{yacc}.
  1938. @item
  1939. @cindex Expression parsing demo
  1940. @cindex Parsing expressions demo
  1941. The @samp{expr} subdirectory is yet another expression evaluator, a library
  1942. designed for ease of use within a C program.  See @file{demos/expr/README} for
  1943. more information.
  1944. @item
  1945. @cindex Factorization demo
  1946. @samp{factorize} is a Pollard-Rho factorization program.
  1947. @item
  1948. @samp{isprime} is a command-line interface to the @code{mpz_probab_prime_p}
  1949. function.
  1950. @item
  1951. @samp{primes} counts or lists primes in an interval, using a sieve.
  1952. @item
  1953. @samp{qcn} is an example use of @code{mpz_kronecker_ui} to estimate quadratic
  1954. class numbers.
  1955. @item
  1956. @cindex @code{perl}
  1957. @cindex GMP Perl module
  1958. @cindex Perl module
  1959. The @samp{perl} subdirectory is a comprehensive perl interface to GMP@.  See
  1960. @file{demos/perl/INSTALL} for more information.  Documentation is in POD
  1961. format in @file{demos/perl/GMP.pm}.
  1962. @end itemize
  1963. As an aside, consideration has been given at various times to some sort of
  1964. expression evaluation within the main GMP library.  Going beyond something
  1965. minimal quickly leads to matters like user-defined functions, looping, fixnums
  1966. for control variables, etc, which are considered outside the scope of GMP
  1967. (much closer to language interpreters or compilers, @xref{Language Bindings}.)
  1968. Something simple for program input convenience may yet be a possibility, a
  1969. combination of the @file{expr} demo and the @file{pexpr} tree back-end
  1970. perhaps.  But for now the above evaluators are offered as illustrations.
  1971. @need 1000
  1972. @node Efficiency, Debugging, Demonstration Programs, GMP Basics
  1973. @section Efficiency
  1974. @cindex Efficiency
  1975. @table @asis
  1976. @item Small Operands
  1977. @cindex Small operands
  1978. On small operands, the time for function call overheads and memory allocation
  1979. can be significant in comparison to actual calculation.  This is unavoidable
  1980. in a general purpose variable precision library, although GMP attempts to be
  1981. as efficient as it can on both large and small operands.
  1982. @item Static Linking
  1983. @cindex Static linking
  1984. On some CPUs, in particular the x86s, the static @file{libgmp.a} should be
  1985. used for maximum speed, since the PIC code in the shared @file{libgmp.so} will
  1986. have a small overhead on each function call and global data address.  For many
  1987. programs this will be insignificant, but for long calculations there's a gain
  1988. to be had.
  1989. @item Initializing and Clearing
  1990. @cindex Initializing and clearing
  1991. Avoid excessive initializing and clearing of variables, since this can be
  1992. quite time consuming, especially in comparison to otherwise fast operations
  1993. like addition.
  1994. A language interpreter might want to keep a free list or stack of
  1995. initialized variables ready for use.  It should be possible to integrate
  1996. something like that with a garbage collector too.
  1997. @item Reallocations
  1998. @cindex Reallocations
  1999. An @code{mpz_t} or @code{mpq_t} variable used to hold successively increasing
  2000. values will have its memory repeatedly @code{realloc}ed, which could be quite
  2001. slow or could fragment memory, depending on the C library.  If an application
  2002. can estimate the final size then @code{mpz_init2} or @code{mpz_realloc2} can
  2003. be called to allocate the necessary space from the beginning
  2004. (@pxref{Initializing Integers}).
  2005. It doesn't matter if a size set with @code{mpz_init2} or @code{mpz_realloc2}
  2006. is too small, since all functions will do a further reallocation if necessary.
  2007. Badly overestimating memory required will waste space though.
  2008. @item @code{2exp} Functions
  2009. @cindex @code{2exp} functions
  2010. It's up to an application to call functions like @code{mpz_mul_2exp} when
  2011. appropriate.  General purpose functions like @code{mpz_mul} make no attempt to
  2012. identify powers of two or other special forms, because such inputs will
  2013. usually be very rare and testing every time would be wasteful.
  2014. @item @code{ui} and @code{si} Functions
  2015. @cindex @code{ui} and @code{si} functions
  2016. The @code{ui} functions and the small number of @code{si} functions exist for
  2017. convenience and should be used where applicable.  But if for example an
  2018. @code{mpz_t} contains a value that fits in an @code{unsigned long} there's no
  2019. need extract it and call a @code{ui} function, just use the regular @code{mpz}
  2020. function.
  2021. @item In-Place Operations
  2022. @cindex In-place operations
  2023. @code{mpz_abs}, @code{mpq_abs}, @code{mpf_abs}, @code{mpz_neg}, @code{mpq_neg}
  2024. and @code{mpf_neg} are fast when used for in-place operations like
  2025. @code{mpz_abs(x,x)}, since in the current implementation only a single field
  2026. of @code{x} needs changing.  On suitable compilers (GCC for instance) this is
  2027. inlined too.
  2028. @code{mpz_add_ui}, @code{mpz_sub_ui}, @code{mpf_add_ui} and @code{mpf_sub_ui}
  2029. benefit from an in-place operation like @code{mpz_add_ui(x,x,y)}, since
  2030. usually only one or two limbs of @code{x} will need to be changed.  The same
  2031. applies to the full precision @code{mpz_add} etc if @code{y} is small.  If
  2032. @code{y} is big then cache locality may be helped, but that's all.
  2033. @code{mpz_mul} is currently the opposite, a separate destination is slightly
  2034. better.  A call like @code{mpz_mul(x,x,y)} will, unless @code{y} is only one
  2035. limb, make a temporary copy of @code{x} before forming the result.  Normally
  2036. that copying will only be a tiny fraction of the time for the multiply, so
  2037. this is not a particularly important consideration.
  2038. @code{mpz_set}, @code{mpq_set}, @code{mpq_set_num}, @code{mpf_set}, etc, make
  2039. no attempt to recognise a copy of something to itself, so a call like
  2040. @code{mpz_set(x,x)} will be wasteful.  Naturally that would never be written
  2041. deliberately, but if it might arise from two pointers to the same object then
  2042. a test to avoid it might be desirable.
  2043. @example
  2044. if (x != y)
  2045.   mpz_set (x, y);
  2046. @end example
  2047. Note that it's never worth introducing extra @code{mpz_set} calls just to get
  2048. in-place operations.  If a result should go to a particular variable then just
  2049. direct it there and let GMP take care of data movement.
  2050. @item Divisibility Testing (Small Integers)
  2051. @cindex Divisibility testing
  2052. @code{mpz_divisible_ui_p} and @code{mpz_congruent_ui_p} are the best functions
  2053. for testing whether an @code{mpz_t} is divisible by an individual small
  2054. integer.  They use an algorithm which is faster than @code{mpz_tdiv_ui}, but
  2055. which gives no useful information about the actual remainder, only whether
  2056. it's zero (or a particular value).
  2057. However when testing divisibility by several small integers, it's best to take
  2058. a remainder modulo their product, to save multi-precision operations.  For
  2059. instance to test whether a number is divisible by any of 23, 29 or 31 take a
  2060. remainder modulo @math{23@times{}29@times{}31 = 20677} and then test that.
  2061. The division functions like @code{mpz_tdiv_q_ui} which give a quotient as well
  2062. as a remainder are generally a little slower than the remainder-only functions
  2063. like @code{mpz_tdiv_ui}.  If the quotient is only rarely wanted then it's
  2064. probably best to just take a remainder and then go back and calculate the
  2065. quotient if and when it's wanted (@code{mpz_divexact_ui} can be used if the
  2066. remainder is zero).
  2067. @item Rational Arithmetic
  2068. @cindex Rational arithmetic
  2069. The @code{mpq} functions operate on @code{mpq_t} values with no common factors
  2070. in the numerator and denominator.  Common factors are checked-for and cast out
  2071. as necessary.  In general, cancelling factors every time is the best approach
  2072. since it minimizes the sizes for subsequent operations.
  2073. However, applications that know something about the factorization of the
  2074. values they're working with might be able to avoid some of the GCDs used for
  2075. canonicalization, or swap them for divisions.  For example when multiplying by
  2076. a prime it's enough to check for factors of it in the denominator instead of
  2077. doing a full GCD@.  Or when forming a big product it might be known that very
  2078. little cancellation will be possible, and so canonicalization can be left to
  2079. the end.
  2080. The @code{mpq_numref} and @code{mpq_denref} macros give access to the
  2081. numerator and denominator to do things outside the scope of the supplied
  2082. @code{mpq} functions.  @xref{Applying Integer Functions}.
  2083. The canonical form for rationals allows mixed-type @code{mpq_t} and integer
  2084. additions or subtractions to be done directly with multiples of the
  2085. denominator.  This will be somewhat faster than @code{mpq_add}.  For example,
  2086. @example
  2087. /* mpq increment */
  2088. mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q));
  2089. /* mpq += unsigned long */
  2090. mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL);
  2091. /* mpq -= mpz */
  2092. mpz_submul (mpq_numref(q), mpq_denref(q), z);
  2093. @end example
  2094. @item Number Sequences
  2095. @cindex Number sequences
  2096. Functions like @code{mpz_fac_ui}, @code{mpz_fib_ui} and @code{mpz_bin_uiui}
  2097. are designed for calculating isolated values.  If a range of values is wanted
  2098. it's probably best to call to get a starting point and iterate from there.
  2099. @item Text Input/Output
  2100. @cindex Text input/output
  2101. Hexadecimal or octal are suggested for input or output in text form.
  2102. Power-of-2 bases like these can be converted much more efficiently than other
  2103. bases, like decimal.  For big numbers there's usually nothing of particular
  2104. interest to be seen in the digits, so the base doesn't matter much.
  2105. Maybe we can hope octal will one day become the normal base for everyday use,
  2106. as proposed by King Charles XII of Sweden and later reformers.
  2107. @c Reference: Knuth volume 2 section 4.1, page 184 of second edition.  :-)
  2108. @end table
  2109. @node Debugging, Profiling, Efficiency, GMP Basics
  2110. @section Debugging
  2111. @cindex Debugging
  2112. @table @asis
  2113. @item Stack Overflow
  2114. @cindex Stack overflow
  2115. @cindex Segmentation violation
  2116. @cindex Bus error
  2117. Depending on the system, a segmentation violation or bus error might be the
  2118. only indication of stack overflow.  See @samp{--enable-alloca} choices in
  2119. @ref{Build Options}, for how to address this.
  2120. In new enough versions of GCC, @samp{-fstack-check} may be able to ensure an
  2121. overflow is recognised by the system before too much damage is done, or
  2122. @samp{-fstack-limit-symbol} or @samp{-fstack-limit-register} may be able to
  2123. add checking if the system itself doesn't do any (@pxref{Code Gen Options,,
  2124. Options for Code Generation, gcc, Using the GNU Compiler Collection (GCC)}).
  2125. These options must be added to the @samp{CFLAGS} used in the GMP build
  2126. (@pxref{Build Options}), adding them just to an application will have no
  2127. effect.  Note also they're a slowdown, adding overhead to each function call
  2128. and each stack allocation.
  2129. @item Heap Problems
  2130. @cindex Heap problems
  2131. @cindex Malloc problems
  2132. The most likely cause of application problems with GMP is heap corruption.
  2133. Failing to @code{init} GMP variables will have unpredictable effects, and
  2134. corruption arising elsewhere in a program may well affect GMP@.  Initializing
  2135. GMP variables more than once or failing to clear them will cause memory leaks.
  2136. @cindex Malloc debugger
  2137. In all such cases a @code{malloc} debugger is recommended.  On a GNU or BSD
  2138. system the standard C library @code{malloc} has some diagnostic facilities,
  2139. see @ref{Allocation Debugging,, Allocation Debugging, libc, The GNU C Library
  2140. Reference Manual}, or @samp{man 3 malloc}.  Other possibilities, in no
  2141. particular order, include
  2142. @display
  2143. @uref{http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/}
  2144. @uref{http://dmalloc.com/}
  2145. @uref{http://www.perens.com/FreeSoftware/} @ (electric fence)
  2146. @uref{http://packages.debian.org/stable/devel/fda}
  2147. @uref{http://www.gnupdate.org/components/leakbug/}
  2148. @uref{http://people.redhat.com/~otaylor/memprof/}
  2149. @uref{http://www.cbmamiga.demon.co.uk/mpatrol/}
  2150. @end display
  2151. The GMP default allocation routines in @file{memory.c} also have a simple
  2152. sentinel scheme which can be enabled with @code{#define DEBUG} in that file.
  2153. This is mainly designed for detecting buffer overruns during GMP development,
  2154. but might find other uses.
  2155. @item Stack Backtraces
  2156. @cindex Stack backtrace
  2157. On some systems the compiler options GMP uses by default can interfere with
  2158. debugging.  In particular on x86 and 68k systems @samp{-fomit-frame-pointer}
  2159. is used and this generally inhibits stack backtracing.  Recompiling without
  2160. such options may help while debugging, though the usual caveats about it
  2161. potentially moving a memory problem or hiding a compiler bug will apply.
  2162. @item GDB, the GNU Debugger
  2163. @cindex GDB
  2164. @cindex GNU Debugger
  2165. A sample @file{.gdbinit} is included in the distribution, showing how to call
  2166. some undocumented dump functions to print GMP variables from within GDB@.  Note
  2167. that these functions shouldn't be used in final application code since they're
  2168. undocumented and may be subject to incompatible changes in future versions of
  2169. GMP.
  2170. @item Source File Paths
  2171. GMP has multiple source files with the same name, in different directories.
  2172. For example @file{mpz}, @file{mpq} and @file{mpf} each have an
  2173. @file{init.c}.  If the debugger can't already determine the right one it may
  2174. help to build with absolute paths on each C file.  One way to do that is to
  2175. use a separate object directory with an absolute path to the source directory.
  2176. @example
  2177. cd /my/build/dir
  2178. /my/source/dir/gmp-@value{VERSION}/configure
  2179. @end example
  2180. This works via @code{VPATH}, and might require GNU @command{make}.
  2181. Alternately it might be possible to change the @code{.c.lo} rules
  2182. appropriately.
  2183. @item Assertion Checking
  2184. @cindex Assertion checking
  2185. The build option @option{--enable-assert} is available to add some consistency
  2186. checks to the library (see @ref{Build Options}).  These are likely to be of
  2187. limited value to most applications.  Assertion failures are just as likely to
  2188. indicate memory corruption as a library or compiler bug.
  2189. Applications using the low-level @code{mpn} functions, however, will benefit
  2190. from @option{--enable-assert} since it adds checks on the parameters of most
  2191. such functions, many of which have subtle restrictions on their usage.  Note
  2192. however that only the generic C code has checks, not the assembly code, so
  2193. CPU @samp{none} should be used for maximum checking.
  2194. @item Temporary Memory Checking
  2195. The build option @option{--enable-alloca=debug} arranges that each block of
  2196. temporary memory in GMP is allocated with a separate call to @code{malloc} (or
  2197. the allocation function set with @code{mp_set_memory_functions}).
  2198. This can help a malloc debugger detect accesses outside the intended bounds,
  2199. or detect memory not released.  In a normal build, on the other hand,
  2200. temporary memory is allocated in blocks which GMP divides up for its own use,
  2201. or may be allocated with a compiler builtin @code{alloca} which will go
  2202. nowhere near any malloc debugger hooks.
  2203. @item Maximum Debuggability
  2204. To summarize the above, a GMP build for maximum debuggability would be
  2205. @example
  2206. ./configure --disable-shared --enable-assert 
  2207.   --enable-alloca=debug --host=none CFLAGS=-g
  2208. @end example