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

数学计算

开发平台:

Unix_Linux

  1. For C++, add @samp{--enable-cxx CXXFLAGS=-g}.
  2. @item Checker
  3. @cindex Checker
  4. @cindex GCC Checker
  5. The GCC checker (@uref{http://savannah.nongnu.org/projects/checker/}) can be
  6. used with GMP@.  It contains a stub library which means GMP applications
  7. compiled with checker can use a normal GMP build.
  8. A build of GMP with checking within GMP itself can be made.  This will run
  9. very very slowly.  On GNU/Linux for example,
  10. @cindex @command{checkergcc}
  11. @example
  12. ./configure --host=none-pc-linux-gnu CC=checkergcc
  13. @end example
  14. @samp{--host=none} must be used, since the GMP assembly code doesn't support
  15. the checking scheme.  The GMP C++ features cannot be used, since current
  16. versions of checker (0.9.9.1) don't yet support the standard C++ library.
  17. @item Valgrind
  18. @cindex Valgrind
  19. The valgrind program (@uref{http://valgrind.org/}) is a memory
  20. checker for x86s.  It translates and emulates machine instructions to do
  21. strong checks for uninitialized data (at the level of individual bits), memory
  22. accesses through bad pointers, and memory leaks.
  23. Recent versions of Valgrind are getting support for MMX and SSE/SSE2
  24. instructions, for past versions GMP will need to be configured not to use
  25. those, ie.@: for an x86 without them (for instance plain @samp{i486}).
  26. @item Other Problems
  27. Any suspected bug in GMP itself should be isolated to make sure it's not an
  28. application problem, see @ref{Reporting Bugs}.
  29. @end table
  30. @node Profiling, Autoconf, Debugging, GMP Basics
  31. @section Profiling
  32. @cindex Profiling
  33. @cindex Execution profiling
  34. @cindex @code{--enable-profiling}
  35. Running a program under a profiler is a good way to find where it's spending
  36. most time and where improvements can be best sought.  The profiling choices
  37. for a GMP build are as follows.
  38. @table @asis
  39. @item @samp{--disable-profiling}
  40. The default is to add nothing special for profiling.
  41. It should be possible to just compile the mainline of a program with @code{-p}
  42. and use @command{prof} to get a profile consisting of timer-based sampling of
  43. the program counter.  Most of the GMP assembly code has the necessary symbol
  44. information.
  45. This approach has the advantage of minimizing interference with normal program
  46. operation, but on most systems the resolution of the sampling is quite low (10
  47. milliseconds for instance), requiring long runs to get accurate information.
  48. @item @samp{--enable-profiling=prof}
  49. @cindex @code{prof}
  50. Build with support for the system @command{prof}, which means @samp{-p} added
  51. to the @samp{CFLAGS}.
  52. This provides call counting in addition to program counter sampling, which
  53. allows the most frequently called routines to be identified, and an average
  54. time spent in each routine to be determined.
  55. The x86 assembly code has support for this option, but on other processors
  56. the assembly routines will be as if compiled without @samp{-p} and therefore
  57. won't appear in the call counts.
  58. On some systems, such as GNU/Linux, @samp{-p} in fact means @samp{-pg} and in
  59. this case @samp{--enable-profiling=gprof} described below should be used
  60. instead.
  61. @item @samp{--enable-profiling=gprof}
  62. @cindex @code{gprof}
  63. Build with support for @command{gprof}, which means @samp{-pg} added to the
  64. @samp{CFLAGS}.
  65. This provides call graph construction in addition to call counting and program
  66. counter sampling, which makes it possible to count calls coming from different
  67. locations.  For example the number of calls to @code{mpn_mul} from
  68. @code{mpz_mul} versus the number from @code{mpf_mul}.  The program counter
  69. sampling is still flat though, so only a total time in @code{mpn_mul} would be
  70. accumulated, not a separate amount for each call site.
  71. The x86 assembly code has support for this option, but on other processors
  72. the assembly routines will be as if compiled without @samp{-pg} and therefore
  73. not be included in the call counts.
  74. On x86 and m68k systems @samp{-pg} and @samp{-fomit-frame-pointer} are
  75. incompatible, so the latter is omitted from the default flags in that case,
  76. which might result in poorer code generation.
  77. Incidentally, it should be possible to use the @command{gprof} program with a
  78. plain @samp{--enable-profiling=prof} build.  But in that case only the
  79. @samp{gprof -p} flat profile and call counts can be expected to be valid, not
  80. the @samp{gprof -q} call graph.
  81. @item @samp{--enable-profiling=instrument}
  82. @cindex @code{-finstrument-functions}
  83. @cindex @code{instrument-functions}
  84. Build with the GCC option @samp{-finstrument-functions} added to the
  85. @samp{CFLAGS} (@pxref{Code Gen Options,, Options for Code Generation, gcc,
  86. Using the GNU Compiler Collection (GCC)}).
  87. This inserts special instrumenting calls at the start and end of each
  88. function, allowing exact timing and full call graph construction.
  89. This instrumenting is not normally a standard system feature and will require
  90. support from an external library, such as
  91. @cindex FunctionCheck
  92. @cindex fnccheck
  93. @display
  94. @uref{http://sourceforge.net/projects/fnccheck/}
  95. @end display
  96. This should be included in @samp{LIBS} during the GMP configure so that test
  97. programs will link.  For example,
  98. @example
  99. ./configure --enable-profiling=instrument LIBS=-lfc
  100. @end example
  101. On a GNU system the C library provides dummy instrumenting functions, so
  102. programs compiled with this option will link.  In this case it's only
  103. necessary to ensure the correct library is added when linking an application.
  104. The x86 assembly code supports this option, but on other processors the
  105. assembly routines will be as if compiled without
  106. @samp{-finstrument-functions} meaning time spent in them will effectively be
  107. attributed to their caller.
  108. @end table
  109. @node Autoconf, Emacs, Profiling, GMP Basics
  110. @section Autoconf
  111. @cindex Autoconf
  112. Autoconf based applications can easily check whether GMP is installed.  The
  113. only thing to be noted is that GMP library symbols from version 3 onwards have
  114. prefixes like @code{__gmpz}.  The following therefore would be a simple test,
  115. @cindex @code{AC_CHECK_LIB}
  116. @example
  117. AC_CHECK_LIB(gmp, __gmpz_init)
  118. @end example
  119. This just uses the default @code{AC_CHECK_LIB} actions for found or not found,
  120. but an application that must have GMP would want to generate an error if not
  121. found.  For example,
  122. @example
  123. AC_CHECK_LIB(gmp, __gmpz_init, ,
  124.   [AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])])
  125. @end example
  126. If functions added in some particular version of GMP are required, then one of
  127. those can be used when checking.  For example @code{mpz_mul_si} was added in
  128. GMP 3.1,
  129. @example
  130. AC_CHECK_LIB(gmp, __gmpz_mul_si, ,
  131.   [AC_MSG_ERROR(
  132.   [GNU MP not found, or not 3.1 or up, see http://gmplib.org/])])
  133. @end example
  134. An alternative would be to test the version number in @file{gmp.h} using say
  135. @code{AC_EGREP_CPP}.  That would make it possible to test the exact version,
  136. if some particular sub-minor release is known to be necessary.
  137. In general it's recommended that applications should simply demand a new
  138. enough GMP rather than trying to provide supplements for features not
  139. available in past versions.
  140. Occasionally an application will need or want to know the size of a type at
  141. configuration or preprocessing time, not just with @code{sizeof} in the code.
  142. This can be done in the normal way with @code{mp_limb_t} etc, but GMP 4.0 or
  143. up is best for this, since prior versions needed certain @samp{-D} defines on
  144. systems using a @code{long long} limb.  The following would suit Autoconf 2.50
  145. or up,
  146. @example
  147. AC_CHECK_SIZEOF(mp_limb_t, , [#include <gmp.h>])
  148. @end example
  149. @node Emacs,  , Autoconf, GMP Basics
  150. @section Emacs
  151. @cindex Emacs
  152. @cindex @code{info-lookup-symbol}
  153. @key{C-h C-i} (@code{info-lookup-symbol}) is a good way to find documentation
  154. on C functions while editing (@pxref{Info Lookup, , Info Documentation Lookup,
  155. emacs, The Emacs Editor}).
  156. The GMP manual can be included in such lookups by putting the following in
  157. your @file{.emacs},
  158. @c  This isn't pretty, but there doesn't seem to be a better way (in emacs
  159. @c  21.2 at least).  info-lookup->mode-value could be used for the "assoc"s,
  160. @c  but that function isn't documented, whereas info-lookup-alist is.
  161. @c
  162. @example
  163. (eval-after-load "info-look"
  164.   '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist))))
  165.      (setcar (nthcdr 3 mode-value)
  166.              (cons '("(gmp)Function Index" nil "^ -.* " "\>")
  167.                    (nth 3 mode-value)))))
  168. @end example
  169. @node Reporting Bugs, Integer Functions, GMP Basics, Top
  170. @comment  node-name,  next,  previous,  up
  171. @chapter Reporting Bugs
  172. @cindex Reporting bugs
  173. @cindex Bug reporting
  174. If you think you have found a bug in the GMP library, please investigate it
  175. and report it.  We have made this library available to you, and it is not too
  176. much to ask you to report the bugs you find.
  177. Before you report a bug, check it's not already addressed in @ref{Known Build
  178. Problems}, or perhaps @ref{Notes for Particular Systems}.  You may also want
  179. to check @uref{http://gmplib.org/} for patches for this release.
  180. Please include the following in any report,
  181. @itemize @bullet
  182. @item
  183. The GMP version number, and if pre-packaged or patched then say so.
  184. @item
  185. A test program that makes it possible for us to reproduce the bug.  Include
  186. instructions on how to run the program.
  187. @item
  188. A description of what is wrong.  If the results are incorrect, in what way.
  189. If you get a crash, say so.
  190. @item
  191. If you get a crash, include a stack backtrace from the debugger if it's
  192. informative (@samp{where} in @command{gdb}, or @samp{$C} in @command{adb}).
  193. @item
  194. Please do not send core dumps, executables or @command{strace}s.
  195. @item
  196. The configuration options you used when building GMP, if any.
  197. @item
  198. The name of the compiler and its version.  For @command{gcc}, get the version
  199. with @samp{gcc -v}, otherwise perhaps @samp{what `which cc`}, or similar.
  200. @item
  201. The output from running @samp{uname -a}.
  202. @item
  203. The output from running @samp{./config.guess}, and from running
  204. @samp{./configfsf.guess} (might be the same).
  205. @item
  206. If the bug is related to @samp{configure}, then the compressed contents of
  207. @file{config.log}.
  208. @item
  209. If the bug is related to an @file{asm} file not assembling, then the contents
  210. of @file{config.m4} and the offending line or lines from the temporary
  211. @file{mpn/tmp-<file>.s}.
  212. @end itemize
  213. Please make an effort to produce a self-contained report, with something
  214. definite that can be tested or debugged.  Vague queries or piecemeal messages
  215. are difficult to act on and don't help the development effort.
  216. It is not uncommon that an observed problem is actually due to a bug in the
  217. compiler; the GMP code tends to explore interesting corners in compilers.
  218. If your bug report is good, we will do our best to help you get a corrected
  219. version of the library; if the bug report is poor, we won't do anything about
  220. it (except maybe ask you to send a better report).
  221. Send your report to: @email{gmp-bugs@@gmplib.org}.
  222. If you think something in this manual is unclear, or downright incorrect, or if
  223. the language needs to be improved, please send a note to the same address.
  224. @node Integer Functions, Rational Number Functions, Reporting Bugs, Top
  225. @comment  node-name,  next,  previous,  up
  226. @chapter Integer Functions
  227. @cindex Integer functions
  228. This chapter describes the GMP functions for performing integer arithmetic.
  229. These functions start with the prefix @code{mpz_}.
  230. GMP integers are stored in objects of type @code{mpz_t}.
  231. @menu
  232. * Initializing Integers::
  233. * Assigning Integers::
  234. * Simultaneous Integer Init & Assign::
  235. * Converting Integers::
  236. * Integer Arithmetic::
  237. * Integer Division::
  238. * Integer Exponentiation::
  239. * Integer Roots::
  240. * Number Theoretic Functions::
  241. * Integer Comparisons::
  242. * Integer Logic and Bit Fiddling::
  243. * I/O of Integers::
  244. * Integer Random Numbers::
  245. * Integer Import and Export::
  246. * Miscellaneous Integer Functions::
  247. * Integer Special Functions::
  248. @end menu
  249. @node Initializing Integers, Assigning Integers, Integer Functions, Integer Functions
  250. @comment  node-name,  next,  previous,  up
  251. @section Initialization Functions
  252. @cindex Integer initialization functions
  253. @cindex Initialization functions
  254. The functions for integer arithmetic assume that all integer objects are
  255. initialized.  You do that by calling the function @code{mpz_init}.  For
  256. example,
  257. @example
  258. @{
  259.   mpz_t integ;
  260.   mpz_init (integ);
  261.   @dots{}
  262.   mpz_add (integ, @dots{});
  263.   @dots{}
  264.   mpz_sub (integ, @dots{});
  265.   /* Unless the program is about to exit, do ... */
  266.   mpz_clear (integ);
  267. @}
  268. @end example
  269. As you can see, you can store new values any number of times, once an
  270. object is initialized.
  271. @deftypefun void mpz_init (mpz_t @var{x})
  272. Initialize @var{x}, and set its value to 0.
  273. @end deftypefun
  274. @deftypefun void mpz_inits (mpz_t @var{x}, ...)
  275. Initialize a NULL-terminated list of @code{mpz_t} variables, and set their
  276. values to 0.
  277. @end deftypefun
  278. @deftypefun void mpz_init2 (mpz_t @var{x}, mp_bitcnt_t @var{n})
  279. Initialize @var{x}, with space for @var{n}-bit numbers, and set its value to 0.
  280. Calling this function instead of @code{mpz_init} or @code{mpz_inits} is never
  281. necessary; reallocation is handled automatically by GMP when needed.
  282. @var{n} is only the initial space, @var{x} will grow automatically in
  283. the normal way, if necessary, for subsequent values stored.  @code{mpz_init2}
  284. makes it possible to avoid such reallocations if a maximum size is known in
  285. advance.
  286. @end deftypefun
  287. @deftypefun void mpz_clear (mpz_t @var{x})
  288. Free the space occupied by @var{x}.  Call this function for all @code{mpz_t}
  289. variables when you are done with them.
  290. @end deftypefun
  291. @deftypefun void mpz_clears (mpz_t @var{x}, ...)
  292. Free the space occupied by a NULL-terminated list of @code{mpz_t} variables.
  293. @end deftypefun
  294. @deftypefun void mpz_realloc2 (mpz_t @var{x}, mp_bitcnt_t @var{n})
  295. Change the space allocated for @var{x} to @var{n} bits.  The value in @var{x}
  296. is preserved if it fits, or is set to 0 if not.
  297. Calling this function is never necessary; reallocation is handled automatically
  298. by GMP when needed.  But this function can be used to increase the space for a
  299. variable in order to avoid repeated automatic reallocations, or to decrease it
  300. to give memory back to the heap.
  301. @end deftypefun
  302. @node Assigning Integers, Simultaneous Integer Init & Assign, Initializing Integers, Integer Functions
  303. @comment  node-name,  next,  previous,  up
  304. @section Assignment Functions
  305. @cindex Integer assignment functions
  306. @cindex Assignment functions
  307. These functions assign new values to already initialized integers
  308. (@pxref{Initializing Integers}).
  309. @deftypefun void mpz_set (mpz_t @var{rop}, mpz_t @var{op})
  310. @deftypefunx void mpz_set_ui (mpz_t @var{rop}, unsigned long int @var{op})
  311. @deftypefunx void mpz_set_si (mpz_t @var{rop}, signed long int @var{op})
  312. @deftypefunx void mpz_set_d (mpz_t @var{rop}, double @var{op})
  313. @deftypefunx void mpz_set_q (mpz_t @var{rop}, mpq_t @var{op})
  314. @deftypefunx void mpz_set_f (mpz_t @var{rop}, mpf_t @var{op})
  315. Set the value of @var{rop} from @var{op}.
  316. @code{mpz_set_d}, @code{mpz_set_q} and @code{mpz_set_f} truncate @var{op} to
  317. make it an integer.
  318. @end deftypefun
  319. @deftypefun int mpz_set_str (mpz_t @var{rop}, char *@var{str}, int @var{base})
  320. Set the value of @var{rop} from @var{str}, a null-terminated C string in base
  321. @var{base}.  White space is allowed in the string, and is simply ignored.
  322. The @var{base} may vary from 2 to 62, or if @var{base} is 0, then the leading
  323. characters are used: @code{0x} and @code{0X} for hexadecimal, @code{0b} and
  324. @code{0B} for binary, @code{0} for octal, or decimal otherwise.
  325. For bases up to 36, case is ignored; upper-case and lower-case letters have
  326. the same value.  For bases 37 to 62, upper-case letter represent the usual
  327. 10..35 while lower-case letter represent 36..61.
  328. This function returns 0 if the entire string is a valid number in base
  329. @var{base}.  Otherwise it returns @minus{}1.
  330. @c
  331. @c  It turns out that it is not entirely true that this function ignores
  332. @c  white-space.  It does ignore it between digits, but not after a minus sign
  333. @c  or within or after ``0x''.  Some thought was given to disallowing all
  334. @c  whitespace, but that would be an incompatible change, whitespace has been
  335. @c  documented as ignored ever since GMP 1.
  336. @c
  337. @end deftypefun
  338. @deftypefun void mpz_swap (mpz_t @var{rop1}, mpz_t @var{rop2})
  339. Swap the values @var{rop1} and @var{rop2} efficiently.
  340. @end deftypefun
  341. @node Simultaneous Integer Init & Assign, Converting Integers, Assigning Integers, Integer Functions
  342. @comment  node-name,  next,  previous,  up
  343. @section Combined Initialization and Assignment Functions
  344. @cindex Integer assignment functions
  345. @cindex Assignment functions
  346. @cindex Integer initialization functions
  347. @cindex Initialization functions
  348. For convenience, GMP provides a parallel series of initialize-and-set functions
  349. which initialize the output and then store the value there.  These functions'
  350. names have the form @code{mpz_init_set@dots{}}
  351. Here is an example of using one:
  352. @example
  353. @{
  354.   mpz_t pie;
  355.   mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10);
  356.   @dots{}
  357.   mpz_sub (pie, @dots{});
  358.   @dots{}
  359.   mpz_clear (pie);
  360. @}
  361. @end example
  362. @noindent
  363. Once the integer has been initialized by any of the @code{mpz_init_set@dots{}}
  364. functions, it can be used as the source or destination operand for the ordinary
  365. integer functions.  Don't use an initialize-and-set function on a variable
  366. already initialized!
  367. @deftypefun void mpz_init_set (mpz_t @var{rop}, mpz_t @var{op})
  368. @deftypefunx void mpz_init_set_ui (mpz_t @var{rop}, unsigned long int @var{op})
  369. @deftypefunx void mpz_init_set_si (mpz_t @var{rop}, signed long int @var{op})
  370. @deftypefunx void mpz_init_set_d (mpz_t @var{rop}, double @var{op})
  371. Initialize @var{rop} with limb space and set the initial numeric value from
  372. @var{op}.
  373. @end deftypefun
  374. @deftypefun int mpz_init_set_str (mpz_t @var{rop}, char *@var{str}, int @var{base})
  375. Initialize @var{rop} and set its value like @code{mpz_set_str} (see its
  376. documentation above for details).
  377. If the string is a correct base @var{base} number, the function returns 0;
  378. if an error occurs it returns @minus{}1.  @var{rop} is initialized even if
  379. an error occurs.  (I.e., you have to call @code{mpz_clear} for it.)
  380. @end deftypefun
  381. @node Converting Integers, Integer Arithmetic, Simultaneous Integer Init & Assign, Integer Functions
  382. @comment  node-name,  next,  previous,  up
  383. @section Conversion Functions
  384. @cindex Integer conversion functions
  385. @cindex Conversion functions
  386. This section describes functions for converting GMP integers to standard C
  387. types.  Functions for converting @emph{to} GMP integers are described in
  388. @ref{Assigning Integers} and @ref{I/O of Integers}.
  389. @deftypefun {unsigned long int} mpz_get_ui (mpz_t @var{op})
  390. Return the value of @var{op} as an @code{unsigned long}.
  391. If @var{op} is too big to fit an @code{unsigned long} then just the least
  392. significant bits that do fit are returned.  The sign of @var{op} is ignored,
  393. only the absolute value is used.
  394. @end deftypefun
  395. @deftypefun {signed long int} mpz_get_si (mpz_t @var{op})
  396. If @var{op} fits into a @code{signed long int} return the value of @var{op}.
  397. Otherwise return the least significant part of @var{op}, with the same sign
  398. as @var{op}.
  399. If @var{op} is too big to fit in a @code{signed long int}, the returned
  400. result is probably not very useful.  To find out if the value will fit, use
  401. the function @code{mpz_fits_slong_p}.
  402. @end deftypefun
  403. @deftypefun double mpz_get_d (mpz_t @var{op})
  404. Convert @var{op} to a @code{double}, truncating if necessary (ie.@: rounding
  405. towards zero).
  406. If the exponent from the conversion is too big, the result is system
  407. dependent.  An infinity is returned where available.  A hardware overflow trap
  408. may or may not occur.
  409. @end deftypefun
  410. @deftypefun double mpz_get_d_2exp (signed long int *@var{exp}, mpz_t @var{op})
  411. Convert @var{op} to a @code{double}, truncating if necessary (ie.@: rounding
  412. towards zero), and returning the exponent separately.
  413. The return value is in the range @math{0.5@le{}@GMPabs{@var{d}}<1} and the
  414. exponent is stored to @code{*@var{exp}}.  @m{@var{d} * 2^{exp}, @var{d} *
  415. 2^@var{exp}} is the (truncated) @var{op} value.  If @var{op} is zero, the
  416. return is @math{0.0} and 0 is stored to @code{*@var{exp}}.
  417. @cindex @code{frexp}
  418. This is similar to the standard C @code{frexp} function (@pxref{Normalization
  419. Functions,,, libc, The GNU C Library Reference Manual}).
  420. @end deftypefun
  421. @deftypefun {char *} mpz_get_str (char *@var{str}, int @var{base}, mpz_t @var{op})
  422. Convert @var{op} to a string of digits in base @var{base}.  The base argument
  423. may vary from 2 to 62 or from @minus{}2 to @minus{}36.
  424. For @var{base} in the range 2..36, digits and lower-case letters are used; for
  425. @minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62,
  426. digits, upper-case letters, and lower-case letters (in that significance order)
  427. are used.
  428. If @var{str} is @code{NULL}, the result string is allocated using the current
  429. allocation function (@pxref{Custom Allocation}).  The block will be
  430. @code{strlen(str)+1} bytes, that being exactly enough for the string and
  431. null-terminator.
  432. If @var{str} is not @code{NULL}, it should point to a block of storage large
  433. enough for the result, that being @code{mpz_sizeinbase (@var{op}, @var{base})
  434. + 2}.  The two extra bytes are for a possible minus sign, and the
  435. null-terminator.
  436. A pointer to the result string is returned, being either the allocated block,
  437. or the given @var{str}.
  438. @end deftypefun
  439. @need 2000
  440. @node Integer Arithmetic, Integer Division, Converting Integers, Integer Functions
  441. @comment  node-name,  next,  previous,  up
  442. @section Arithmetic Functions
  443. @cindex Integer arithmetic functions
  444. @cindex Arithmetic functions
  445. @deftypefun void mpz_add (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  446. @deftypefunx void mpz_add_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  447. Set @var{rop} to @math{@var{op1} + @var{op2}}.
  448. @end deftypefun
  449. @deftypefun void mpz_sub (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  450. @deftypefunx void mpz_sub_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  451. @deftypefunx void mpz_ui_sub (mpz_t @var{rop}, unsigned long int @var{op1}, mpz_t @var{op2})
  452. Set @var{rop} to @var{op1} @minus{} @var{op2}.
  453. @end deftypefun
  454. @deftypefun void mpz_mul (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  455. @deftypefunx void mpz_mul_si (mpz_t @var{rop}, mpz_t @var{op1}, long int @var{op2})
  456. @deftypefunx void mpz_mul_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  457. Set @var{rop} to @math{@var{op1} @GMPtimes{} @var{op2}}.
  458. @end deftypefun
  459. @deftypefun void mpz_addmul (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  460. @deftypefunx void mpz_addmul_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  461. Set @var{rop} to @math{@var{rop} + @var{op1} @GMPtimes{} @var{op2}}.
  462. @end deftypefun
  463. @deftypefun void mpz_submul (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  464. @deftypefunx void mpz_submul_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  465. Set @var{rop} to @math{@var{rop} - @var{op1} @GMPtimes{} @var{op2}}.
  466. @end deftypefun
  467. @deftypefun void mpz_mul_2exp (mpz_t @var{rop}, mpz_t @var{op1}, mp_bitcnt_t @var{op2})
  468. @cindex Bit shift left
  469. Set @var{rop} to @m{@var{op1} times 2^{op2}, @var{op1} times 2 raised to
  470. @var{op2}}.  This operation can also be defined as a left shift by @var{op2}
  471. bits.
  472. @end deftypefun
  473. @deftypefun void mpz_neg (mpz_t @var{rop}, mpz_t @var{op})
  474. Set @var{rop} to @minus{}@var{op}.
  475. @end deftypefun
  476. @deftypefun void mpz_abs (mpz_t @var{rop}, mpz_t @var{op})
  477. Set @var{rop} to the absolute value of @var{op}.
  478. @end deftypefun
  479. @need 2000
  480. @node Integer Division, Integer Exponentiation, Integer Arithmetic, Integer Functions
  481. @section Division Functions
  482. @cindex Integer division functions
  483. @cindex Division functions
  484. Division is undefined if the divisor is zero.  Passing a zero divisor to the
  485. division or modulo functions (including the modular powering functions
  486. @code{mpz_powm} and @code{mpz_powm_ui}), will cause an intentional division by
  487. zero.  This lets a program handle arithmetic exceptions in these functions the
  488. same way as for normal C @code{int} arithmetic.
  489. @c  Separate deftypefun groups for cdiv, fdiv and tdiv produce a blank line
  490. @c  between each, and seem to let tex do a better job of page breaks than an
  491. @c  @sp 1 in the middle of one big set.
  492. @deftypefun void mpz_cdiv_q (mpz_t @var{q}, mpz_t @var{n}, mpz_t @var{d})
  493. @deftypefunx void mpz_cdiv_r (mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  494. @deftypefunx void mpz_cdiv_qr (mpz_t @var{q}, mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  495. @maybepagebreak
  496. @deftypefunx {unsigned long int} mpz_cdiv_q_ui (mpz_t @var{q}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  497. @deftypefunx {unsigned long int} mpz_cdiv_r_ui (mpz_t @var{r}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  498. @deftypefunx {unsigned long int} mpz_cdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{mpz_t @var{n}}, @w{unsigned long int @var{d}})
  499. @deftypefunx {unsigned long int} mpz_cdiv_ui (mpz_t @var{n}, @w{unsigned long int @var{d}})
  500. @maybepagebreak
  501. @deftypefunx void mpz_cdiv_q_2exp (mpz_t @var{q}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  502. @deftypefunx void mpz_cdiv_r_2exp (mpz_t @var{r}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  503. @end deftypefun
  504. @deftypefun void mpz_fdiv_q (mpz_t @var{q}, mpz_t @var{n}, mpz_t @var{d})
  505. @deftypefunx void mpz_fdiv_r (mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  506. @deftypefunx void mpz_fdiv_qr (mpz_t @var{q}, mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  507. @maybepagebreak
  508. @deftypefunx {unsigned long int} mpz_fdiv_q_ui (mpz_t @var{q}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  509. @deftypefunx {unsigned long int} mpz_fdiv_r_ui (mpz_t @var{r}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  510. @deftypefunx {unsigned long int} mpz_fdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{mpz_t @var{n}}, @w{unsigned long int @var{d}})
  511. @deftypefunx {unsigned long int} mpz_fdiv_ui (mpz_t @var{n}, @w{unsigned long int @var{d}})
  512. @maybepagebreak
  513. @deftypefunx void mpz_fdiv_q_2exp (mpz_t @var{q}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  514. @deftypefunx void mpz_fdiv_r_2exp (mpz_t @var{r}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  515. @end deftypefun
  516. @deftypefun void mpz_tdiv_q (mpz_t @var{q}, mpz_t @var{n}, mpz_t @var{d})
  517. @deftypefunx void mpz_tdiv_r (mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  518. @deftypefunx void mpz_tdiv_qr (mpz_t @var{q}, mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  519. @maybepagebreak
  520. @deftypefunx {unsigned long int} mpz_tdiv_q_ui (mpz_t @var{q}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  521. @deftypefunx {unsigned long int} mpz_tdiv_r_ui (mpz_t @var{r}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  522. @deftypefunx {unsigned long int} mpz_tdiv_qr_ui (mpz_t @var{q}, mpz_t @var{r}, @w{mpz_t @var{n}}, @w{unsigned long int @var{d}})
  523. @deftypefunx {unsigned long int} mpz_tdiv_ui (mpz_t @var{n}, @w{unsigned long int @var{d}})
  524. @maybepagebreak
  525. @deftypefunx void mpz_tdiv_q_2exp (mpz_t @var{q}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  526. @deftypefunx void mpz_tdiv_r_2exp (mpz_t @var{r}, mpz_t @var{n}, @w{mp_bitcnt_t @var{b}})
  527. @cindex Bit shift right
  528. @sp 1
  529. Divide @var{n} by @var{d}, forming a quotient @var{q} and/or remainder
  530. @var{r}.  For the @code{2exp} functions, @m{@var{d}=2^b, @var{d}=2^@var{b}}.
  531. The rounding is in three styles, each suiting different applications.
  532. @itemize @bullet
  533. @item
  534. @code{cdiv} rounds @var{q} up towards @m{+infty, +infinity}, and @var{r} will
  535. have the opposite sign to @var{d}.  The @code{c} stands for ``ceil''.
  536. @item
  537. @code{fdiv} rounds @var{q} down towards @m{-infty, @minus{}infinity}, and
  538. @var{r} will have the same sign as @var{d}.  The @code{f} stands for
  539. ``floor''.
  540. @item
  541. @code{tdiv} rounds @var{q} towards zero, and @var{r} will have the same sign
  542. as @var{n}.  The @code{t} stands for ``truncate''.
  543. @end itemize
  544. In all cases @var{q} and @var{r} will satisfy
  545. @m{@var{n}=@var{q}@var{d}+@var{r}, @var{n}=@var{q}*@var{d}+@var{r}}, and
  546. @var{r} will satisfy @math{0@le{}@GMPabs{@var{r}}<@GMPabs{@var{d}}}.
  547. The @code{q} functions calculate only the quotient, the @code{r} functions
  548. only the remainder, and the @code{qr} functions calculate both.  Note that for
  549. @code{qr} the same variable cannot be passed for both @var{q} and @var{r}, or
  550. results will be unpredictable.
  551. For the @code{ui} variants the return value is the remainder, and in fact
  552. returning the remainder is all the @code{div_ui} functions do.  For
  553. @code{tdiv} and @code{cdiv} the remainder can be negative, so for those the
  554. return value is the absolute value of the remainder.
  555. For the @code{2exp} variants the divisor is @m{2^b,2^@var{b}}.  These
  556. functions are implemented as right shifts and bit masks, but of course they
  557. round the same as the other functions.
  558. For positive @var{n} both @code{mpz_fdiv_q_2exp} and @code{mpz_tdiv_q_2exp}
  559. are simple bitwise right shifts.  For negative @var{n}, @code{mpz_fdiv_q_2exp}
  560. is effectively an arithmetic right shift treating @var{n} as twos complement
  561. the same as the bitwise logical functions do, whereas @code{mpz_tdiv_q_2exp}
  562. effectively treats @var{n} as sign and magnitude.
  563. @end deftypefun
  564. @deftypefun void mpz_mod (mpz_t @var{r}, mpz_t @var{n}, mpz_t @var{d})
  565. @deftypefunx {unsigned long int} mpz_mod_ui (mpz_t @var{r}, mpz_t @var{n}, @w{unsigned long int @var{d}})
  566. Set @var{r} to @var{n} @code{mod} @var{d}.  The sign of the divisor is
  567. ignored; the result is always non-negative.
  568. @code{mpz_mod_ui} is identical to @code{mpz_fdiv_r_ui} above, returning the
  569. remainder as well as setting @var{r}.  See @code{mpz_fdiv_ui} above if only
  570. the return value is wanted.
  571. @end deftypefun
  572. @deftypefun void mpz_divexact (mpz_t @var{q}, mpz_t @var{n}, mpz_t @var{d})
  573. @deftypefunx void mpz_divexact_ui (mpz_t @var{q}, mpz_t @var{n}, unsigned long @var{d})
  574. @cindex Exact division functions
  575. Set @var{q} to @var{n}/@var{d}.  These functions produce correct results only
  576. when it is known in advance that @var{d} divides @var{n}.
  577. These routines are much faster than the other division functions, and are the
  578. best choice when exact division is known to occur, for example reducing a
  579. rational to lowest terms.
  580. @end deftypefun
  581. @deftypefun int mpz_divisible_p (mpz_t @var{n}, mpz_t @var{d})
  582. @deftypefunx int mpz_divisible_ui_p (mpz_t @var{n}, unsigned long int @var{d})
  583. @deftypefunx int mpz_divisible_2exp_p (mpz_t @var{n}, mp_bitcnt_t @var{b})
  584. @cindex Divisibility functions
  585. Return non-zero if @var{n} is exactly divisible by @var{d}, or in the case of
  586. @code{mpz_divisible_2exp_p} by @m{2^b,2^@var{b}}.
  587. @var{n} is divisible by @var{d} if there exists an integer @var{q} satisfying
  588. @math{@var{n} = @var{q}@GMPmultiply{}@var{d}}.  Unlike the other division
  589. functions, @math{@var{d}=0} is accepted and following the rule it can be seen
  590. that only 0 is considered divisible by 0.
  591. @end deftypefun
  592. @deftypefun int mpz_congruent_p (mpz_t @var{n}, mpz_t @var{c}, mpz_t @var{d})
  593. @deftypefunx int mpz_congruent_ui_p (mpz_t @var{n}, unsigned long int @var{c}, unsigned long int @var{d})
  594. @deftypefunx int mpz_congruent_2exp_p (mpz_t @var{n}, mpz_t @var{c}, mp_bitcnt_t @var{b})
  595. @cindex Divisibility functions
  596. @cindex Congruence functions
  597. Return non-zero if @var{n} is congruent to @var{c} modulo @var{d}, or in the
  598. case of @code{mpz_congruent_2exp_p} modulo @m{2^b,2^@var{b}}.
  599. @var{n} is congruent to @var{c} mod @var{d} if there exists an integer @var{q}
  600. satisfying @math{@var{n} = @var{c} + @var{q}@GMPmultiply{}@var{d}}.  Unlike
  601. the other division functions, @math{@var{d}=0} is accepted and following the
  602. rule it can be seen that @var{n} and @var{c} are considered congruent mod 0
  603. only when exactly equal.
  604. @end deftypefun
  605. @need 2000
  606. @node Integer Exponentiation, Integer Roots, Integer Division, Integer Functions
  607. @section Exponentiation Functions
  608. @cindex Integer exponentiation functions
  609. @cindex Exponentiation functions
  610. @cindex Powering functions
  611. @deftypefun void mpz_powm (mpz_t @var{rop}, mpz_t @var{base}, mpz_t @var{exp}, mpz_t @var{mod})
  612. @deftypefunx void mpz_powm_ui (mpz_t @var{rop}, mpz_t @var{base}, unsigned long int @var{exp}, mpz_t @var{mod})
  613. Set @var{rop} to @m{base^{exp} bmod mod, (@var{base} raised to @var{exp})
  614. modulo @var{mod}}.
  615. Negative @var{exp} is supported if an inverse @math{@var{base}^@W{-1} @bmod
  616. @var{mod}} exists (see @code{mpz_invert} in @ref{Number Theoretic Functions}).
  617. If an inverse doesn't exist then a divide by zero is raised.
  618. @end deftypefun
  619. @deftypefun void mpz_powm_sec (mpz_t @var{rop}, mpz_t @var{base}, mpz_t @var{exp}, mpz_t @var{mod})
  620. Set @var{rop} to @m{base^{exp} bmod mod, (@var{base} raised to @var{exp})
  621. modulo @var{mod}}.
  622. It is required that @math{@var{exp} > 0} and that @var{mod} is odd.
  623. This function is designed to take the same time and have the same cache access
  624. patterns for any two same-size arguments, assuming that function arguments are
  625. placed at the same position and that the machine state is identical upon
  626. function entry.  This function is intended for cryptographic purposes, where
  627. resilience to side-channel attacks is desired.
  628. @end deftypefun
  629. @deftypefun void mpz_pow_ui (mpz_t @var{rop}, mpz_t @var{base}, unsigned long int @var{exp})
  630. @deftypefunx void mpz_ui_pow_ui (mpz_t @var{rop}, unsigned long int @var{base}, unsigned long int @var{exp})
  631. Set @var{rop} to @m{base^{exp}, @var{base} raised to @var{exp}}.  The case
  632. @math{0^0} yields 1.
  633. @end deftypefun
  634. @need 2000
  635. @node Integer Roots, Number Theoretic Functions, Integer Exponentiation, Integer Functions
  636. @section Root Extraction Functions
  637. @cindex Integer root functions
  638. @cindex Root extraction functions
  639. @deftypefun int mpz_root (mpz_t @var{rop}, mpz_t @var{op}, unsigned long int @var{n})
  640. Set @var{rop} to @m{lfloorroot n of {op}rfloor@C{},} the truncated integer
  641. part of the @var{n}th root of @var{op}.  Return non-zero if the computation
  642. was exact, i.e., if @var{op} is @var{rop} to the @var{n}th power.
  643. @end deftypefun
  644. @deftypefun void mpz_rootrem (mpz_t @var{root}, mpz_t @var{rem}, mpz_t @var{u}, unsigned long int @var{n})
  645. Set @var{root} to @m{lfloorroot n of {u}rfloor@C{},} the truncated
  646. integer part of the @var{n}th root of @var{u}.  Set @var{rem} to the
  647. remainder, @m{(@var{u} - @var{root}^n),
  648. @var{u}@minus{}@var{root}**@var{n}}.
  649. @end deftypefun
  650. @deftypefun void mpz_sqrt (mpz_t @var{rop}, mpz_t @var{op})
  651. Set @var{rop} to @m{lfloorsqrt{@var{op}}rfloor@C{},} the truncated
  652. integer part of the square root of @var{op}.
  653. @end deftypefun
  654. @deftypefun void mpz_sqrtrem (mpz_t @var{rop1}, mpz_t @var{rop2}, mpz_t @var{op})
  655. Set @var{rop1} to @m{lfloorsqrt{@var{op}}rfloor, the truncated integer part
  656. of the square root of @var{op}}, like @code{mpz_sqrt}.  Set @var{rop2} to the
  657. remainder @m{(@var{op} - @var{rop1}^2),
  658. @var{op}@minus{}@var{rop1}*@var{rop1}}, which will be zero if @var{op} is a
  659. perfect square.
  660. If @var{rop1} and @var{rop2} are the same variable, the results are
  661. undefined.
  662. @end deftypefun
  663. @deftypefun int mpz_perfect_power_p (mpz_t @var{op})
  664. @cindex Perfect power functions
  665. @cindex Root testing functions
  666. Return non-zero if @var{op} is a perfect power, i.e., if there exist integers
  667. @m{a,@var{a}} and @m{b,@var{b}}, with @m{b>1, @var{b}>1}, such that
  668. @m{@var{op}=a^b, @var{op} equals @var{a} raised to the power @var{b}}.
  669. Under this definition both 0 and 1 are considered to be perfect powers.
  670. Negative values of @var{op} are accepted, but of course can only be odd
  671. perfect powers.
  672. @end deftypefun
  673. @deftypefun int mpz_perfect_square_p (mpz_t @var{op})
  674. @cindex Perfect square functions
  675. @cindex Root testing functions
  676. Return non-zero if @var{op} is a perfect square, i.e., if the square root of
  677. @var{op} is an integer.  Under this definition both 0 and 1 are considered to
  678. be perfect squares.
  679. @end deftypefun
  680. @need 2000
  681. @node Number Theoretic Functions, Integer Comparisons, Integer Roots, Integer Functions
  682. @section Number Theoretic Functions
  683. @cindex Number theoretic functions
  684. @deftypefun int mpz_probab_prime_p (mpz_t @var{n}, int @var{reps})
  685. @cindex Prime testing functions
  686. @cindex Probable prime testing functions
  687. Determine whether @var{n} is prime.  Return 2 if @var{n} is definitely prime,
  688. return 1 if @var{n} is probably prime (without being certain), or return 0 if
  689. @var{n} is definitely composite.
  690. This function does some trial divisions, then some Miller-Rabin probabilistic
  691. primality tests.  @var{reps} controls how many such tests are done, 5 to 10 is
  692. a reasonable number, more will reduce the chances of a composite being
  693. returned as ``probably prime''.
  694. Miller-Rabin and similar tests can be more properly called compositeness
  695. tests.  Numbers which fail are known to be composite but those which pass
  696. might be prime or might be composite.  Only a few composites pass, hence those
  697. which pass are considered probably prime.
  698. @end deftypefun
  699. @deftypefun void mpz_nextprime (mpz_t @var{rop}, mpz_t @var{op})
  700. @cindex Next prime function
  701. Set @var{rop} to the next prime greater than @var{op}.
  702. This function uses a probabilistic algorithm to identify primes.  For
  703. practical purposes it's adequate, the chance of a composite passing will be
  704. extremely small.
  705. @end deftypefun
  706. @c mpz_prime_p not implemented as of gmp 3.0.
  707. @c @deftypefun int mpz_prime_p (mpz_t @var{n})
  708. @c Return non-zero if @var{n} is prime and zero if @var{n} is a non-prime.
  709. @c This function is far slower than @code{mpz_probab_prime_p}, but then it
  710. @c never returns non-zero for composite numbers.
  711. @c (For practical purposes, using @code{mpz_probab_prime_p} is adequate.
  712. @c The likelihood of a programming error or hardware malfunction is orders
  713. @c of magnitudes greater than the likelihood for a composite to pass as a
  714. @c prime, if the @var{reps} argument is in the suggested range.)
  715. @c @end deftypefun
  716. @deftypefun void mpz_gcd (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  717. @cindex Greatest common divisor functions
  718. @cindex GCD functions
  719. Set @var{rop} to the greatest common divisor of @var{op1} and @var{op2}.
  720. The result is always positive even if one or both input operands
  721. are negative.
  722. @end deftypefun
  723. @deftypefun {unsigned long int} mpz_gcd_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long int @var{op2})
  724. Compute the greatest common divisor of @var{op1} and @var{op2}.  If
  725. @var{rop} is not @code{NULL}, store the result there.
  726. If the result is small enough to fit in an @code{unsigned long int}, it is
  727. returned.  If the result does not fit, 0 is returned, and the result is equal
  728. to the argument @var{op1}.  Note that the result will always fit if @var{op2}
  729. is non-zero.
  730. @end deftypefun
  731. @deftypefun void mpz_gcdext (mpz_t @var{g}, mpz_t @var{s}, mpz_t @var{t}, mpz_t @var{a}, mpz_t @var{b})
  732. @cindex Extended GCD
  733. @cindex GCD extended
  734. Set @var{g} to the greatest common divisor of @var{a} and @var{b}, and in
  735. addition set @var{s} and @var{t} to coefficients satisfying
  736. @math{@var{a}@GMPmultiply{}@var{s} + @var{b}@GMPmultiply{}@var{t} = @var{g}}.
  737. The value in @var{g} is always positive, even if one or both of @var{a} and
  738. @var{b} are negative.  The values in @var{s} and @var{t} are chosen such that
  739. @math{@GMPabs{@var{s}} @le{} @GMPabs{@var{b}}} and @math{@GMPabs{@var{t}}
  740. @le{} @GMPabs{@var{a}}}.
  741. If @var{t} is @code{NULL} then that value is not computed.
  742. @end deftypefun
  743. @deftypefun void mpz_lcm (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  744. @deftypefunx void mpz_lcm_ui (mpz_t @var{rop}, mpz_t @var{op1}, unsigned long @var{op2})
  745. @cindex Least common multiple functions
  746. @cindex LCM functions
  747. Set @var{rop} to the least common multiple of @var{op1} and @var{op2}.
  748. @var{rop} is always positive, irrespective of the signs of @var{op1} and
  749. @var{op2}.  @var{rop} will be zero if either @var{op1} or @var{op2} is zero.
  750. @end deftypefun
  751. @deftypefun int mpz_invert (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  752. @cindex Modular inverse functions
  753. @cindex Inverse modulo functions
  754. Compute the inverse of @var{op1} modulo @var{op2} and put the result in
  755. @var{rop}.  If the inverse exists, the return value is non-zero and @var{rop}
  756. will satisfy @math{0 @le{} @var{rop} < @var{op2}}.  If an inverse doesn't exist
  757. the return value is zero and @var{rop} is undefined.
  758. @end deftypefun
  759. @deftypefun int mpz_jacobi (mpz_t @var{a}, mpz_t @var{b})
  760. @cindex Jacobi symbol functions
  761. Calculate the Jacobi symbol @m{left(a over bright),
  762. (@var{a}/@var{b})}.  This is defined only for @var{b} odd.
  763. @end deftypefun
  764. @deftypefun int mpz_legendre (mpz_t @var{a}, mpz_t @var{p})
  765. @cindex Legendre symbol functions
  766. Calculate the Legendre symbol @m{left(a over pright),
  767. (@var{a}/@var{p})}.  This is defined only for @var{p} an odd positive
  768. prime, and for such @var{p} it's identical to the Jacobi symbol.
  769. @end deftypefun
  770. @deftypefun int mpz_kronecker (mpz_t @var{a}, mpz_t @var{b})
  771. @deftypefunx int mpz_kronecker_si (mpz_t @var{a}, long @var{b})
  772. @deftypefunx int mpz_kronecker_ui (mpz_t @var{a}, unsigned long @var{b})
  773. @deftypefunx int mpz_si_kronecker (long @var{a}, mpz_t @var{b})
  774. @deftypefunx int mpz_ui_kronecker (unsigned long @var{a}, mpz_t @var{b})
  775. @cindex Kronecker symbol functions
  776. Calculate the Jacobi symbol @m{left(a over bright),
  777. (@var{a}/@var{b})} with the Kronecker extension @m{left(a over
  778. 2right) = left(2 over aright), (a/2)=(2/a)} when @math{a} odd, or
  779. @m{left(a over 2right) = 0, (a/2)=0} when @math{a} even.
  780. When @var{b} is odd the Jacobi symbol and Kronecker symbol are
  781. identical, so @code{mpz_kronecker_ui} etc can be used for mixed
  782. precision Jacobi symbols too.
  783. For more information see Henri Cohen section 1.4.2 (@pxref{References}),
  784. or any number theory textbook.  See also the example program
  785. @file{demos/qcn.c} which uses @code{mpz_kronecker_ui}.
  786. @end deftypefun
  787. @deftypefun {mp_bitcnt_t} mpz_remove (mpz_t @var{rop}, mpz_t @var{op}, mpz_t @var{f})
  788. @cindex Remove factor functions
  789. @cindex Factor removal functions
  790. Remove all occurrences of the factor @var{f} from @var{op} and store the
  791. result in @var{rop}.  The return value is how many such occurrences were
  792. removed.
  793. @end deftypefun
  794. @deftypefun void mpz_fac_ui (mpz_t @var{rop}, unsigned long int @var{op})
  795. @cindex Factorial functions
  796. Set @var{rop} to @var{op}!, the factorial of @var{op}.
  797. @end deftypefun
  798. @deftypefun void mpz_bin_ui (mpz_t @var{rop}, mpz_t @var{n}, unsigned long int @var{k})
  799. @deftypefunx void mpz_bin_uiui (mpz_t @var{rop}, unsigned long int @var{n}, @w{unsigned long int @var{k}})
  800. @cindex Binomial coefficient functions
  801. Compute the binomial coefficient @m{left({n}atop{k}right), @var{n} over
  802. @var{k}} and store the result in @var{rop}.  Negative values of @var{n} are
  803. supported by @code{mpz_bin_ui}, using the identity
  804. @m{left({-n}atop{k}right) = (-1)^k left({n+k-1}atop{k}right),
  805. bin(-n@C{}k) = (-1)^k * bin(n+k-1@C{}k)}, see Knuth volume 1 section 1.2.6
  806. part G.
  807. @end deftypefun
  808. @deftypefun void mpz_fib_ui (mpz_t @var{fn}, unsigned long int @var{n})
  809. @deftypefunx void mpz_fib2_ui (mpz_t @var{fn}, mpz_t @var{fnsub1}, unsigned long int @var{n})
  810. @cindex Fibonacci sequence functions
  811. @code{mpz_fib_ui} sets @var{fn} to to @m{F_n,F[n]}, the @var{n}'th Fibonacci
  812. number.  @code{mpz_fib2_ui} sets @var{fn} to @m{F_n,F[n]}, and @var{fnsub1} to
  813. @m{F_{n-1},F[n-1]}.
  814. These functions are designed for calculating isolated Fibonacci numbers.  When
  815. a sequence of values is wanted it's best to start with @code{mpz_fib2_ui} and
  816. iterate the defining @m{F_{n+1} = F_n + F_{n-1}, F[n+1]=F[n]+F[n-1]} or
  817. similar.
  818. @end deftypefun
  819. @deftypefun void mpz_lucnum_ui (mpz_t @var{ln}, unsigned long int @var{n})
  820. @deftypefunx void mpz_lucnum2_ui (mpz_t @var{ln}, mpz_t @var{lnsub1}, unsigned long int @var{n})
  821. @cindex Lucas number functions
  822. @code{mpz_lucnum_ui} sets @var{ln} to to @m{L_n,L[n]}, the @var{n}'th Lucas
  823. number.  @code{mpz_lucnum2_ui} sets @var{ln} to @m{L_n,L[n]}, and @var{lnsub1}
  824. to @m{L_{n-1},L[n-1]}.
  825. These functions are designed for calculating isolated Lucas numbers.  When a
  826. sequence of values is wanted it's best to start with @code{mpz_lucnum2_ui} and
  827. iterate the defining @m{L_{n+1} = L_n + L_{n-1}, L[n+1]=L[n]+L[n-1]} or
  828. similar.
  829. The Fibonacci numbers and Lucas numbers are related sequences, so it's never
  830. necessary to call both @code{mpz_fib2_ui} and @code{mpz_lucnum2_ui}.  The
  831. formulas for going from Fibonacci to Lucas can be found in @ref{Lucas Numbers
  832. Algorithm}, the reverse is straightforward too.
  833. @end deftypefun
  834. @node Integer Comparisons, Integer Logic and Bit Fiddling, Number Theoretic Functions, Integer Functions
  835. @comment  node-name,  next,  previous,  up
  836. @section Comparison Functions
  837. @cindex Integer comparison functions
  838. @cindex Comparison functions
  839. @deftypefn Function int mpz_cmp (mpz_t @var{op1}, mpz_t @var{op2})
  840. @deftypefnx Function int mpz_cmp_d (mpz_t @var{op1}, double @var{op2})
  841. @deftypefnx Macro int mpz_cmp_si (mpz_t @var{op1}, signed long int @var{op2})
  842. @deftypefnx Macro int mpz_cmp_ui (mpz_t @var{op1}, unsigned long int @var{op2})
  843. Compare @var{op1} and @var{op2}.  Return a positive value if @math{@var{op1} >
  844. @var{op2}}, zero if @math{@var{op1} = @var{op2}}, or a negative value if
  845. @math{@var{op1} < @var{op2}}.
  846. @code{mpz_cmp_ui} and @code{mpz_cmp_si} are macros and will evaluate their
  847. arguments more than once.  @code{mpz_cmp_d} can be called with an infinity,
  848. but results are undefined for a NaN.
  849. @end deftypefn
  850. @deftypefn Function int mpz_cmpabs (mpz_t @var{op1}, mpz_t @var{op2})
  851. @deftypefnx Function int mpz_cmpabs_d (mpz_t @var{op1}, double @var{op2})
  852. @deftypefnx Function int mpz_cmpabs_ui (mpz_t @var{op1}, unsigned long int @var{op2})
  853. Compare the absolute values of @var{op1} and @var{op2}.  Return a positive
  854. value if @math{@GMPabs{@var{op1}} > @GMPabs{@var{op2}}}, zero if
  855. @math{@GMPabs{@var{op1}} = @GMPabs{@var{op2}}}, or a negative value if
  856. @math{@GMPabs{@var{op1}} < @GMPabs{@var{op2}}}.
  857. @code{mpz_cmpabs_d} can be called with an infinity, but results are undefined
  858. for a NaN.
  859. @end deftypefn
  860. @deftypefn Macro int mpz_sgn (mpz_t @var{op})
  861. @cindex Sign tests
  862. @cindex Integer sign tests
  863. Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and
  864. @math{-1} if @math{@var{op} < 0}.
  865. This function is actually implemented as a macro.  It evaluates its argument
  866. multiple times.
  867. @end deftypefn
  868. @node Integer Logic and Bit Fiddling, I/O of Integers, Integer Comparisons, Integer Functions
  869. @comment  node-name,  next,  previous,  up
  870. @section Logical and Bit Manipulation Functions
  871. @cindex Logical functions
  872. @cindex Bit manipulation functions
  873. @cindex Integer logical functions
  874. @cindex Integer bit manipulation functions
  875. These functions behave as if twos complement arithmetic were used (although
  876. sign-magnitude is the actual implementation).  The least significant bit is
  877. number 0.
  878. @deftypefun void mpz_and (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  879. Set @var{rop} to @var{op1} bitwise-and @var{op2}.
  880. @end deftypefun
  881. @deftypefun void mpz_ior (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  882. Set @var{rop} to @var{op1} bitwise inclusive-or @var{op2}.
  883. @end deftypefun
  884. @deftypefun void mpz_xor (mpz_t @var{rop}, mpz_t @var{op1}, mpz_t @var{op2})
  885. Set @var{rop} to @var{op1} bitwise exclusive-or @var{op2}.
  886. @end deftypefun
  887. @deftypefun void mpz_com (mpz_t @var{rop}, mpz_t @var{op})
  888. Set @var{rop} to the one's complement of @var{op}.
  889. @end deftypefun
  890. @deftypefun {mp_bitcnt_t} mpz_popcount (mpz_t @var{op})
  891. If @math{@var{op}@ge{}0}, return the population count of @var{op}, which is the
  892. number of 1 bits in the binary representation.  If @math{@var{op}<0}, the
  893. number of 1s is infinite, and the return value is the largest possible
  894. @code{mp_bitcnt_t}.
  895. @end deftypefun
  896. @deftypefun {mp_bitcnt_t} mpz_hamdist (mpz_t @var{op1}, mpz_t @var{op2})
  897. If @var{op1} and @var{op2} are both @math{@ge{}0} or both @math{<0}, return the
  898. hamming distance between the two operands, which is the number of bit positions
  899. where @var{op1} and @var{op2} have different bit values.  If one operand is
  900. @math{@ge{}0} and the other @math{<0} then the number of bits different is
  901. infinite, and the return value is the largest possible @code{mp_bitcnt_t}.
  902. @end deftypefun
  903. @deftypefun {mp_bitcnt_t} mpz_scan0 (mpz_t @var{op}, mp_bitcnt_t @var{starting_bit})
  904. @deftypefunx {mp_bitcnt_t} mpz_scan1 (mpz_t @var{op}, mp_bitcnt_t @var{starting_bit})
  905. @cindex Bit scanning functions
  906. @cindex Scan bit functions
  907. Scan @var{op}, starting from bit @var{starting_bit}, towards more significant
  908. bits, until the first 0 or 1 bit (respectively) is found.  Return the index of
  909. the found bit.
  910. If the bit at @var{starting_bit} is already what's sought, then
  911. @var{starting_bit} is returned.
  912. If there's no bit found, then the largest possible @code{mp_bitcnt_t} is
  913. returned.  This will happen in @code{mpz_scan0} past the end of a negative
  914. number, or @code{mpz_scan1} past the end of a nonnegative number.
  915. @end deftypefun
  916. @deftypefun void mpz_setbit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index})
  917. Set bit @var{bit_index} in @var{rop}.
  918. @end deftypefun
  919. @deftypefun void mpz_clrbit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index})
  920. Clear bit @var{bit_index} in @var{rop}.
  921. @end deftypefun
  922. @deftypefun void mpz_combit (mpz_t @var{rop}, mp_bitcnt_t @var{bit_index})
  923. Complement bit @var{bit_index} in @var{rop}.
  924. @end deftypefun
  925. @deftypefun int mpz_tstbit (mpz_t @var{op}, mp_bitcnt_t @var{bit_index})
  926. Test bit @var{bit_index} in @var{op} and return 0 or 1 accordingly.
  927. @end deftypefun
  928. @node I/O of Integers, Integer Random Numbers, Integer Logic and Bit Fiddling, Integer Functions
  929. @comment  node-name,  next,  previous,  up
  930. @section Input and Output Functions
  931. @cindex Integer input and output functions
  932. @cindex Input functions
  933. @cindex Output functions
  934. @cindex I/O functions
  935. Functions that perform input from a stdio stream, and functions that output to
  936. a stdio stream.  Passing a @code{NULL} pointer for a @var{stream} argument to any of
  937. these functions will make them read from @code{stdin} and write to
  938. @code{stdout}, respectively.
  939. When using any of these functions, it is a good idea to include @file{stdio.h}
  940. before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes
  941. for these functions.
  942. @deftypefun size_t mpz_out_str (FILE *@var{stream}, int @var{base}, mpz_t @var{op})
  943. Output @var{op} on stdio stream @var{stream}, as a string of digits in base
  944. @var{base}.  The base argument may vary from 2 to 62 or from @minus{}2 to
  945. @minus{}36.
  946. For @var{base} in the range 2..36, digits and lower-case letters are used; for
  947. @minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62,
  948. digits, upper-case letters, and lower-case letters (in that significance order)
  949. are used.
  950. Return the number of bytes written, or if an error occurred, return 0.
  951. @end deftypefun
  952. @deftypefun size_t mpz_inp_str (mpz_t @var{rop}, FILE *@var{stream}, int @var{base})
  953. Input a possibly white-space preceded string in base @var{base} from stdio
  954. stream @var{stream}, and put the read integer in @var{rop}.
  955. The @var{base} may vary from 2 to 62, or if @var{base} is 0, then the leading
  956. characters are used: @code{0x} and @code{0X} for hexadecimal, @code{0b} and
  957. @code{0B} for binary, @code{0} for octal, or decimal otherwise.
  958. For bases up to 36, case is ignored; upper-case and lower-case letters have
  959. the same value.  For bases 37 to 62, upper-case letter represent the usual
  960. 10..35 while lower-case letter represent 36..61.
  961. Return the number of bytes read, or if an error occurred, return 0.
  962. @end deftypefun
  963. @deftypefun size_t mpz_out_raw (FILE *@var{stream}, mpz_t @var{op})
  964. Output @var{op} on stdio stream @var{stream}, in raw binary format.  The
  965. integer is written in a portable format, with 4 bytes of size information, and
  966. that many bytes of limbs.  Both the size and the limbs are written in
  967. decreasing significance order (i.e., in big-endian).
  968. The output can be read with @code{mpz_inp_raw}.
  969. Return the number of bytes written, or if an error occurred, return 0.
  970. The output of this can not be read by @code{mpz_inp_raw} from GMP 1, because
  971. of changes necessary for compatibility between 32-bit and 64-bit machines.
  972. @end deftypefun
  973. @deftypefun size_t mpz_inp_raw (mpz_t @var{rop}, FILE *@var{stream})
  974. Input from stdio stream @var{stream} in the format written by
  975. @code{mpz_out_raw}, and put the result in @var{rop}.  Return the number of
  976. bytes read, or if an error occurred, return 0.
  977. This routine can read the output from @code{mpz_out_raw} also from GMP 1, in
  978. spite of changes necessary for compatibility between 32-bit and 64-bit
  979. machines.
  980. @end deftypefun
  981. @need 2000
  982. @node Integer Random Numbers, Integer Import and Export, I/O of Integers, Integer Functions
  983. @comment  node-name,  next,  previous,  up
  984. @section Random Number Functions
  985. @cindex Integer random number functions
  986. @cindex Random number functions
  987. The random number functions of GMP come in two groups; older function
  988. that rely on a global state, and newer functions that accept a state
  989. parameter that is read and modified.  Please see the @ref{Random Number
  990. Functions} for more information on how to use and not to use random
  991. number functions.
  992. @deftypefun void mpz_urandomb (mpz_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{n})
  993. Generate a uniformly distributed random integer in the range 0 to @m{2^n-1,
  994. 2^@var{n}@minus{}1}, inclusive.
  995. The variable @var{state} must be initialized by calling one of the
  996. @code{gmp_randinit} functions (@ref{Random State Initialization}) before
  997. invoking this function.
  998. @end deftypefun
  999. @deftypefun void mpz_urandomm (mpz_t @var{rop}, gmp_randstate_t @var{state}, mpz_t @var{n})
  1000. Generate a uniform random integer in the range 0 to @math{@var{n}-1},
  1001. inclusive.
  1002. The variable @var{state} must be initialized by calling one of the
  1003. @code{gmp_randinit} functions (@ref{Random State Initialization})
  1004. before invoking this function.
  1005. @end deftypefun
  1006. @deftypefun void mpz_rrandomb (mpz_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{n})
  1007. Generate a random integer with long strings of zeros and ones in the
  1008. binary representation.  Useful for testing functions and algorithms,
  1009. since this kind of random numbers have proven to be more likely to
  1010. trigger corner-case bugs.  The random number will be in the range
  1011. 0 to @m{2^n-1, 2^@var{n}@minus{}1}, inclusive.
  1012. The variable @var{state} must be initialized by calling one of the
  1013. @code{gmp_randinit} functions (@ref{Random State Initialization})
  1014. before invoking this function.
  1015. @end deftypefun
  1016. @deftypefun void mpz_random (mpz_t @var{rop}, mp_size_t @var{max_size})
  1017. Generate a random integer of at most @var{max_size} limbs.  The generated
  1018. random number doesn't satisfy any particular requirements of randomness.
  1019. Negative random numbers are generated when @var{max_size} is negative.
  1020. This function is obsolete.  Use @code{mpz_urandomb} or
  1021. @code{mpz_urandomm} instead.
  1022. @end deftypefun
  1023. @deftypefun void mpz_random2 (mpz_t @var{rop}, mp_size_t @var{max_size})
  1024. Generate a random integer of at most @var{max_size} limbs, with long strings
  1025. of zeros and ones in the binary representation.  Useful for testing functions
  1026. and algorithms, since this kind of random numbers have proven to be more
  1027. likely to trigger corner-case bugs.  Negative random numbers are generated
  1028. when @var{max_size} is negative.
  1029. This function is obsolete.  Use @code{mpz_rrandomb} instead.
  1030. @end deftypefun
  1031. @node Integer Import and Export, Miscellaneous Integer Functions, Integer Random Numbers, Integer Functions
  1032. @section Integer Import and Export
  1033. @code{mpz_t} variables can be converted to and from arbitrary words of binary
  1034. data with the following functions.
  1035. @deftypefun void mpz_import (mpz_t @var{rop}, size_t @var{count}, int @var{order}, size_t @var{size}, int @var{endian}, size_t @var{nails}, const void *@var{op})
  1036. @cindex Integer import
  1037. @cindex Import
  1038. Set @var{rop} from an array of word data at @var{op}.
  1039. The parameters specify the format of the data.  @var{count} many words are
  1040. read, each @var{size} bytes.  @var{order} can be 1 for most significant word
  1041. first or -1 for least significant first.  Within each word @var{endian} can be
  1042. 1 for most significant byte first, -1 for least significant first, or 0 for
  1043. the native endianness of the host CPU@.  The most significant @var{nails} bits
  1044. of each word are skipped, this can be 0 to use the full words.
  1045. There is no sign taken from the data, @var{rop} will simply be a positive
  1046. integer.  An application can handle any sign itself, and apply it for instance
  1047. with @code{mpz_neg}.
  1048. There are no data alignment restrictions on @var{op}, any address is allowed.
  1049. Here's an example converting an array of @code{unsigned long} data, most
  1050. significant element first, and host byte order within each value.
  1051. @example
  1052. unsigned long  a[20];
  1053. /* Initialize @var{z} and @var{a} */
  1054. mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a);
  1055. @end example
  1056. This example assumes the full @code{sizeof} bytes are used for data in the
  1057. given type, which is usually true, and certainly true for @code{unsigned long}
  1058. everywhere we know of.  However on Cray vector systems it may be noted that
  1059. @code{short} and @code{int} are always stored in 8 bytes (and with
  1060. @code{sizeof} indicating that) but use only 32 or 46 bits.  The @var{nails}
  1061. feature can account for this, by passing for instance
  1062. @code{8*sizeof(int)-INT_BIT}.
  1063. @end deftypefun
  1064. @deftypefun {void *} mpz_export (void *@var{rop}, size_t *@var{countp}, int @var{order}, size_t @var{size}, int @var{endian}, size_t @var{nails}, mpz_t @var{op})
  1065. @cindex Integer export
  1066. @cindex Export
  1067. Fill @var{rop} with word data from @var{op}.
  1068. The parameters specify the format of the data produced.  Each word will be
  1069. @var{size} bytes and @var{order} can be 1 for most significant word first or
  1070. -1 for least significant first.  Within each word @var{endian} can be 1 for
  1071. most significant byte first, -1 for least significant first, or 0 for the
  1072. native endianness of the host CPU@.  The most significant @var{nails} bits of
  1073. each word are unused and set to zero, this can be 0 to produce full words.
  1074. The number of words produced is written to @code{*@var{countp}}, or
  1075. @var{countp} can be @code{NULL} to discard the count.  @var{rop} must have
  1076. enough space for the data, or if @var{rop} is @code{NULL} then a result array
  1077. of the necessary size is allocated using the current GMP allocation function
  1078. (@pxref{Custom Allocation}).  In either case the return value is the
  1079. destination used, either @var{rop} or the allocated block.
  1080. If @var{op} is non-zero then the most significant word produced will be
  1081. non-zero.  If @var{op} is zero then the count returned will be zero and
  1082. nothing written to @var{rop}.  If @var{rop} is @code{NULL} in this case, no
  1083. block is allocated, just @code{NULL} is returned.
  1084. The sign of @var{op} is ignored, just the absolute value is exported.  An
  1085. application can use @code{mpz_sgn} to get the sign and handle it as desired.
  1086. (@pxref{Integer Comparisons})
  1087. There are no data alignment restrictions on @var{rop}, any address is allowed.
  1088. When an application is allocating space itself the required size can be
  1089. determined with a calculation like the following.  Since @code{mpz_sizeinbase}
  1090. always returns at least 1, @code{count} here will be at least one, which
  1091. avoids any portability problems with @code{malloc(0)}, though if @code{z} is
  1092. zero no space at all is actually needed (or written).
  1093. @example
  1094. numb = 8*size - nail;
  1095. count = (mpz_sizeinbase (z, 2) + numb-1) / numb;
  1096. p = malloc (count * size);
  1097. @end example
  1098. @end deftypefun
  1099. @need 2000
  1100. @node Miscellaneous Integer Functions, Integer Special Functions, Integer Import and Export, Integer Functions
  1101. @comment  node-name,  next,  previous,  up
  1102. @section Miscellaneous Functions
  1103. @cindex Miscellaneous integer functions
  1104. @cindex Integer miscellaneous functions
  1105. @deftypefun int mpz_fits_ulong_p (mpz_t @var{op})
  1106. @deftypefunx int mpz_fits_slong_p (mpz_t @var{op})
  1107. @deftypefunx int mpz_fits_uint_p (mpz_t @var{op})
  1108. @deftypefunx int mpz_fits_sint_p (mpz_t @var{op})
  1109. @deftypefunx int mpz_fits_ushort_p (mpz_t @var{op})
  1110. @deftypefunx int mpz_fits_sshort_p (mpz_t @var{op})
  1111. Return non-zero iff the value of @var{op} fits in an @code{unsigned long int},
  1112. @code{signed long int}, @code{unsigned int}, @code{signed int}, @code{unsigned
  1113. short int}, or @code{signed short int}, respectively.  Otherwise, return zero.
  1114. @end deftypefun
  1115. @deftypefn Macro int mpz_odd_p (mpz_t @var{op})
  1116. @deftypefnx Macro int mpz_even_p (mpz_t @var{op})
  1117. Determine whether @var{op} is odd or even, respectively.  Return non-zero if
  1118. yes, zero if no.  These macros evaluate their argument more than once.
  1119. @end deftypefn
  1120. @deftypefun size_t mpz_sizeinbase (mpz_t @var{op}, int @var{base})
  1121. @cindex Size in digits
  1122. @cindex Digits in an integer
  1123. Return the size of @var{op} measured in number of digits in the given
  1124. @var{base}.  @var{base} can vary from 2 to 62.  The sign of @var{op} is
  1125. ignored, just the absolute value is used.  The result will be either exact or
  1126. 1 too big.  If @var{base} is a power of 2, the result is always exact.  If
  1127. @var{op} is zero the return value is always 1.
  1128. This function can be used to determine the space required when converting
  1129. @var{op} to a string.  The right amount of allocation is normally two more
  1130. than the value returned by @code{mpz_sizeinbase}, one extra for a minus sign
  1131. and one for the null-terminator.
  1132. @cindex Most significant bit
  1133. It will be noted that @code{mpz_sizeinbase(@var{op},2)} can be used to locate
  1134. the most significant 1 bit in @var{op}, counting from 1.  (Unlike the bitwise
  1135. functions which start from 0, @xref{Integer Logic and Bit Fiddling,, Logical
  1136. and Bit Manipulation Functions}.)
  1137. @end deftypefun
  1138. @node Integer Special Functions,  , Miscellaneous Integer Functions, Integer Functions
  1139. @section Special Functions
  1140. @cindex Special integer functions
  1141. @cindex Integer special functions
  1142. The functions in this section are for various special purposes.  Most
  1143. applications will not need them.
  1144. @deftypefun void mpz_array_init (mpz_t @var{integer_array}, mp_size_t @var{array_size}, @w{mp_size_t @var{fixed_num_bits}})
  1145. This is a special type of initialization.  @strong{Fixed} space of
  1146. @var{fixed_num_bits} is allocated to each of the @var{array_size} integers in
  1147. @var{integer_array}.  There is no way to free the storage allocated by this
  1148. function.  Don't call @code{mpz_clear}!
  1149. The @var{integer_array} parameter is the first @code{mpz_t} in the array.  For
  1150. example,
  1151. @example
  1152. mpz_t  arr[20000];
  1153. mpz_array_init (arr[0], 20000, 512);
  1154. @end example
  1155. @c  In case anyone's wondering, yes this parameter style is a bit anomalous,
  1156. @c  it'd probably be nicer if it was "arr" instead of "arr[0]".  Obviously the
  1157. @c  two differ only in the declaration, not the pointer value, but changing is
  1158. @c  not possible since it'd provoke warnings or errors in existing sources.
  1159. This function is only intended for programs that create a large number
  1160. of integers and need to reduce memory usage by avoiding the overheads of
  1161. allocating and reallocating lots of small blocks.  In normal programs this
  1162. function is not recommended.
  1163. The space allocated to each integer by this function will not be automatically
  1164. increased, unlike the normal @code{mpz_init}, so an application must ensure it
  1165. is sufficient for any value stored.  The following space requirements apply to
  1166. various routines,
  1167. @itemize @bullet
  1168. @item
  1169. @code{mpz_abs}, @code{mpz_neg}, @code{mpz_set}, @code{mpz_set_si} and
  1170. @code{mpz_set_ui} need room for the value they store.
  1171. @item
  1172. @code{mpz_add}, @code{mpz_add_ui}, @code{mpz_sub} and @code{mpz_sub_ui} need
  1173. room for the larger of the two operands, plus an extra
  1174. @code{mp_bits_per_limb}.
  1175. @item
  1176. @code{mpz_mul}, @code{mpz_mul_ui} and @code{mpz_mul_ui} need room for the sum
  1177. of the number of bits in their operands, but each rounded up to a multiple of
  1178. @code{mp_bits_per_limb}.
  1179. @item
  1180. @code{mpz_swap} can be used between two array variables, but not between an
  1181. array and a normal variable.
  1182. @end itemize
  1183. For other functions, or if in doubt, the suggestion is to calculate in a
  1184. regular @code{mpz_init} variable and copy the result to an array variable with
  1185. @code{mpz_set}.
  1186. @end deftypefun
  1187. @deftypefun {void *} _mpz_realloc (mpz_t @var{integer}, mp_size_t @var{new_alloc})
  1188. Change the space for @var{integer} to @var{new_alloc} limbs.  The value in
  1189. @var{integer} is preserved if it fits, or is set to 0 if not.  The return
  1190. value is not useful to applications and should be ignored.
  1191. @code{mpz_realloc2} is the preferred way to accomplish allocation changes like
  1192. this.  @code{mpz_realloc2} and @code{_mpz_realloc} are the same except that
  1193. @code{_mpz_realloc} takes its size in limbs.
  1194. @end deftypefun
  1195. @deftypefun mp_limb_t mpz_getlimbn (mpz_t @var{op}, mp_size_t @var{n})
  1196. Return limb number @var{n} from @var{op}.  The sign of @var{op} is ignored,
  1197. just the absolute value is used.  The least significant limb is number 0.
  1198. @code{mpz_size} can be used to find how many limbs make up @var{op}.
  1199. @code{mpz_getlimbn} returns zero if @var{n} is outside the range 0 to
  1200. @code{mpz_size(@var{op})-1}.
  1201. @end deftypefun
  1202. @deftypefun size_t mpz_size (mpz_t @var{op})
  1203. Return the size of @var{op} measured in number of limbs.  If @var{op} is zero,
  1204. the returned value will be zero.
  1205. @c (@xref{Nomenclature}, for an explanation of the concept @dfn{limb}.)
  1206. @end deftypefun
  1207. @node Rational Number Functions, Floating-point Functions, Integer Functions, Top
  1208. @comment  node-name,  next,  previous,  up
  1209. @chapter Rational Number Functions
  1210. @cindex Rational number functions
  1211. This chapter describes the GMP functions for performing arithmetic on rational
  1212. numbers.  These functions start with the prefix @code{mpq_}.
  1213. Rational numbers are stored in objects of type @code{mpq_t}.
  1214. All rational arithmetic functions assume operands have a canonical form, and
  1215. canonicalize their result.  The canonical from means that the denominator and
  1216. the numerator have no common factors, and that the denominator is positive.
  1217. Zero has the unique representation 0/1.
  1218. Pure assignment functions do not canonicalize the assigned variable.  It is
  1219. the responsibility of the user to canonicalize the assigned variable before
  1220. any arithmetic operations are performed on that variable.
  1221. @deftypefun void mpq_canonicalize (mpq_t @var{op})
  1222. Remove any factors that are common to the numerator and denominator of
  1223. @var{op}, and make the denominator positive.
  1224. @end deftypefun
  1225. @menu
  1226. * Initializing Rationals::
  1227. * Rational Conversions::
  1228. * Rational Arithmetic::
  1229. * Comparing Rationals::
  1230. * Applying Integer Functions::
  1231. * I/O of Rationals::
  1232. @end menu
  1233. @node Initializing Rationals, Rational Conversions, Rational Number Functions, Rational Number Functions
  1234. @comment  node-name,  next,  previous,  up
  1235. @section Initialization and Assignment Functions
  1236. @cindex Rational assignment functions
  1237. @cindex Assignment functions
  1238. @cindex Rational initialization functions
  1239. @cindex Initialization functions
  1240. @deftypefun void mpq_init (mpq_t @var{x})
  1241. Initialize @var{x} and set it to 0/1.  Each variable should normally only be
  1242. initialized once, or at least cleared out (using the function @code{mpq_clear})
  1243. between each initialization.
  1244. @end deftypefun
  1245. @deftypefun void mpq_inits (mpq_t @var{x}, ...)
  1246. Initialize a NULL-terminated list of @code{mpq_t} variables, and set their
  1247. values to 0/1.
  1248. @end deftypefun
  1249. @deftypefun void mpq_clear (mpq_t @var{x})
  1250. Free the space occupied by @var{x}.  Make sure to call this function for all
  1251. @code{mpq_t} variables when you are done with them.
  1252. @end deftypefun
  1253. @deftypefun void mpq_clears (mpq_t @var{x}, ...)
  1254. Free the space occupied by a NULL-terminated list of @code{mpq_t} variables.
  1255. @end deftypefun
  1256. @deftypefun void mpq_set (mpq_t @var{rop}, mpq_t @var{op})
  1257. @deftypefunx void mpq_set_z (mpq_t @var{rop}, mpz_t @var{op})
  1258. Assign @var{rop} from @var{op}.
  1259. @end deftypefun
  1260. @deftypefun void mpq_set_ui (mpq_t @var{rop}, unsigned long int @var{op1}, unsigned long int @var{op2})
  1261. @deftypefunx void mpq_set_si (mpq_t @var{rop}, signed long int @var{op1}, unsigned long int @var{op2})
  1262. Set the value of @var{rop} to @var{op1}/@var{op2}.  Note that if @var{op1} and
  1263. @var{op2} have common factors, @var{rop} has to be passed to
  1264. @code{mpq_canonicalize} before any operations are performed on @var{rop}.
  1265. @end deftypefun
  1266. @deftypefun int mpq_set_str (mpq_t @var{rop}, char *@var{str}, int @var{base})
  1267. Set @var{rop} from a null-terminated string @var{str} in the given @var{base}.
  1268. The string can be an integer like ``41'' or a fraction like ``41/152''.  The
  1269. fraction must be in canonical form (@pxref{Rational Number Functions}), or if
  1270. not then @code{mpq_canonicalize} must be called.
  1271. The numerator and optional denominator are parsed the same as in
  1272. @code{mpz_set_str} (@pxref{Assigning Integers}).  White space is allowed in
  1273. the string, and is simply ignored.  The @var{base} can vary from 2 to 62, or
  1274. if @var{base} is 0 then the leading characters are used: @code{0x} or @code{0X} for hex,
  1275. @code{0b} or @code{0B} for binary,
  1276. @code{0} for octal, or decimal otherwise.  Note that this is done separately
  1277. for the numerator and denominator, so for instance @code{0xEF/100} is 239/100,
  1278. whereas @code{0xEF/0x100} is 239/256.
  1279. The return value is 0 if the entire string is a valid number, or @minus{}1 if
  1280. not.
  1281. @end deftypefun
  1282. @deftypefun void mpq_swap (mpq_t @var{rop1}, mpq_t @var{rop2})
  1283. Swap the values @var{rop1} and @var{rop2} efficiently.
  1284. @end deftypefun
  1285. @need 2000
  1286. @node Rational Conversions, Rational Arithmetic, Initializing Rationals, Rational Number Functions
  1287. @comment  node-name,  next,  previous,  up
  1288. @section Conversion Functions
  1289. @cindex Rational conversion functions
  1290. @cindex Conversion functions
  1291. @deftypefun double mpq_get_d (mpq_t @var{op})
  1292. Convert @var{op} to a @code{double}, truncating if necessary (ie.@: rounding
  1293. towards zero).
  1294. If the exponent from the conversion is too big or too small to fit a
  1295. @code{double} then the result is system dependent.  For too big an infinity is
  1296. returned when available.  For too small @math{0.0} is normally returned.
  1297. Hardware overflow, underflow and denorm traps may or may not occur.
  1298. @end deftypefun
  1299. @deftypefun void mpq_set_d (mpq_t @var{rop}, double @var{op})
  1300. @deftypefunx void mpq_set_f (mpq_t @var{rop}, mpf_t @var{op})
  1301. Set @var{rop} to the value of @var{op}.  There is no rounding, this conversion
  1302. is exact.
  1303. @end deftypefun
  1304. @deftypefun {char *} mpq_get_str (char *@var{str}, int @var{base}, mpq_t @var{op})
  1305. Convert @var{op} to a string of digits in base @var{base}.  The base may vary
  1306. from 2 to 36.  The string will be of the form @samp{num/den}, or if the
  1307. denominator is 1 then just @samp{num}.
  1308. If @var{str} is @code{NULL}, the result string is allocated using the current
  1309. allocation function (@pxref{Custom Allocation}).  The block will be
  1310. @code{strlen(str)+1} bytes, that being exactly enough for the string and
  1311. null-terminator.
  1312. If @var{str} is not @code{NULL}, it should point to a block of storage large
  1313. enough for the result, that being
  1314. @example
  1315. mpz_sizeinbase (mpq_numref(@var{op}), @var{base})
  1316. + mpz_sizeinbase (mpq_denref(@var{op}), @var{base}) + 3
  1317. @end example
  1318. The three extra bytes are for a possible minus sign, possible slash, and the
  1319. null-terminator.
  1320. A pointer to the result string is returned, being either the allocated block,
  1321. or the given @var{str}.
  1322. @end deftypefun
  1323. @node Rational Arithmetic, Comparing Rationals, Rational Conversions, Rational Number Functions
  1324. @comment  node-name,  next,  previous,  up
  1325. @section Arithmetic Functions
  1326. @cindex Rational arithmetic functions
  1327. @cindex Arithmetic functions
  1328. @deftypefun void mpq_add (mpq_t @var{sum}, mpq_t @var{addend1}, mpq_t @var{addend2})
  1329. Set @var{sum} to @var{addend1} + @var{addend2}.
  1330. @end deftypefun
  1331. @deftypefun void mpq_sub (mpq_t @var{difference}, mpq_t @var{minuend}, mpq_t @var{subtrahend})
  1332. Set @var{difference} to @var{minuend} @minus{} @var{subtrahend}.
  1333. @end deftypefun
  1334. @deftypefun void mpq_mul (mpq_t @var{product}, mpq_t @var{multiplier}, mpq_t @var{multiplicand})
  1335. Set @var{product} to @math{@var{multiplier} @GMPtimes{} @var{multiplicand}}.
  1336. @end deftypefun
  1337. @deftypefun void mpq_mul_2exp (mpq_t @var{rop}, mpq_t @var{op1}, mp_bitcnt_t @var{op2})
  1338. Set @var{rop} to @m{@var{op1} times 2^{op2}, @var{op1} times 2 raised to
  1339. @var{op2}}.
  1340. @end deftypefun
  1341. @deftypefun void mpq_div (mpq_t @var{quotient}, mpq_t @var{dividend}, mpq_t @var{divisor})
  1342. @cindex Division functions
  1343. Set @var{quotient} to @var{dividend}/@var{divisor}.
  1344. @end deftypefun
  1345. @deftypefun void mpq_div_2exp (mpq_t @var{rop}, mpq_t @var{op1}, mp_bitcnt_t @var{op2})
  1346. Set @var{rop} to @m{@var{op1}/2^{op2}, @var{op1} divided by 2 raised to
  1347. @var{op2}}.
  1348. @end deftypefun
  1349. @deftypefun void mpq_neg (mpq_t @var{negated_operand}, mpq_t @var{operand})
  1350. Set @var{negated_operand} to @minus{}@var{operand}.
  1351. @end deftypefun
  1352. @deftypefun void mpq_abs (mpq_t @var{rop}, mpq_t @var{op})
  1353. Set @var{rop} to the absolute value of @var{op}.
  1354. @end deftypefun
  1355. @deftypefun void mpq_inv (mpq_t @var{inverted_number}, mpq_t @var{number})
  1356. Set @var{inverted_number} to 1/@var{number}.  If the new denominator is
  1357. zero, this routine will divide by zero.
  1358. @end deftypefun
  1359. @node Comparing Rationals, Applying Integer Functions, Rational Arithmetic, Rational Number Functions
  1360. @comment  node-name,  next,  previous,  up
  1361. @section Comparison Functions
  1362. @cindex Rational comparison functions
  1363. @cindex Comparison functions
  1364. @deftypefun int mpq_cmp (mpq_t @var{op1}, mpq_t @var{op2})
  1365. Compare @var{op1} and @var{op2}.  Return a positive value if @math{@var{op1} >
  1366. @var{op2}}, zero if @math{@var{op1} = @var{op2}}, and a negative value if
  1367. @math{@var{op1} < @var{op2}}.
  1368. To determine if two rationals are equal, @code{mpq_equal} is faster than
  1369. @code{mpq_cmp}.
  1370. @end deftypefun
  1371. @deftypefn Macro int mpq_cmp_ui (mpq_t @var{op1}, unsigned long int @var{num2}, unsigned long int @var{den2})
  1372. @deftypefnx Macro int mpq_cmp_si (mpq_t @var{op1}, long int @var{num2}, unsigned long int @var{den2})
  1373. Compare @var{op1} and @var{num2}/@var{den2}.  Return a positive value if
  1374. @math{@var{op1} > @var{num2}/@var{den2}}, zero if @math{@var{op1} =
  1375. @var{num2}/@var{den2}}, and a negative value if @math{@var{op1} <
  1376. @var{num2}/@var{den2}}.
  1377. @var{num2} and @var{den2} are allowed to have common factors.
  1378. These functions are implemented as a macros and evaluate their arguments
  1379. multiple times.
  1380. @end deftypefn
  1381. @deftypefn Macro int mpq_sgn (mpq_t @var{op})
  1382. @cindex Sign tests
  1383. @cindex Rational sign tests
  1384. Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and
  1385. @math{-1} if @math{@var{op} < 0}.
  1386. This function is actually implemented as a macro.  It evaluates its
  1387. arguments multiple times.
  1388. @end deftypefn
  1389. @deftypefun int mpq_equal (mpq_t @var{op1}, mpq_t @var{op2})
  1390. Return non-zero if @var{op1} and @var{op2} are equal, zero if they are
  1391. non-equal.  Although @code{mpq_cmp} can be used for the same purpose, this
  1392. function is much faster.
  1393. @end deftypefun
  1394. @node Applying Integer Functions, I/O of Rationals, Comparing Rationals, Rational Number Functions
  1395. @comment  node-name,  next,  previous,  up
  1396. @section Applying Integer Functions to Rationals
  1397. @cindex Rational numerator and denominator
  1398. @cindex Numerator and denominator
  1399. The set of @code{mpq} functions is quite small.  In particular, there are few
  1400. functions for either input or output.  The following functions give direct
  1401. access to the numerator and denominator of an @code{mpq_t}.
  1402. Note that if an assignment to the numerator and/or denominator could take an
  1403. @code{mpq_t} out of the canonical form described at the start of this chapter
  1404. (@pxref{Rational Number Functions}) then @code{mpq_canonicalize} must be
  1405. called before any other @code{mpq} functions are applied to that @code{mpq_t}.
  1406. @deftypefn Macro mpz_t mpq_numref (mpq_t @var{op})
  1407. @deftypefnx Macro mpz_t mpq_denref (mpq_t @var{op})
  1408. Return a reference to the numerator and denominator of @var{op}, respectively.
  1409. The @code{mpz} functions can be used on the result of these macros.
  1410. @end deftypefn
  1411. @deftypefun void mpq_get_num (mpz_t @var{numerator}, mpq_t @var{rational})
  1412. @deftypefunx void mpq_get_den (mpz_t @var{denominator}, mpq_t @var{rational})
  1413. @deftypefunx void mpq_set_num (mpq_t @var{rational}, mpz_t @var{numerator})
  1414. @deftypefunx void mpq_set_den (mpq_t @var{rational}, mpz_t @var{denominator})
  1415. Get or set the numerator or denominator of a rational.  These functions are
  1416. equivalent to calling @code{mpz_set} with an appropriate @code{mpq_numref} or
  1417. @code{mpq_denref}.  Direct use of @code{mpq_numref} or @code{mpq_denref} is
  1418. recommended instead of these functions.
  1419. @end deftypefun
  1420. @need 2000
  1421. @node I/O of Rationals,  , Applying Integer Functions, Rational Number Functions
  1422. @comment  node-name,  next,  previous,  up
  1423. @section Input and Output Functions
  1424. @cindex Rational input and output functions
  1425. @cindex Input functions
  1426. @cindex Output functions
  1427. @cindex I/O functions
  1428. When using any of these functions, it's a good idea to include @file{stdio.h}
  1429. before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes
  1430. for these functions.
  1431. Passing a @code{NULL} pointer for a @var{stream} argument to any of these
  1432. functions will make them read from @code{stdin} and write to @code{stdout},
  1433. respectively.
  1434. @deftypefun size_t mpq_out_str (FILE *@var{stream}, int @var{base}, mpq_t @var{op})
  1435. Output @var{op} on stdio stream @var{stream}, as a string of digits in base
  1436. @var{base}.  The base may vary from 2 to 36.  Output is in the form
  1437. @samp{num/den} or if the denominator is 1 then just @samp{num}.
  1438. Return the number of bytes written, or if an error occurred, return 0.
  1439. @end deftypefun
  1440. @deftypefun size_t mpq_inp_str (mpq_t @var{rop}, FILE *@var{stream}, int @var{base})
  1441. Read a string of digits from @var{stream} and convert them to a rational in
  1442. @var{rop}.  Any initial white-space characters are read and discarded.  Return
  1443. the number of characters read (including white space), or 0 if a rational
  1444. could not be read.
  1445. The input can be a fraction like @samp{17/63} or just an integer like
  1446. @samp{123}.  Reading stops at the first character not in this form, and white
  1447. space is not permitted within the string.  If the input might not be in
  1448. canonical form, then @code{mpq_canonicalize} must be called (@pxref{Rational
  1449. Number Functions}).
  1450. The @var{base} can be between 2 and 36, or can be 0 in which case the leading
  1451. characters of the string determine the base, @samp{0x} or @samp{0X} for
  1452. hexadecimal, @samp{0} for octal, or decimal otherwise.  The leading characters
  1453. are examined separately for the numerator and denominator of a fraction, so
  1454. for instance @samp{0x10/11} is @math{16/11}, whereas @samp{0x10/0x11} is
  1455. @math{16/17}.
  1456. @end deftypefun
  1457. @node Floating-point Functions, Low-level Functions, Rational Number Functions, Top
  1458. @comment  node-name,  next,  previous,  up
  1459. @chapter Floating-point Functions
  1460. @cindex Floating-point functions
  1461. @cindex Float functions
  1462. @cindex User-defined precision
  1463. @cindex Precision of floats
  1464. GMP floating point numbers are stored in objects of type @code{mpf_t} and
  1465. functions operating on them have an @code{mpf_} prefix.
  1466. The mantissa of each float has a user-selectable precision, limited only by
  1467. available memory.  Each variable has its own precision, and that can be
  1468. increased or decreased at any time.
  1469. The exponent of each float is a fixed precision, one machine word on most
  1470. systems.  In the current implementation the exponent is a count of limbs, so
  1471. for example on a 32-bit system this means a range of roughly
  1472. @math{2^@W{-68719476768}} to @math{2^@W{68719476736}}, or on a 64-bit system
  1473. this will be greater.  Note however @code{mpf_get_str} can only return an
  1474. exponent which fits an @code{mp_exp_t} and currently @code{mpf_set_str}
  1475. doesn't accept exponents bigger than a @code{long}.
  1476. Each variable keeps a size for the mantissa data actually in use.  This means
  1477. that if a float is exactly represented in only a few bits then only those bits
  1478. will be used in a calculation, even if the selected precision is high.
  1479. All calculations are performed to the precision of the destination variable.
  1480. Each function is defined to calculate with ``infinite precision'' followed by
  1481. a truncation to the destination precision, but of course the work done is only
  1482. what's needed to determine a result under that definition.
  1483. The precision selected for a variable is a minimum value, GMP may increase it
  1484. a little to facilitate efficient calculation.  Currently this means rounding
  1485. up to a whole limb, and then sometimes having a further partial limb,
  1486. depending on the high limb of the mantissa.  But applications shouldn't be
  1487. concerned by such details.
  1488. The mantissa in stored in binary, as might be imagined from the fact
  1489. precisions are expressed in bits.  One consequence of this is that decimal
  1490. fractions like @math{0.1} cannot be represented exactly.  The same is true of
  1491. plain IEEE @code{double} floats.  This makes both highly unsuitable for
  1492. calculations involving money or other values that should be exact decimal
  1493. fractions.  (Suitably scaled integers, or perhaps rationals, are better
  1494. choices.)
  1495. @code{mpf} functions and variables have no special notion of infinity or
  1496. not-a-number, and applications must take care not to overflow the exponent or
  1497. results will be unpredictable.  This might change in a future release.
  1498. Note that the @code{mpf} functions are @emph{not} intended as a smooth
  1499. extension to IEEE P754 arithmetic.  In particular results obtained on one
  1500. computer often differ from the results on a computer with a different word
  1501. size.
  1502. @menu
  1503. * Initializing Floats::
  1504. * Assigning Floats::
  1505. * Simultaneous Float Init & Assign::
  1506. * Converting Floats::
  1507. * Float Arithmetic::
  1508. * Float Comparison::
  1509. * I/O of Floats::
  1510. * Miscellaneous Float Functions::
  1511. @end menu
  1512. @node Initializing Floats, Assigning Floats, Floating-point Functions, Floating-point Functions
  1513. @comment  node-name,  next,  previous,  up
  1514. @section Initialization Functions
  1515. @cindex Float initialization functions
  1516. @cindex Initialization functions
  1517. @deftypefun void mpf_set_default_prec (mp_bitcnt_t @var{prec})
  1518. Set the default precision to be @strong{at least} @var{prec} bits.  All
  1519. subsequent calls to @code{mpf_init} will use this precision, but previously
  1520. initialized variables are unaffected.
  1521. @end deftypefun
  1522. @deftypefun {mp_bitcnt_t} mpf_get_default_prec (void)
  1523. Return the default precision actually used.
  1524. @end deftypefun
  1525. An @code{mpf_t} object must be initialized before storing the first value in
  1526. it.  The functions @code{mpf_init} and @code{mpf_init2} are used for that
  1527. purpose.
  1528. @deftypefun void mpf_init (mpf_t @var{x})
  1529. Initialize @var{x} to 0.  Normally, a variable should be initialized once only
  1530. or at least be cleared, using @code{mpf_clear}, between initializations.  The
  1531. precision of @var{x} is undefined unless a default precision has already been
  1532. established by a call to @code{mpf_set_default_prec}.
  1533. @end deftypefun
  1534. @deftypefun void mpf_init2 (mpf_t @var{x}, mp_bitcnt_t @var{prec})
  1535. Initialize @var{x} to 0 and set its precision to be @strong{at least}
  1536. @var{prec} bits.  Normally, a variable should be initialized once only or at
  1537. least be cleared, using @code{mpf_clear}, between initializations.
  1538. @end deftypefun
  1539. @deftypefun void mpf_inits (mpf_t @var{x}, ...)
  1540. Initialize a NULL-terminated list of @code{mpf_t} variables, and set their
  1541. values to 0.  The precision of the initialized variables is undefined unless a
  1542. default precision has already been established by a call to
  1543. @code{mpf_set_default_prec}.
  1544. @end deftypefun
  1545. @deftypefun void mpf_clear (mpf_t @var{x})
  1546. Free the space occupied by @var{x}.  Make sure to call this function for all
  1547. @code{mpf_t} variables when you are done with them.
  1548. @end deftypefun
  1549. @deftypefun void mpf_clears (mpf_t @var{x}, ...)
  1550. Free the space occupied by a NULL-terminated list of @code{mpf_t} variables.
  1551. @end deftypefun
  1552. @need 2000
  1553. Here is an example on how to initialize floating-point variables:
  1554. @example
  1555. @{
  1556.   mpf_t x, y;
  1557.   mpf_init (x);           /* use default precision */
  1558.   mpf_init2 (y, 256);     /* precision @emph{at least} 256 bits */
  1559.   @dots{}
  1560.   /* Unless the program is about to exit, do ... */
  1561.   mpf_clear (x);
  1562.   mpf_clear (y);
  1563. @}
  1564. @end example
  1565. The following three functions are useful for changing the precision during a
  1566. calculation.  A typical use would be for adjusting the precision gradually in
  1567. iterative algorithms like Newton-Raphson, making the computation precision
  1568. closely match the actual accurate part of the numbers.
  1569. @deftypefun {mp_bitcnt_t} mpf_get_prec (mpf_t @var{op})
  1570. Return the current precision of @var{op}, in bits.
  1571. @end deftypefun
  1572. @deftypefun void mpf_set_prec (mpf_t @var{rop}, mp_bitcnt_t @var{prec})
  1573. Set the precision of @var{rop} to be @strong{at least} @var{prec} bits.  The
  1574. value in @var{rop} will be truncated to the new precision.
  1575. This function requires a call to @code{realloc}, and so should not be used in
  1576. a tight loop.
  1577. @end deftypefun
  1578. @deftypefun void mpf_set_prec_raw (mpf_t @var{rop}, mp_bitcnt_t @var{prec})
  1579. Set the precision of @var{rop} to be @strong{at least} @var{prec} bits,
  1580. without changing the memory allocated.
  1581. @var{prec} must be no more than the allocated precision for @var{rop}, that
  1582. being the precision when @var{rop} was initialized, or in the most recent
  1583. @code{mpf_set_prec}.
  1584. The value in @var{rop} is unchanged, and in particular if it had a higher
  1585. precision than @var{prec} it will retain that higher precision.  New values
  1586. written to @var{rop} will use the new @var{prec}.
  1587. Before calling @code{mpf_clear} or the full @code{mpf_set_prec}, another
  1588. @code{mpf_set_prec_raw} call must be made to restore @var{rop} to its original
  1589. allocated precision.  Failing to do so will have unpredictable results.
  1590. @code{mpf_get_prec} can be used before @code{mpf_set_prec_raw} to get the
  1591. original allocated precision.  After @code{mpf_set_prec_raw} it reflects the
  1592. @var{prec} value set.
  1593. @code{mpf_set_prec_raw} is an efficient way to use an @code{mpf_t} variable at
  1594. different precisions during a calculation, perhaps to gradually increase
  1595. precision in an iteration, or just to use various different precisions for
  1596. different purposes during a calculation.
  1597. @end deftypefun
  1598. @need 2000
  1599. @node Assigning Floats, Simultaneous Float Init & Assign, Initializing Floats, Floating-point Functions
  1600. @comment  node-name,  next,  previous,  up
  1601. @section Assignment Functions
  1602. @cindex Float assignment functions
  1603. @cindex Assignment functions
  1604. These functions assign new values to already initialized floats
  1605. (@pxref{Initializing Floats}).
  1606. @deftypefun void mpf_set (mpf_t @var{rop}, mpf_t @var{op})
  1607. @deftypefunx void mpf_set_ui (mpf_t @var{rop}, unsigned long int @var{op})
  1608. @deftypefunx void mpf_set_si (mpf_t @var{rop}, signed long int @var{op})
  1609. @deftypefunx void mpf_set_d (mpf_t @var{rop}, double @var{op})
  1610. @deftypefunx void mpf_set_z (mpf_t @var{rop}, mpz_t @var{op})
  1611. @deftypefunx void mpf_set_q (mpf_t @var{rop}, mpq_t @var{op})
  1612. Set the value of @var{rop} from @var{op}.
  1613. @end deftypefun
  1614. @deftypefun int mpf_set_str (mpf_t @var{rop}, char *@var{str}, int @var{base})
  1615. Set the value of @var{rop} from the string in @var{str}.  The string is of the
  1616. form @samp{M@@N} or, if the base is 10 or less, alternatively @samp{MeN}.
  1617. @samp{M} is the mantissa and @samp{N} is the exponent.  The mantissa is always
  1618. in the specified base.  The exponent is either in the specified base or, if
  1619. @var{base} is negative, in decimal.  The decimal point expected is taken from
  1620. the current locale, on systems providing @code{localeconv}.
  1621. The argument @var{base} may be in the ranges 2 to 62, or @minus{}62 to
  1622. @minus{}2.  Negative values are used to specify that the exponent is in
  1623. decimal.
  1624. For bases up to 36, case is ignored; upper-case and lower-case letters have
  1625. the same value; for bases 37 to 62, upper-case letter represent the usual
  1626. 10..35 while lower-case letter represent 36..61.
  1627. Unlike the corresponding @code{mpz} function, the base will not be determined
  1628. from the leading characters of the string if @var{base} is 0.  This is so that
  1629. numbers like @samp{0.23} are not interpreted as octal.
  1630. White space is allowed in the string, and is simply ignored.  [This is not
  1631. really true; white-space is ignored in the beginning of the string and within
  1632. the mantissa, but not in other places, such as after a minus sign or in the
  1633. exponent.  We are considering changing the definition of this function, making
  1634. it fail when there is any white-space in the input, since that makes a lot of
  1635. sense.  Please tell us your opinion about this change.  Do you really want it
  1636. to accept @nicode{"3 14"} as meaning 314 as it does now?]
  1637. This function returns 0 if the entire string is a valid number in base
  1638. @var{base}.  Otherwise it returns @minus{}1.
  1639. @end deftypefun
  1640. @deftypefun void mpf_swap (mpf_t @var{rop1}, mpf_t @var{rop2})
  1641. Swap @var{rop1} and @var{rop2} efficiently.  Both the values and the
  1642. precisions of the two variables are swapped.
  1643. @end deftypefun
  1644. @node Simultaneous Float Init & Assign, Converting Floats, Assigning Floats, Floating-point Functions
  1645. @comment  node-name,  next,  previous,  up
  1646. @section Combined Initialization and Assignment Functions
  1647. @cindex Float assignment functions
  1648. @cindex Assignment functions
  1649. @cindex Float initialization functions
  1650. @cindex Initialization functions
  1651. For convenience, GMP provides a parallel series of initialize-and-set functions
  1652. which initialize the output and then store the value there.  These functions'
  1653. names have the form @code{mpf_init_set@dots{}}
  1654. Once the float has been initialized by any of the @code{mpf_init_set@dots{}}
  1655. functions, it can be used as the source or destination operand for the ordinary
  1656. float functions.  Don't use an initialize-and-set function on a variable
  1657. already initialized!
  1658. @deftypefun void mpf_init_set (mpf_t @var{rop}, mpf_t @var{op})
  1659. @deftypefunx void mpf_init_set_ui (mpf_t @var{rop}, unsigned long int @var{op})
  1660. @deftypefunx void mpf_init_set_si (mpf_t @var{rop}, signed long int @var{op})
  1661. @deftypefunx void mpf_init_set_d (mpf_t @var{rop}, double @var{op})
  1662. Initialize @var{rop} and set its value from @var{op}.
  1663. The precision of @var{rop} will be taken from the active default precision, as
  1664. set by @code{mpf_set_default_prec}.
  1665. @end deftypefun
  1666. @deftypefun int mpf_init_set_str (mpf_t @var{rop}, char *@var{str}, int @var{base})
  1667. Initialize @var{rop} and set its value from the string in @var{str}.  See
  1668. @code{mpf_set_str} above for details on the assignment operation.
  1669. Note that @var{rop} is initialized even if an error occurs.  (I.e., you have to
  1670. call @code{mpf_clear} for it.)
  1671. The precision of @var{rop} will be taken from the active default precision, as
  1672. set by @code{mpf_set_default_prec}.
  1673. @end deftypefun
  1674. @node Converting Floats, Float Arithmetic, Simultaneous Float Init & Assign, Floating-point Functions
  1675. @comment  node-name,  next,  previous,  up
  1676. @section Conversion Functions
  1677. @cindex Float conversion functions
  1678. @cindex Conversion functions
  1679. @deftypefun double mpf_get_d (mpf_t @var{op})
  1680. Convert @var{op} to a @code{double}, truncating if necessary (ie.@: rounding
  1681. towards zero).
  1682. If the exponent in @var{op} is too big or too small to fit a @code{double}
  1683. then the result is system dependent.  For too big an infinity is returned when
  1684. available.  For too small @math{0.0} is normally returned.  Hardware overflow,
  1685. underflow and denorm traps may or may not occur.
  1686. @end deftypefun
  1687. @deftypefun double mpf_get_d_2exp (signed long int *@var{exp}, mpf_t @var{op})
  1688. Convert @var{op} to a @code{double}, truncating if necessary (ie.@: rounding
  1689. towards zero), and with an exponent returned separately.
  1690. The return value is in the range @math{0.5@le{}@GMPabs{@var{d}}<1} and the
  1691. exponent is stored to @code{*@var{exp}}.  @m{@var{d} * 2^{exp}, @var{d} *
  1692. 2^@var{exp}} is the (truncated) @var{op} value.  If @var{op} is zero, the
  1693. return is @math{0.0} and 0 is stored to @code{*@var{exp}}.
  1694. @cindex @code{frexp}
  1695. This is similar to the standard C @code{frexp} function (@pxref{Normalization
  1696. Functions,,, libc, The GNU C Library Reference Manual}).
  1697. @end deftypefun
  1698. @deftypefun long mpf_get_si (mpf_t @var{op})
  1699. @deftypefunx {unsigned long} mpf_get_ui (mpf_t @var{op})
  1700. Convert @var{op} to a @code{long} or @code{unsigned long}, truncating any
  1701. fraction part.  If @var{op} is too big for the return type, the result is
  1702. undefined.
  1703. See also @code{mpf_fits_slong_p} and @code{mpf_fits_ulong_p}
  1704. (@pxref{Miscellaneous Float Functions}).
  1705. @end deftypefun
  1706. @deftypefun {char *} mpf_get_str (char *@var{str}, mp_exp_t *@var{expptr}, int @var{base}, size_t @var{n_digits}, mpf_t @var{op})
  1707. Convert @var{op} to a string of digits in base @var{base}.  The base argument
  1708. may vary from 2 to 62 or from @minus{}2 to @minus{}36.  Up to @var{n_digits}
  1709. digits will be generated.  Trailing zeros are not returned.  No more digits
  1710. than can be accurately represented by @var{op} are ever generated.  If
  1711. @var{n_digits} is 0 then that accurate maximum number of digits are generated.
  1712. For @var{base} in the range 2..36, digits and lower-case letters are used; for
  1713. @minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62,
  1714. digits, upper-case letters, and lower-case letters (in that significance order)
  1715. are used.
  1716. If @var{str} is @code{NULL}, the result string is allocated using the current
  1717. allocation function (@pxref{Custom Allocation}).  The block will be
  1718. @code{strlen(str)+1} bytes, that being exactly enough for the string and
  1719. null-terminator.
  1720. If @var{str} is not @code{NULL}, it should point to a block of
  1721. @math{@var{n_digits} + 2} bytes, that being enough for the mantissa, a
  1722. possible minus sign, and a null-terminator.  When @var{n_digits} is 0 to get
  1723. all significant digits, an application won't be able to know the space
  1724. required, and @var{str} should be @code{NULL} in that case.
  1725. The generated string is a fraction, with an implicit radix point immediately
  1726. to the left of the first digit.  The applicable exponent is written through
  1727. the @var{expptr} pointer.  For example, the number 3.1416 would be returned as
  1728. string @nicode{"31416"} and exponent 1.
  1729. When @var{op} is zero, an empty string is produced and the exponent returned
  1730. is 0.
  1731. A pointer to the result string is returned, being either the allocated block
  1732. or the given @var{str}.
  1733. @end deftypefun
  1734. @node Float Arithmetic, Float Comparison, Converting Floats, Floating-point Functions
  1735. @comment  node-name,  next,  previous,  up
  1736. @section Arithmetic Functions
  1737. @cindex Float arithmetic functions
  1738. @cindex Arithmetic functions
  1739. @deftypefun void mpf_add (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
  1740. @deftypefunx void mpf_add_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
  1741. Set @var{rop} to @math{@var{op1} + @var{op2}}.
  1742. @end deftypefun
  1743. @deftypefun void mpf_sub (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
  1744. @deftypefunx void mpf_ui_sub (mpf_t @var{rop}, unsigned long int @var{op1}, mpf_t @var{op2})
  1745. @deftypefunx void mpf_sub_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
  1746. Set @var{rop} to @var{op1} @minus{} @var{op2}.
  1747. @end deftypefun
  1748. @deftypefun void mpf_mul (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
  1749. @deftypefunx void mpf_mul_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
  1750. Set @var{rop} to @math{@var{op1} @GMPtimes{} @var{op2}}.
  1751. @end deftypefun
  1752. Division is undefined if the divisor is zero, and passing a zero divisor to the
  1753. divide functions will make these functions intentionally divide by zero.  This
  1754. lets the user handle arithmetic exceptions in these functions in the same
  1755. manner as other arithmetic exceptions.
  1756. @deftypefun void mpf_div (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
  1757. @deftypefunx void mpf_ui_div (mpf_t @var{rop}, unsigned long int @var{op1}, mpf_t @var{op2})
  1758. @deftypefunx void mpf_div_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
  1759. @cindex Division functions
  1760. Set @var{rop} to @var{op1}/@var{op2}.
  1761. @end deftypefun
  1762. @deftypefun void mpf_sqrt (mpf_t @var{rop}, mpf_t @var{op})
  1763. @deftypefunx void mpf_sqrt_ui (mpf_t @var{rop}, unsigned long int @var{op})
  1764. @cindex Root extraction functions
  1765. Set @var{rop} to @m{sqrt{@var{op}}, the square root of @var{op}}.
  1766. @end deftypefun
  1767. @deftypefun void mpf_pow_ui (mpf_t @var{rop}, mpf_t @var{op1}, unsigned long int @var{op2})
  1768. @cindex Exponentiation functions
  1769. @cindex Powering functions
  1770. Set @var{rop} to @m{@var{op1}^{op2}, @var{op1} raised to the power @var{op2}}.
  1771. @end deftypefun
  1772. @deftypefun void mpf_neg (mpf_t @var{rop}, mpf_t @var{op})
  1773. Set @var{rop} to @minus{}@var{op}.
  1774. @end deftypefun
  1775. @deftypefun void mpf_abs (mpf_t @var{rop}, mpf_t @var{op})
  1776. Set @var{rop} to the absolute value of @var{op}.
  1777. @end deftypefun
  1778. @deftypefun void mpf_mul_2exp (mpf_t @var{rop}, mpf_t @var{op1}, mp_bitcnt_t @var{op2})
  1779. Set @var{rop} to @m{@var{op1} times 2^{op2}, @var{op1} times 2 raised to
  1780. @var{op2}}.
  1781. @end deftypefun
  1782. @deftypefun void mpf_div_2exp (mpf_t @var{rop}, mpf_t @var{op1}, mp_bitcnt_t @var{op2})
  1783. Set @var{rop} to @m{@var{op1}/2^{op2}, @var{op1} divided by 2 raised to
  1784. @var{op2}}.
  1785. @end deftypefun
  1786. @node Float Comparison, I/O of Floats, Float Arithmetic, Floating-point Functions
  1787. @comment  node-name,  next,  previous,  up
  1788. @section Comparison Functions
  1789. @cindex Float comparison functions
  1790. @cindex Comparison functions
  1791. @deftypefun int mpf_cmp (mpf_t @var{op1}, mpf_t @var{op2})
  1792. @deftypefunx int mpf_cmp_d (mpf_t @var{op1}, double @var{op2})
  1793. @deftypefunx int mpf_cmp_ui (mpf_t @var{op1}, unsigned long int @var{op2})
  1794. @deftypefunx int mpf_cmp_si (mpf_t @var{op1}, signed long int @var{op2})
  1795. Compare @var{op1} and @var{op2}.  Return a positive value if @math{@var{op1} >
  1796. @var{op2}}, zero if @math{@var{op1} = @var{op2}}, and a negative value if
  1797. @math{@var{op1} < @var{op2}}.
  1798. @code{mpf_cmp_d} can be called with an infinity, but results are undefined for
  1799. a NaN.
  1800. @end deftypefun
  1801. @deftypefun int mpf_eq (mpf_t @var{op1}, mpf_t @var{op2}, mp_bitcnt_t op3)
  1802. Return non-zero if the first @var{op3} bits of @var{op1} and @var{op2} are
  1803. equal, zero otherwise.  I.e., test if @var{op1} and @var{op2} are approximately
  1804. equal.
  1805. Caution 1: All version of GMP up to version 4.2.4 compared just whole limbs,
  1806. meaning sometimes more than @var{op3} bits, sometimes fewer.
  1807. Caution 2: This function will consider XXX11...111 and XX100...000 different,
  1808. even if ... is replaced by a semi-infinite number of bits.  Such numbers are
  1809. really just one ulp off, and should be considered equal.
  1810. @end deftypefun
  1811. @deftypefun void mpf_reldiff (mpf_t @var{rop}, mpf_t @var{op1}, mpf_t @var{op2})
  1812. Compute the relative difference between @var{op1} and @var{op2} and store the
  1813. result in @var{rop}.  This is @math{@GMPabs{@var{op1}-@var{op2}}/@var{op1}}.
  1814. @end deftypefun
  1815. @deftypefn Macro int mpf_sgn (mpf_t @var{op})
  1816. @cindex Sign tests
  1817. @cindex Float sign tests
  1818. Return @math{+1} if @math{@var{op} > 0}, 0 if @math{@var{op} = 0}, and
  1819. @math{-1} if @math{@var{op} < 0}.
  1820. This function is actually implemented as a macro.  It evaluates its arguments
  1821. multiple times.
  1822. @end deftypefn
  1823. @node I/O of Floats, Miscellaneous Float Functions, Float Comparison, Floating-point Functions
  1824. @comment  node-name,  next,  previous,  up
  1825. @section Input and Output Functions
  1826. @cindex Float input and output functions
  1827. @cindex Input functions
  1828. @cindex Output functions
  1829. @cindex I/O functions
  1830. Functions that perform input from a stdio stream, and functions that output to
  1831. a stdio stream.  Passing a @code{NULL} pointer for a @var{stream} argument to
  1832. any of these functions will make them read from @code{stdin} and write to
  1833. @code{stdout}, respectively.
  1834. When using any of these functions, it is a good idea to include @file{stdio.h}
  1835. before @file{gmp.h}, since that will allow @file{gmp.h} to define prototypes
  1836. for these functions.
  1837. @deftypefun size_t mpf_out_str (FILE *@var{stream}, int @var{base}, size_t @var{n_digits}, mpf_t @var{op})
  1838. Print @var{op} to @var{stream}, as a string of digits.  Return the number of
  1839. bytes written, or if an error occurred, return 0.
  1840. The mantissa is prefixed with an @samp{0.} and is in the given @var{base},
  1841. which may vary from 2 to 62 or from @minus{}2 to @minus{}36.  An exponent is
  1842. then printed, separated by an @samp{e}, or if the base is greater than 10 then
  1843. by an @samp{@@}.  The exponent is always in decimal.  The decimal point follows
  1844. the current locale, on systems providing @code{localeconv}.
  1845. For @var{base} in the range 2..36, digits and lower-case letters are used; for
  1846. @minus{}2..@minus{}36, digits and upper-case letters are used; for 37..62,
  1847. digits, upper-case letters, and lower-case letters (in that significance order)
  1848. are used.
  1849. Up to @var{n_digits} will be printed from the mantissa, except that no more
  1850. digits than are accurately representable by @var{op} will be printed.
  1851. @var{n_digits} can be 0 to select that accurate maximum.
  1852. @end deftypefun
  1853. @deftypefun size_t mpf_inp_str (mpf_t @var{rop}, FILE *@var{stream}, int @var{base})
  1854. Read a string in base @var{base} from @var{stream}, and put the read float in
  1855. @var{rop}.  The string is of the form @samp{M@@N} or, if the base is 10 or
  1856. less, alternatively @samp{MeN}.  @samp{M} is the mantissa and @samp{N} is the
  1857. exponent.  The mantissa is always in the specified base.  The exponent is
  1858. either in the specified base or, if @var{base} is negative, in decimal.  The
  1859. decimal point expected is taken from the current locale, on systems providing
  1860. @code{localeconv}.
  1861. The argument @var{base} may be in the ranges 2 to 36, or @minus{}36 to
  1862. @minus{}2.  Negative values are used to specify that the exponent is in
  1863. decimal.
  1864. Unlike the corresponding @code{mpz} function, the base will not be determined
  1865. from the leading characters of the string if @var{base} is 0.  This is so that
  1866. numbers like @samp{0.23} are not interpreted as octal.
  1867. Return the number of bytes read, or if an error occurred, return 0.
  1868. @end deftypefun
  1869. @c @deftypefun void mpf_out_raw (FILE *@var{stream}, mpf_t @var{float})
  1870. @c Output @var{float} on stdio stream @var{stream}, in raw binary
  1871. @c format.  The float is written in a portable format, with 4 bytes of
  1872. @c size information, and that many bytes of limbs.  Both the size and the
  1873. @c limbs are written in decreasing significance order.
  1874. @c @end deftypefun
  1875. @c @deftypefun void mpf_inp_raw (mpf_t @var{float}, FILE *@var{stream})
  1876. @c Input from stdio stream @var{stream} in the format written by
  1877. @c @code{mpf_out_raw}, and put the result in @var{float}.
  1878. @c @end deftypefun
  1879. @node Miscellaneous Float Functions,  , I/O of Floats, Floating-point Functions
  1880. @comment  node-name,  next,  previous,  up
  1881. @section Miscellaneous Functions
  1882. @cindex Miscellaneous float functions
  1883. @cindex Float miscellaneous functions
  1884. @deftypefun void mpf_ceil (mpf_t @var{rop}, mpf_t @var{op})
  1885. @deftypefunx void mpf_floor (mpf_t @var{rop}, mpf_t @var{op})
  1886. @deftypefunx void mpf_trunc (mpf_t @var{rop}, mpf_t @var{op})
  1887. @cindex Rounding functions
  1888. @cindex Float rounding functions
  1889. Set @var{rop} to @var{op} rounded to an integer.  @code{mpf_ceil} rounds to the
  1890. next higher integer, @code{mpf_floor} to the next lower, and @code{mpf_trunc}
  1891. to the integer towards zero.
  1892. @end deftypefun
  1893. @deftypefun int mpf_integer_p (mpf_t @var{op})
  1894. Return non-zero if @var{op} is an integer.
  1895. @end deftypefun
  1896. @deftypefun int mpf_fits_ulong_p (mpf_t @var{op})
  1897. @deftypefunx int mpf_fits_slong_p (mpf_t @var{op})
  1898. @deftypefunx int mpf_fits_uint_p (mpf_t @var{op})
  1899. @deftypefunx int mpf_fits_sint_p (mpf_t @var{op})
  1900. @deftypefunx int mpf_fits_ushort_p (mpf_t @var{op})
  1901. @deftypefunx int mpf_fits_sshort_p (mpf_t @var{op})
  1902. Return non-zero if @var{op} would fit in the respective C data type, when
  1903. truncated to an integer.
  1904. @end deftypefun
  1905. @deftypefun void mpf_urandomb (mpf_t @var{rop}, gmp_randstate_t @var{state}, mp_bitcnt_t @var{nbits})
  1906. @cindex Random number functions
  1907. @cindex Float random number functions
  1908. Generate a uniformly distributed random float in @var{rop}, such that @math{0
  1909. @le{} @var{rop} < 1}, with @var{nbits} significant bits in the mantissa.
  1910. The variable @var{state} must be initialized by calling one of the
  1911. @code{gmp_randinit} functions (@ref{Random State Initialization}) before
  1912. invoking this function.
  1913. @end deftypefun
  1914. @deftypefun void mpf_random2 (mpf_t @var{rop}, mp_size_t @var{max_size}, mp_exp_t @var{exp})
  1915. Generate a random float of at most @var{max_size} limbs, with long strings of
  1916. zeros and ones in the binary representation.  The exponent of the number is in
  1917. the interval @minus{}@var{exp} to @var{exp} (in limbs).  This function is
  1918. useful for testing functions and algorithms, since these kind of random
  1919. numbers have proven to be more likely to trigger corner-case bugs.  Negative
  1920. random numbers are generated when @var{max_size} is negative.
  1921. @end deftypefun
  1922. @c @deftypefun size_t mpf_size (mpf_t @var{op})
  1923. @c Return the size of @var{op} measured in number of limbs.  If @var{op} is
  1924. @c zero, the returned value will be zero.  (@xref{Nomenclature}, for an
  1925. @c explanation of the concept @dfn{limb}.)
  1926. @c
  1927. @c @strong{This function is obsolete.  It will disappear from future GMP
  1928. @c releases.}
  1929. @c @end deftypefun
  1930. @node Low-level Functions, Random Number Functions, Floating-point Functions, Top
  1931. @comment  node-name,  next,  previous,  up
  1932. @chapter Low-level Functions
  1933. @cindex Low-level functions
  1934. This chapter describes low-level GMP functions, used to implement the
  1935. high-level GMP functions, but also intended for time-critical user code.
  1936. These functions start with the prefix @code{mpn_}.
  1937. @c 1. Some of these function clobber input operands.
  1938. @c
  1939. The @code{mpn} functions are designed to be as fast as possible, @strong{not}
  1940. to provide a coherent calling interface.  The different functions have somewhat
  1941. similar interfaces, but there are variations that make them hard to use.  These
  1942. functions do as little as possible apart from the real multiple precision
  1943. computation, so that no time is spent on things that not all callers need.
  1944. A source operand is specified by a pointer to the least significant limb and a
  1945. limb count.  A destination operand is specified by just a pointer.  It is the
  1946. responsibility of the caller to ensure that the destination has enough space
  1947. for storing the result.
  1948. With this way of specifying operands, it is possible to perform computations on
  1949. subranges of an argument, and store the result into a subrange of a
  1950. destination.
  1951. A common requirement for all functions is that each source area needs at least
  1952. one limb.  No size argument may be zero.  Unless otherwise stated, in-place
  1953. operations are allowed where source and destination are the same, but not where
  1954. they only partly overlap.
  1955. The @code{mpn} functions are the base for the implementation of the
  1956. @code{mpz_}, @code{mpf_}, and @code{mpq_} functions.
  1957. This example adds the number beginning at @var{s1p} and the number beginning at
  1958. @var{s2p} and writes the sum at @var{destp}.  All areas have @var{n} limbs.
  1959. @example
  1960. cy = mpn_add_n (destp, s1p, s2p, n)
  1961. @end example
  1962. It should be noted that the @code{mpn} functions make no attempt to identify
  1963. high or low zero limbs on their operands, or other special forms.  On random
  1964. data such cases will be unlikely and it'd be wasteful for every function to
  1965. check every time.  An application knowing something about its data can take
  1966. steps to trim or perhaps split its calculations.
  1967. @c
  1968. @c  For reference, within gmp mpz_t operands never have high zero limbs, and
  1969. @c  we rate low zero limbs as unlikely too (or something an application should
  1970. @c  handle).  This is a prime motivation for not stripping zero limbs in say
  1971. @c  mpn_mul_n etc.
  1972. @c
  1973. @c  Other applications doing variable-length calculations will quite likely do
  1974. @c  something similar to mpz.  And even if not then it's highly likely zero
  1975. @c  limb stripping can be done at just a few judicious points, which will be
  1976. @c  more efficient than having lots of mpn functions checking every time.
  1977. @sp 1
  1978. @noindent
  1979. In the notation used below, a source operand is identified by the pointer to
  1980. the least significant limb, and the limb count in braces.  For example,
  1981. @{@var{s1p}, @var{s1n}@}.
  1982. @deftypefun mp_limb_t mpn_add_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  1983. Add @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@}, and write the @var{n}
  1984. least significant limbs of the result to @var{rp}.  Return carry, either 0 or
  1985. 1.
  1986. This is the lowest-level function for addition.  It is the preferred function
  1987. for addition, since it is written in assembly for most CPUs.  For addition of
  1988. a variable to itself (i.e., @var{s1p} equals @var{s2p}) use @code{mpn_lshift}
  1989. with a count of 1 for optimal speed.
  1990. @end deftypefun
  1991. @deftypefun mp_limb_t mpn_add_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb})
  1992. Add @{@var{s1p}, @var{n}@} and @var{s2limb}, and write the @var{n} least
  1993. significant limbs of the result to @var{rp}.  Return carry, either 0 or 1.
  1994. @end deftypefun
  1995. @deftypefun mp_limb_t mpn_add (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n})
  1996. Add @{@var{s1p}, @var{s1n}@} and @{@var{s2p}, @var{s2n}@}, and write the
  1997. @var{s1n} least significant limbs of the result to @var{rp}.  Return carry,
  1998. either 0 or 1.
  1999. This function requires that @var{s1n} is greater than or equal to @var{s2n}.
  2000. @end deftypefun
  2001. @deftypefun mp_limb_t mpn_sub_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  2002. Subtract @{@var{s2p}, @var{n}@} from @{@var{s1p}, @var{n}@}, and write the
  2003. @var{n} least significant limbs of the result to @var{rp}.  Return borrow,
  2004. either 0 or 1.
  2005. This is the lowest-level function for subtraction.  It is the preferred
  2006. function for subtraction, since it is written in assembly for most CPUs.
  2007. @end deftypefun
  2008. @deftypefun mp_limb_t mpn_sub_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb})
  2009. Subtract @var{s2limb} from @{@var{s1p}, @var{n}@}, and write the @var{n} least
  2010. significant limbs of the result to @var{rp}.  Return borrow, either 0 or 1.
  2011. @end deftypefun
  2012. @deftypefun mp_limb_t mpn_sub (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n})
  2013. Subtract @{@var{s2p}, @var{s2n}@} from @{@var{s1p}, @var{s1n}@}, and write the
  2014. @var{s1n} least significant limbs of the result to @var{rp}.  Return borrow,
  2015. either 0 or 1.
  2016. This function requires that @var{s1n} is greater than or equal to
  2017. @var{s2n}.
  2018. @end deftypefun
  2019. @deftypefun void mpn_neg (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n})
  2020. Perform the negation of @{@var{sp}, @var{n}@}, and write the result to
  2021. @{@var{rp}, @var{n}@}.  Return carry-out.
  2022. @end deftypefun
  2023. @deftypefun void mpn_mul_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  2024. Multiply @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@}, and write the
  2025. 2*@var{n}-limb result to @var{rp}.
  2026. The destination has to have space for 2*@var{n} limbs, even if the product's
  2027. most significant limb is zero.  No overlap is permitted between the
  2028. destination and either source.
  2029. If the two input operands are the same, use @code{mpn_sqr}.
  2030. @end deftypefun
  2031. @deftypefun mp_limb_t mpn_mul (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, const mp_limb_t *@var{s2p}, mp_size_t @var{s2n})
  2032. Multiply @{@var{s1p}, @var{s1n}@} and @{@var{s2p}, @var{s2n}@}, and write the
  2033. (@var{s1n}+@var{s2n})-limb result to @var{rp}.  Return the most significant
  2034. limb of the result.
  2035. The destination has to have space for @var{s1n} + @var{s2n} limbs, even if the
  2036. product's most significant limb is zero.  No overlap is permitted between the
  2037. destination and either source.
  2038. This function requires that @var{s1n} is greater than or equal to @var{s2n}.
  2039. @end deftypefun
  2040. @deftypefun void mpn_sqr (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n})
  2041. Compute the square of @{@var{s1p}, @var{n}@} and write the 2*@var{n}-limb
  2042. result to @var{rp}.
  2043. The destination has to have space for 2*@var{n} limbs, even if the result's
  2044. most significant limb is zero.  No overlap is permitted between the
  2045. destination and the source.
  2046. @end deftypefun
  2047. @deftypefun mp_limb_t mpn_mul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb})
  2048. Multiply @{@var{s1p}, @var{n}@} by @var{s2limb}, and write the @var{n} least
  2049. significant limbs of the product to @var{rp}.  Return the most significant
  2050. limb of the product.  @{@var{s1p}, @var{n}@} and @{@var{rp}, @var{n}@} are
  2051. allowed to overlap provided @math{@var{rp} @le{} @var{s1p}}.
  2052. This is a low-level function that is a building block for general
  2053. multiplication as well as other operations in GMP@.  It is written in assembly
  2054. for most CPUs.
  2055. Don't call this function if @var{s2limb} is a power of 2; use @code{mpn_lshift}
  2056. with a count equal to the logarithm of @var{s2limb} instead, for optimal speed.
  2057. @end deftypefun
  2058. @deftypefun mp_limb_t mpn_addmul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb})
  2059. Multiply @{@var{s1p}, @var{n}@} and @var{s2limb}, and add the @var{n} least
  2060. significant limbs of the product to @{@var{rp}, @var{n}@} and write the result
  2061. to @var{rp}.  Return the most significant limb of the product, plus carry-out
  2062. from the addition.
  2063. This is a low-level function that is a building block for general
  2064. multiplication as well as other operations in GMP@.  It is written in assembly
  2065. for most CPUs.
  2066. @end deftypefun
  2067. @deftypefun mp_limb_t mpn_submul_1 (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n}, mp_limb_t @var{s2limb})
  2068. Multiply @{@var{s1p}, @var{n}@} and @var{s2limb}, and subtract the @var{n}
  2069. least significant limbs of the product from @{@var{rp}, @var{n}@} and write the
  2070. result to @var{rp}.  Return the most significant limb of the product, plus
  2071. borrow-out from the subtraction.
  2072. This is a low-level function that is a building block for general
  2073. multiplication and division as well as other operations in GMP@.  It is written
  2074. in assembly for most CPUs.
  2075. @end deftypefun
  2076. @deftypefun void mpn_tdiv_qr (mp_limb_t *@var{qp}, mp_limb_t *@var{rp}, mp_size_t @var{qxn}, const mp_limb_t *@var{np}, mp_size_t @var{nn}, const mp_limb_t *@var{dp}, mp_size_t @var{dn})
  2077. Divide @{@var{np}, @var{nn}@} by @{@var{dp}, @var{dn}@} and put the quotient
  2078. at @{@var{qp}, @var{nn}@minus{}@var{dn}+1@} and the remainder at @{@var{rp},
  2079. @var{dn}@}.  The quotient is rounded towards 0.
  2080. No overlap is permitted between arguments, except that @var{np} might equal
  2081. @var{rp}.  The dividend size @var{nn} must be greater than or equal to divisor
  2082. size @var{dn}.  The most significant limb of the divisor must be non-zero.  The
  2083. @var{qxn} operand must be zero.
  2084. @end deftypefun
  2085. @deftypefun mp_limb_t mpn_divrem (mp_limb_t *@var{r1p}, mp_size_t @var{qxn}, mp_limb_t *@var{rs2p}, mp_size_t @var{rs2n}, const mp_limb_t *@var{s3p}, mp_size_t @var{s3n})
  2086. [This function is obsolete.  Please call @code{mpn_tdiv_qr} instead for best
  2087. performance.]
  2088. Divide @{@var{rs2p}, @var{rs2n}@} by @{@var{s3p}, @var{s3n}@}, and write the
  2089. quotient at @var{r1p}, with the exception of the most significant limb, which
  2090. is returned.  The remainder replaces the dividend at @var{rs2p}; it will be
  2091. @var{s3n} limbs long (i.e., as many limbs as the divisor).
  2092. In addition to an integer quotient, @var{qxn} fraction limbs are developed, and
  2093. stored after the integral limbs.  For most usages, @var{qxn} will be zero.
  2094. It is required that @var{rs2n} is greater than or equal to @var{s3n}.  It is
  2095. required that the most significant bit of the divisor is set.
  2096. If the quotient is not needed, pass @var{rs2p} + @var{s3n} as @var{r1p}.  Aside
  2097. from that special case, no overlap between arguments is permitted.
  2098. Return the most significant limb of the quotient, either 0 or 1.
  2099. The area at @var{r1p} needs to be @var{rs2n} @minus{} @var{s3n} + @var{qxn}
  2100. limbs large.
  2101. @end deftypefun
  2102. @deftypefn Function mp_limb_t mpn_divrem_1 (mp_limb_t *@var{r1p}, mp_size_t @var{qxn}, @w{mp_limb_t *@var{s2p}}, mp_size_t @var{s2n}, mp_limb_t @var{s3limb})
  2103. @deftypefnx Macro mp_limb_t mpn_divmod_1 (mp_limb_t *@var{r1p}, mp_limb_t *@var{s2p}, @w{mp_size_t @var{s2n}}, @w{mp_limb_t @var{s3limb}})
  2104. Divide @{@var{s2p}, @var{s2n}@} by @var{s3limb}, and write the quotient at
  2105. @var{r1p}.  Return the remainder.
  2106. The integer quotient is written to @{@var{r1p}+@var{qxn}, @var{s2n}@} and in
  2107. addition @var{qxn} fraction limbs are developed and written to @{@var{r1p},
  2108. @var{qxn}@}.  Either or both @var{s2n} and @var{qxn} can be zero.  For most
  2109. usages, @var{qxn} will be zero.
  2110. @code{mpn_divmod_1} exists for upward source compatibility and is simply a
  2111. macro calling @code{mpn_divrem_1} with a @var{qxn} of 0.
  2112. The areas at @var{r1p} and @var{s2p} have to be identical or completely
  2113. separate, not partially overlapping.
  2114. @end deftypefn