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

数学计算

开发平台:

Unix_Linux

  1. @deftypefun mp_limb_t mpn_divmod (mp_limb_t *@var{r1p}, mp_limb_t *@var{rs2p}, mp_size_t @var{rs2n}, const mp_limb_t *@var{s3p}, mp_size_t @var{s3n})
  2. [This function is obsolete.  Please call @code{mpn_tdiv_qr} instead for best
  3. performance.]
  4. @end deftypefun
  5. @deftypefn Macro mp_limb_t mpn_divexact_by3 (mp_limb_t *@var{rp}, mp_limb_t *@var{sp}, @w{mp_size_t @var{n}})
  6. @deftypefnx Function mp_limb_t mpn_divexact_by3c (mp_limb_t *@var{rp}, mp_limb_t *@var{sp}, @w{mp_size_t @var{n}}, mp_limb_t @var{carry})
  7. Divide @{@var{sp}, @var{n}@} by 3, expecting it to divide exactly, and writing
  8. the result to @{@var{rp}, @var{n}@}.  If 3 divides exactly, the return value is
  9. zero and the result is the quotient.  If not, the return value is non-zero and
  10. the result won't be anything useful.
  11. @code{mpn_divexact_by3c} takes an initial carry parameter, which can be the
  12. return value from a previous call, so a large calculation can be done piece by
  13. piece from low to high.  @code{mpn_divexact_by3} is simply a macro calling
  14. @code{mpn_divexact_by3c} with a 0 carry parameter.
  15. These routines use a multiply-by-inverse and will be faster than
  16. @code{mpn_divrem_1} on CPUs with fast multiplication but slow division.
  17. The source @math{a}, result @math{q}, size @math{n}, initial carry @math{i},
  18. and return value @math{c} satisfy @m{cb^n+a-i=3q, c*b^n + a-i = 3*q}, where
  19. @m{b=2GMPraise{@code{GMP_NUMB_BITS}}, b=2^GMP_NUMB_BITS}.  The
  20. return @math{c} is always 0, 1 or 2, and the initial carry @math{i} must also
  21. be 0, 1 or 2 (these are both borrows really).  When @math{c=0} clearly
  22. @math{q=(a-i)/3}.  When @m{c neq 0, c!=0}, the remainder @math{(a-i) @bmod{}
  23. 3} is given by @math{3-c}, because @math{b @equiv{} 1 @bmod{} 3} (when
  24. @code{mp_bits_per_limb} is even, which is always so currently).
  25. @end deftypefn
  26. @deftypefun mp_limb_t mpn_mod_1 (mp_limb_t *@var{s1p}, mp_size_t @var{s1n}, mp_limb_t @var{s2limb})
  27. Divide @{@var{s1p}, @var{s1n}@} by @var{s2limb}, and return the remainder.
  28. @var{s1n} can be zero.
  29. @end deftypefun
  30. @deftypefun mp_limb_t mpn_lshift (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}, unsigned int @var{count})
  31. Shift @{@var{sp}, @var{n}@} left by @var{count} bits, and write the result to
  32. @{@var{rp}, @var{n}@}.  The bits shifted out at the left are returned in the
  33. least significant @var{count} bits of the return value (the rest of the return
  34. value is zero).
  35. @var{count} must be in the range 1 to @nicode{mp_bits_per_limb}@minus{}1.  The
  36. regions @{@var{sp}, @var{n}@} and @{@var{rp}, @var{n}@} may overlap, provided
  37. @math{@var{rp} @ge{} @var{sp}}.
  38. This function is written in assembly for most CPUs.
  39. @end deftypefun
  40. @deftypefun mp_limb_t mpn_rshift (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n}, unsigned int @var{count})
  41. Shift @{@var{sp}, @var{n}@} right by @var{count} bits, and write the result to
  42. @{@var{rp}, @var{n}@}.  The bits shifted out at the right are returned in the
  43. most significant @var{count} bits of the return value (the rest of the return
  44. value is zero).
  45. @var{count} must be in the range 1 to @nicode{mp_bits_per_limb}@minus{}1.  The
  46. regions @{@var{sp}, @var{n}@} and @{@var{rp}, @var{n}@} may overlap, provided
  47. @math{@var{rp} @le{} @var{sp}}.
  48. This function is written in assembly for most CPUs.
  49. @end deftypefun
  50. @deftypefun int mpn_cmp (const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  51. Compare @{@var{s1p}, @var{n}@} and @{@var{s2p}, @var{n}@} and return a
  52. positive value if @math{@var{s1} > @var{s2}}, 0 if they are equal, or a
  53. negative value if @math{@var{s1} < @var{s2}}.
  54. @end deftypefun
  55. @deftypefun mp_size_t mpn_gcd (mp_limb_t *@var{rp}, mp_limb_t *@var{xp}, mp_size_t @var{xn}, mp_limb_t *@var{yp}, mp_size_t @var{yn})
  56. Set @{@var{rp}, @var{retval}@} to the greatest common divisor of @{@var{xp},
  57. @var{xn}@} and @{@var{yp}, @var{yn}@}.  The result can be up to @var{yn} limbs,
  58. the return value is the actual number produced.  Both source operands are
  59. destroyed.
  60. @{@var{xp}, @var{xn}@} must have at least as many bits as @{@var{yp},
  61. @var{yn}@}.  @{@var{yp}, @var{yn}@} must be odd.  Both operands must have
  62. non-zero most significant limbs.  No overlap is permitted between @{@var{xp},
  63. @var{xn}@} and @{@var{yp}, @var{yn}@}.
  64. @end deftypefun
  65. @deftypefun mp_limb_t mpn_gcd_1 (const mp_limb_t *@var{xp}, mp_size_t @var{xn}, mp_limb_t @var{ylimb})
  66. Return the greatest common divisor of @{@var{xp}, @var{xn}@} and @var{ylimb}.
  67. Both operands must be non-zero.
  68. @end deftypefun
  69. @deftypefun mp_size_t mpn_gcdext (mp_limb_t *@var{gp}, mp_limb_t *@var{sp}, mp_size_t *@var{sn}, mp_limb_t *@var{xp}, mp_size_t @var{xn}, mp_limb_t *@var{yp}, mp_size_t @var{yn})
  70. Let @m{U,@var{U}} be defined by @{@var{xp}, @var{xn}@} and let @m{V,@var{V}} be
  71. defined by @{@var{yp}, @var{yn}@}.
  72. Compute the greatest common divisor @math{G} of @math{U} and @math{V}.  Compute
  73. a cofactor @math{S} such that @math{G = US + VT}.  The second cofactor @var{T}
  74. is not computed but can easily be obtained from @m{(G - US) / V, (@var{G} -
  75. @var{U}*@var{S}) / @var{V}} (the division will be exact).  It is required that
  76. @math{U @ge V > 0}.
  77. @math{S} satisfies @math{S = 1} or @math{@GMPabs{S} < V / (2 G)}. @math{S =
  78. 0} if and only if @math{V} divides @math{U} (i.e., @math{G = V}).
  79. Store @math{G} at @var{gp} and let the return value define its limb count.
  80. Store @math{S} at @var{sp} and let |*@var{sn}| define its limb count.  @math{S}
  81. can be negative; when this happens *@var{sn} will be negative.  The areas at
  82. @var{gp} and @var{sp} should each have room for @math{@var{xn}+1} limbs.
  83. The areas @{@var{xp}, @math{@var{xn}+1}@} and @{@var{yp}, @math{@var{yn}+1}@}
  84. are destroyed (i.e.@: the input operands plus an extra limb past the end of
  85. each).
  86. Compatibility note: GMP 4.3.0 and 4.3.1 defined @math{S} less strictly.
  87. Earlier as well as later GMP releases define @math{S} as described here.
  88. @end deftypefun
  89. @deftypefun mp_size_t mpn_sqrtrem (mp_limb_t *@var{r1p}, mp_limb_t *@var{r2p}, const mp_limb_t *@var{sp}, mp_size_t @var{n})
  90. Compute the square root of @{@var{sp}, @var{n}@} and put the result at
  91. @{@var{r1p}, @math{@GMPceil{@var{n}/2}}@} and the remainder at @{@var{r2p},
  92. @var{retval}@}.  @var{r2p} needs space for @var{n} limbs, but the return value
  93. indicates how many are produced.
  94. The most significant limb of @{@var{sp}, @var{n}@} must be non-zero.  The
  95. areas @{@var{r1p}, @math{@GMPceil{@var{n}/2}}@} and @{@var{sp}, @var{n}@} must
  96. be completely separate.  The areas @{@var{r2p}, @var{n}@} and @{@var{sp},
  97. @var{n}@} must be either identical or completely separate.
  98. If the remainder is not wanted then @var{r2p} can be @code{NULL}, and in this
  99. case the return value is zero or non-zero according to whether the remainder
  100. would have been zero or non-zero.
  101. A return value of zero indicates a perfect square.  See also
  102. @code{mpz_perfect_square_p}.
  103. @end deftypefun
  104. @deftypefun mp_size_t mpn_get_str (unsigned char *@var{str}, int @var{base}, mp_limb_t *@var{s1p}, mp_size_t @var{s1n})
  105. Convert @{@var{s1p}, @var{s1n}@} to a raw unsigned char array at @var{str} in
  106. base @var{base}, and return the number of characters produced.  There may be
  107. leading zeros in the string.  The string is not in ASCII; to convert it to
  108. printable format, add the ASCII codes for @samp{0} or @samp{A}, depending on
  109. the base and range.  @var{base} can vary from 2 to 256.
  110. The most significant limb of the input @{@var{s1p}, @var{s1n}@} must be
  111. non-zero.  The input @{@var{s1p}, @var{s1n}@} is clobbered, except when
  112. @var{base} is a power of 2, in which case it's unchanged.
  113. The area at @var{str} has to have space for the largest possible number
  114. represented by a @var{s1n} long limb array, plus one extra character.
  115. @end deftypefun
  116. @deftypefun mp_size_t mpn_set_str (mp_limb_t *@var{rp}, const unsigned char *@var{str}, size_t @var{strsize}, int @var{base})
  117. Convert bytes @{@var{str},@var{strsize}@} in the given @var{base} to limbs at
  118. @var{rp}.
  119. @math{@var{str}[0]} is the most significant byte and
  120. @math{@var{str}[@var{strsize}-1]} is the least significant.  Each byte should
  121. be a value in the range 0 to @math{@var{base}-1}, not an ASCII character.
  122. @var{base} can vary from 2 to 256.
  123. The return value is the number of limbs written to @var{rp}.  If the most
  124. significant input byte is non-zero then the high limb at @var{rp} will be
  125. non-zero, and only that exact number of limbs will be required there.
  126. If the most significant input byte is zero then there may be high zero limbs
  127. written to @var{rp} and included in the return value.
  128. @var{strsize} must be at least 1, and no overlap is permitted between
  129. @{@var{str},@var{strsize}@} and the result at @var{rp}.
  130. @end deftypefun
  131. @deftypefun {mp_bitcnt_t} mpn_scan0 (const mp_limb_t *@var{s1p}, mp_bitcnt_t @var{bit})
  132. Scan @var{s1p} from bit position @var{bit} for the next clear bit.
  133. It is required that there be a clear bit within the area at @var{s1p} at or
  134. beyond bit position @var{bit}, so that the function has something to return.
  135. @end deftypefun
  136. @deftypefun {mp_bitcnt_t} mpn_scan1 (const mp_limb_t *@var{s1p}, mp_bitcnt_t @var{bit})
  137. Scan @var{s1p} from bit position @var{bit} for the next set bit.
  138. It is required that there be a set bit within the area at @var{s1p} at or
  139. beyond bit position @var{bit}, so that the function has something to return.
  140. @end deftypefun
  141. @deftypefun void mpn_random (mp_limb_t *@var{r1p}, mp_size_t @var{r1n})
  142. @deftypefunx void mpn_random2 (mp_limb_t *@var{r1p}, mp_size_t @var{r1n})
  143. Generate a random number of length @var{r1n} and store it at @var{r1p}.  The
  144. most significant limb is always non-zero.  @code{mpn_random} generates
  145. uniformly distributed limb data, @code{mpn_random2} generates long strings of
  146. zeros and ones in the binary representation.
  147. @code{mpn_random2} is intended for testing the correctness of the @code{mpn}
  148. routines.
  149. @end deftypefun
  150. @deftypefun {mp_bitcnt_t} mpn_popcount (const mp_limb_t *@var{s1p}, mp_size_t @var{n})
  151. Count the number of set bits in @{@var{s1p}, @var{n}@}.
  152. @end deftypefun
  153. @deftypefun {mp_bitcnt_t} mpn_hamdist (const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  154. Compute the hamming distance between @{@var{s1p}, @var{n}@} and @{@var{s2p},
  155. @var{n}@}, which is the number of bit positions where the two operands have
  156. different bit values.
  157. @end deftypefun
  158. @deftypefun int mpn_perfect_square_p (const mp_limb_t *@var{s1p}, mp_size_t @var{n})
  159. Return non-zero iff @{@var{s1p}, @var{n}@} is a perfect square.
  160. @end deftypefun
  161. @deftypefun void mpn_and_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  162. Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and @{@var{s2p},
  163. @var{n}@}, and write the result to @{@var{rp}, @var{n}@}.
  164. @end deftypefun
  165. @deftypefun void mpn_ior_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  166. Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and
  167. @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}.
  168. @end deftypefun
  169. @deftypefun void mpn_xor_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  170. Perform the bitwise logical exclusive or of @{@var{s1p}, @var{n}@} and
  171. @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}.
  172. @end deftypefun
  173. @deftypefun void mpn_andn_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  174. Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and the bitwise
  175. complement of @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}.
  176. @end deftypefun
  177. @deftypefun void mpn_iorn_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  178. Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and the bitwise
  179. complement of @{@var{s2p}, @var{n}@}, and write the result to @{@var{rp}, @var{n}@}.
  180. @end deftypefun
  181. @deftypefun void mpn_nand_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  182. Perform the bitwise logical and of @{@var{s1p}, @var{n}@} and @{@var{s2p},
  183. @var{n}@}, and write the bitwise complement of the result to @{@var{rp}, @var{n}@}.
  184. @end deftypefun
  185. @deftypefun void mpn_nior_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  186. Perform the bitwise logical inclusive or of @{@var{s1p}, @var{n}@} and
  187. @{@var{s2p}, @var{n}@}, and write the bitwise complement of the result to
  188. @{@var{rp}, @var{n}@}.
  189. @end deftypefun
  190. @deftypefun void mpn_xnor_n (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, const mp_limb_t *@var{s2p}, mp_size_t @var{n})
  191. Perform the bitwise logical exclusive or of @{@var{s1p}, @var{n}@} and
  192. @{@var{s2p}, @var{n}@}, and write the bitwise complement of the result to
  193. @{@var{rp}, @var{n}@}.
  194. @end deftypefun
  195. @deftypefun void mpn_com (mp_limb_t *@var{rp}, const mp_limb_t *@var{sp}, mp_size_t @var{n})
  196. Perform the bitwise complement of @{@var{sp}, @var{n}@}, and write the result
  197. to @{@var{rp}, @var{n}@}.
  198. @end deftypefun
  199. @deftypefun void mpn_copyi (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n})
  200. Copy from @{@var{s1p}, @var{n}@} to @{@var{rp}, @var{n}@}, increasingly.
  201. @end deftypefun
  202. @deftypefun void mpn_copyd (mp_limb_t *@var{rp}, const mp_limb_t *@var{s1p}, mp_size_t @var{n})
  203. Copy from @{@var{s1p}, @var{n}@} to @{@var{rp}, @var{n}@}, decreasingly.
  204. @end deftypefun
  205. @deftypefun void mpn_zero (mp_limb_t *@var{rp}, mp_size_t @var{n})
  206. Zero @{@var{rp}, @var{n}@}.
  207. @end deftypefun
  208. @sp 1
  209. @section Nails
  210. @cindex Nails
  211. @strong{Everything in this section is highly experimental and may disappear or
  212. be subject to incompatible changes in a future version of GMP.}
  213. Nails are an experimental feature whereby a few bits are left unused at the
  214. top of each @code{mp_limb_t}.  This can significantly improve carry handling
  215. on some processors.
  216. All the @code{mpn} functions accepting limb data will expect the nail bits to
  217. be zero on entry, and will return data with the nails similarly all zero.
  218. This applies both to limb vectors and to single limb arguments.
  219. Nails can be enabled by configuring with @samp{--enable-nails}.  By default
  220. the number of bits will be chosen according to what suits the host processor,
  221. but a particular number can be selected with @samp{--enable-nails=N}.
  222. At the mpn level, a nail build is neither source nor binary compatible with a
  223. non-nail build, strictly speaking.  But programs acting on limbs only through
  224. the mpn functions are likely to work equally well with either build, and
  225. judicious use of the definitions below should make any program compatible with
  226. either build, at the source level.
  227. For the higher level routines, meaning @code{mpz} etc, a nail build should be
  228. fully source and binary compatible with a non-nail build.
  229. @defmac GMP_NAIL_BITS
  230. @defmacx GMP_NUMB_BITS
  231. @defmacx GMP_LIMB_BITS
  232. @code{GMP_NAIL_BITS} is the number of nail bits, or 0 when nails are not in
  233. use.  @code{GMP_NUMB_BITS} is the number of data bits in a limb.
  234. @code{GMP_LIMB_BITS} is the total number of bits in an @code{mp_limb_t}.  In
  235. all cases
  236. @example
  237. GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS
  238. @end example
  239. @end defmac
  240. @defmac GMP_NAIL_MASK
  241. @defmacx GMP_NUMB_MASK
  242. Bit masks for the nail and number parts of a limb.  @code{GMP_NAIL_MASK} is 0
  243. when nails are not in use.
  244. @code{GMP_NAIL_MASK} is not often needed, since the nail part can be obtained
  245. with @code{x >> GMP_NUMB_BITS}, and that means one less large constant, which
  246. can help various RISC chips.
  247. @end defmac
  248. @defmac GMP_NUMB_MAX
  249. The maximum value that can be stored in the number part of a limb.  This is
  250. the same as @code{GMP_NUMB_MASK}, but can be used for clarity when doing
  251. comparisons rather than bit-wise operations.
  252. @end defmac
  253. The term ``nails'' comes from finger or toe nails, which are at the ends of a
  254. limb (arm or leg).  ``numb'' is short for number, but is also how the
  255. developers felt after trying for a long time to come up with sensible names
  256. for these things.
  257. In the future (the distant future most likely) a non-zero nail might be
  258. permitted, giving non-unique representations for numbers in a limb vector.
  259. This would help vector processors since carries would only ever need to
  260. propagate one or two limbs.
  261. @node Random Number Functions, Formatted Output, Low-level Functions, Top
  262. @chapter Random Number Functions
  263. @cindex Random number functions
  264. Sequences of pseudo-random numbers in GMP are generated using a variable of
  265. type @code{gmp_randstate_t}, which holds an algorithm selection and a current
  266. state.  Such a variable must be initialized by a call to one of the
  267. @code{gmp_randinit} functions, and can be seeded with one of the
  268. @code{gmp_randseed} functions.
  269. The functions actually generating random numbers are described in @ref{Integer
  270. Random Numbers}, and @ref{Miscellaneous Float Functions}.
  271. The older style random number functions don't accept a @code{gmp_randstate_t}
  272. parameter but instead share a global variable of that type.  They use a
  273. default algorithm and are currently not seeded (though perhaps that will
  274. change in the future).  The new functions accepting a @code{gmp_randstate_t}
  275. are recommended for applications that care about randomness.
  276. @menu
  277. * Random State Initialization::
  278. * Random State Seeding::
  279. * Random State Miscellaneous::
  280. @end menu
  281. @node Random State Initialization, Random State Seeding, Random Number Functions, Random Number Functions
  282. @section Random State Initialization
  283. @cindex Random number state
  284. @cindex Initialization functions
  285. @deftypefun void gmp_randinit_default (gmp_randstate_t @var{state})
  286. Initialize @var{state} with a default algorithm.  This will be a compromise
  287. between speed and randomness, and is recommended for applications with no
  288. special requirements.  Currently this is @code{gmp_randinit_mt}.
  289. @end deftypefun
  290. @deftypefun void gmp_randinit_mt (gmp_randstate_t @var{state})
  291. @cindex Mersenne twister random numbers
  292. Initialize @var{state} for a Mersenne Twister algorithm.  This algorithm is
  293. fast and has good randomness properties.
  294. @end deftypefun
  295. @deftypefun void gmp_randinit_lc_2exp (gmp_randstate_t @var{state}, mpz_t @var{a}, @w{unsigned long @var{c}}, @w{mp_bitcnt_t @var{m2exp}})
  296. @cindex Linear congruential random numbers
  297. Initialize @var{state} with a linear congruential algorithm @m{X = (@var{a}X +
  298. @var{c}) @bmod 2^{m2exp}, X = (@var{a}*X + @var{c}) mod 2^@var{m2exp}}.
  299. The low bits of @math{X} in this algorithm are not very random.  The least
  300. significant bit will have a period no more than 2, and the second bit no more
  301. than 4, etc.  For this reason only the high half of each @math{X} is actually
  302. used.
  303. When a random number of more than @math{@var{m2exp}/2} bits is to be
  304. generated, multiple iterations of the recurrence are used and the results
  305. concatenated.
  306. @end deftypefun
  307. @deftypefun int gmp_randinit_lc_2exp_size (gmp_randstate_t @var{state}, mp_bitcnt_t @var{size})
  308. @cindex Linear congruential random numbers
  309. Initialize @var{state} for a linear congruential algorithm as per
  310. @code{gmp_randinit_lc_2exp}.  @var{a}, @var{c} and @var{m2exp} are selected
  311. from a table, chosen so that @var{size} bits (or more) of each @math{X} will
  312. be used, ie.@: @math{@var{m2exp}/2 @ge{} @var{size}}.
  313. If successful the return value is non-zero.  If @var{size} is bigger than the
  314. table data provides then the return value is zero.  The maximum @var{size}
  315. currently supported is 128.
  316. @end deftypefun
  317. @deftypefun void gmp_randinit_set (gmp_randstate_t @var{rop}, gmp_randstate_t @var{op})
  318. Initialize @var{rop} with a copy of the algorithm and state from @var{op}.
  319. @end deftypefun
  320. @c  Although gmp_randinit, gmp_errno and related constants are obsolete, we
  321. @c  still put @findex entries for them, since they're still documented and
  322. @c  someone might be looking them up when perusing old application code.
  323. @deftypefun void gmp_randinit (gmp_randstate_t @var{state}, @w{gmp_randalg_t @var{alg}}, @dots{})
  324. @strong{This function is obsolete.}
  325. @findex GMP_RAND_ALG_LC
  326. @findex GMP_RAND_ALG_DEFAULT
  327. Initialize @var{state} with an algorithm selected by @var{alg}.  The only
  328. choice is @code{GMP_RAND_ALG_LC}, which is @code{gmp_randinit_lc_2exp_size}
  329. described above.  A third parameter of type @code{unsigned long} is required,
  330. this is the @var{size} for that function.  @code{GMP_RAND_ALG_DEFAULT} or 0
  331. are the same as @code{GMP_RAND_ALG_LC}.
  332. @c  For reference, this is the only place gmp_errno has been documented, and
  333. @c  due to being non thread safe we won't be adding to it's uses.
  334. @findex gmp_errno
  335. @findex GMP_ERROR_UNSUPPORTED_ARGUMENT
  336. @findex GMP_ERROR_INVALID_ARGUMENT
  337. @code{gmp_randinit} sets bits in the global variable @code{gmp_errno} to
  338. indicate an error.  @code{GMP_ERROR_UNSUPPORTED_ARGUMENT} if @var{alg} is
  339. unsupported, or @code{GMP_ERROR_INVALID_ARGUMENT} if the @var{size} parameter
  340. is too big.  It may be noted this error reporting is not thread safe (a good
  341. reason to use @code{gmp_randinit_lc_2exp_size} instead).
  342. @end deftypefun
  343. @deftypefun void gmp_randclear (gmp_randstate_t @var{state})
  344. Free all memory occupied by @var{state}.
  345. @end deftypefun
  346. @node Random State Seeding, Random State Miscellaneous, Random State Initialization, Random Number Functions
  347. @section Random State Seeding
  348. @cindex Random number seeding
  349. @cindex Seeding random numbers
  350. @deftypefun void gmp_randseed (gmp_randstate_t @var{state}, mpz_t @var{seed})
  351. @deftypefunx void gmp_randseed_ui (gmp_randstate_t @var{state}, @w{unsigned long int @var{seed}})
  352. Set an initial seed value into @var{state}.
  353. The size of a seed determines how many different sequences of random numbers
  354. that it's possible to generate.  The ``quality'' of the seed is the randomness
  355. of a given seed compared to the previous seed used, and this affects the
  356. randomness of separate number sequences.  The method for choosing a seed is
  357. critical if the generated numbers are to be used for important applications,
  358. such as generating cryptographic keys.
  359. Traditionally the system time has been used to seed, but care needs to be
  360. taken with this.  If an application seeds often and the resolution of the
  361. system clock is low, then the same sequence of numbers might be repeated.
  362. Also, the system time is quite easy to guess, so if unpredictability is
  363. required then it should definitely not be the only source for the seed value.
  364. On some systems there's a special device @file{/dev/random} which provides
  365. random data better suited for use as a seed.
  366. @end deftypefun
  367. @node Random State Miscellaneous,  , Random State Seeding, Random Number Functions
  368. @section Random State Miscellaneous
  369. @deftypefun {unsigned long} gmp_urandomb_ui (gmp_randstate_t @var{state}, unsigned long @var{n})
  370. Return a uniformly distributed random number of @var{n} bits, ie.@: in the
  371. range 0 to @m{2^n-1,2^@var{n}-1} inclusive.  @var{n} must be less than or
  372. equal to the number of bits in an @code{unsigned long}.
  373. @end deftypefun
  374. @deftypefun {unsigned long} gmp_urandomm_ui (gmp_randstate_t @var{state}, unsigned long @var{n})
  375. Return a uniformly distributed random number in the range 0 to
  376. @math{@var{n}-1}, inclusive.
  377. @end deftypefun
  378. @node Formatted Output, Formatted Input, Random Number Functions, Top
  379. @chapter Formatted Output
  380. @cindex Formatted output
  381. @cindex @code{printf} formatted output
  382. @menu
  383. * Formatted Output Strings::
  384. * Formatted Output Functions::
  385. * C++ Formatted Output::
  386. @end menu
  387. @node Formatted Output Strings, Formatted Output Functions, Formatted Output, Formatted Output
  388. @section Format Strings
  389. @code{gmp_printf} and friends accept format strings similar to the standard C
  390. @code{printf} (@pxref{Formatted Output,, Formatted Output, libc, The GNU C
  391. Library Reference Manual}).  A format specification is of the form
  392. @example
  393. % [flags] [width] [.[precision]] [type] conv
  394. @end example
  395. GMP adds types @samp{Z}, @samp{Q} and @samp{F} for @code{mpz_t}, @code{mpq_t}
  396. and @code{mpf_t} respectively, @samp{M} for @code{mp_limb_t}, and @samp{N} for
  397. an @code{mp_limb_t} array.  @samp{Z}, @samp{Q}, @samp{M} and @samp{N} behave
  398. like integers.  @samp{Q} will print a @samp{/} and a denominator, if needed.
  399. @samp{F} behaves like a float.  For example,
  400. @example
  401. mpz_t z;
  402. gmp_printf ("%s is an mpz %Zdn", "here", z);
  403. mpq_t q;
  404. gmp_printf ("a hex rational: %#40Qxn", q);
  405. mpf_t f;
  406. int   n;
  407. gmp_printf ("fixed point mpf %.*Ff with %d digitsn", n, f, n);
  408. mp_limb_t l;
  409. gmp_printf ("limb %Mun", l);
  410. const mp_limb_t *ptr;
  411. mp_size_t       size;
  412. gmp_printf ("limb array %Nxn", ptr, size);
  413. @end example
  414. For @samp{N} the limbs are expected least significant first, as per the
  415. @code{mpn} functions (@pxref{Low-level Functions}).  A negative size can be
  416. given to print the value as a negative.
  417. All the standard C @code{printf} types behave the same as the C library
  418. @code{printf}, and can be freely intermixed with the GMP extensions.  In the
  419. current implementation the standard parts of the format string are simply
  420. handed to @code{printf} and only the GMP extensions handled directly.
  421. The flags accepted are as follows.  GLIBC style @nisamp{'} is only for the
  422. standard C types (not the GMP types), and only if the C library supports it.
  423. @quotation
  424. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  425. @item @nicode{0} @tab pad with zeros (rather than spaces)
  426. @item @nicode{#} @tab show the base with @samp{0x}, @samp{0X} or @samp{0}
  427. @item @nicode{+} @tab always show a sign
  428. @item (space)    @tab show a space or a @samp{-} sign
  429. @item @nicode{'} @tab group digits, GLIBC style (not GMP types)
  430. @end multitable
  431. @end quotation
  432. The optional width and precision can be given as a number within the format
  433. string, or as a @samp{*} to take an extra parameter of type @code{int}, the
  434. same as the standard @code{printf}.
  435. The standard types accepted are as follows.  @samp{h} and @samp{l} are
  436. portable, the rest will depend on the compiler (or include files) for the type
  437. and the C library for the output.
  438. @quotation
  439. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  440. @item @nicode{h}  @tab @nicode{short}
  441. @item @nicode{hh} @tab @nicode{char}
  442. @item @nicode{j}  @tab @nicode{intmax_t} or @nicode{uintmax_t}
  443. @item @nicode{l}  @tab @nicode{long} or @nicode{wchar_t}
  444. @item @nicode{ll} @tab @nicode{long long}
  445. @item @nicode{L}  @tab @nicode{long double}
  446. @item @nicode{q}  @tab @nicode{quad_t} or @nicode{u_quad_t}
  447. @item @nicode{t}  @tab @nicode{ptrdiff_t}
  448. @item @nicode{z}  @tab @nicode{size_t}
  449. @end multitable
  450. @end quotation
  451. @noindent
  452. The GMP types are
  453. @quotation
  454. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  455. @item @nicode{F}  @tab @nicode{mpf_t}, float conversions
  456. @item @nicode{Q}  @tab @nicode{mpq_t}, integer conversions
  457. @item @nicode{M}  @tab @nicode{mp_limb_t}, integer conversions
  458. @item @nicode{N}  @tab @nicode{mp_limb_t} array, integer conversions
  459. @item @nicode{Z}  @tab @nicode{mpz_t}, integer conversions
  460. @end multitable
  461. @end quotation
  462. The conversions accepted are as follows.  @samp{a} and @samp{A} are always
  463. supported for @code{mpf_t} but depend on the C library for standard C float
  464. types.  @samp{m} and @samp{p} depend on the C library.
  465. @quotation
  466. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  467. @item @nicode{a} @nicode{A} @tab hex floats, C99 style
  468. @item @nicode{c}            @tab character
  469. @item @nicode{d}            @tab decimal integer
  470. @item @nicode{e} @nicode{E} @tab scientific format float
  471. @item @nicode{f}            @tab fixed point float
  472. @item @nicode{i}            @tab same as @nicode{d}
  473. @item @nicode{g} @nicode{G} @tab fixed or scientific float
  474. @item @nicode{m}            @tab @code{strerror} string, GLIBC style
  475. @item @nicode{n}            @tab store characters written so far
  476. @item @nicode{o}            @tab octal integer
  477. @item @nicode{p}            @tab pointer
  478. @item @nicode{s}            @tab string
  479. @item @nicode{u}            @tab unsigned integer
  480. @item @nicode{x} @nicode{X} @tab hex integer
  481. @end multitable
  482. @end quotation
  483. @samp{o}, @samp{x} and @samp{X} are unsigned for the standard C types, but for
  484. types @samp{Z}, @samp{Q} and @samp{N} they are signed.  @samp{u} is not
  485. meaningful for @samp{Z}, @samp{Q} and @samp{N}.
  486. @samp{M} is a proxy for the C library @samp{l} or @samp{L}, according to the
  487. size of @code{mp_limb_t}.  Unsigned conversions will be usual, but a signed
  488. conversion can be used and will interpret the value as a twos complement
  489. negative.
  490. @samp{n} can be used with any type, even the GMP types.
  491. Other types or conversions that might be accepted by the C library
  492. @code{printf} cannot be used through @code{gmp_printf}, this includes for
  493. instance extensions registered with GLIBC @code{register_printf_function}.
  494. Also currently there's no support for POSIX @samp{$} style numbered arguments
  495. (perhaps this will be added in the future).
  496. The precision field has it's usual meaning for integer @samp{Z} and float
  497. @samp{F} types, but is currently undefined for @samp{Q} and should not be used
  498. with that.
  499. @code{mpf_t} conversions only ever generate as many digits as can be
  500. accurately represented by the operand, the same as @code{mpf_get_str} does.
  501. Zeros will be used if necessary to pad to the requested precision.  This
  502. happens even for an @samp{f} conversion of an @code{mpf_t} which is an
  503. integer, for instance @math{2^@W{1024}} in an @code{mpf_t} of 128 bits
  504. precision will only produce about 40 digits, then pad with zeros to the
  505. decimal point.  An empty precision field like @samp{%.Fe} or @samp{%.Ff} can
  506. be used to specifically request just the significant digits.
  507. The decimal point character (or string) is taken from the current locale
  508. settings on systems which provide @code{localeconv} (@pxref{Locales,, Locales
  509. and Internationalization, libc, The GNU C Library Reference Manual}).  The C
  510. library will normally do the same for standard float output.
  511. The format string is only interpreted as plain @code{char}s, multibyte
  512. characters are not recognised.  Perhaps this will change in the future.
  513. @node Formatted Output Functions, C++ Formatted Output, Formatted Output Strings, Formatted Output
  514. @section Functions
  515. @cindex Output functions
  516. Each of the following functions is similar to the corresponding C library
  517. function.  The basic @code{printf} forms take a variable argument list.  The
  518. @code{vprintf} forms take an argument pointer, see @ref{Variadic Functions,,
  519. Variadic Functions, libc, The GNU C Library Reference Manual}, or @samp{man 3
  520. va_start}.
  521. It should be emphasised that if a format string is invalid, or the arguments
  522. don't match what the format specifies, then the behaviour of any of these
  523. functions will be unpredictable.  GCC format string checking is not available,
  524. since it doesn't recognise the GMP extensions.
  525. The file based functions @code{gmp_printf} and @code{gmp_fprintf} will return
  526. @math{-1} to indicate a write error.  Output is not ``atomic'', so partial
  527. output may be produced if a write error occurs.  All the functions can return
  528. @math{-1} if the C library @code{printf} variant in use returns @math{-1}, but
  529. this shouldn't normally occur.
  530. @deftypefun int gmp_printf (const char *@var{fmt}, @dots{})
  531. @deftypefunx int gmp_vprintf (const char *@var{fmt}, va_list @var{ap})
  532. Print to the standard output @code{stdout}.  Return the number of characters
  533. written, or @math{-1} if an error occurred.
  534. @end deftypefun
  535. @deftypefun int gmp_fprintf (FILE *@var{fp}, const char *@var{fmt}, @dots{})
  536. @deftypefunx int gmp_vfprintf (FILE *@var{fp}, const char *@var{fmt}, va_list @var{ap})
  537. Print to the stream @var{fp}.  Return the number of characters written, or
  538. @math{-1} if an error occurred.
  539. @end deftypefun
  540. @deftypefun int gmp_sprintf (char *@var{buf}, const char *@var{fmt}, @dots{})
  541. @deftypefunx int gmp_vsprintf (char *@var{buf}, const char *@var{fmt}, va_list @var{ap})
  542. Form a null-terminated string in @var{buf}.  Return the number of characters
  543. written, excluding the terminating null.
  544. No overlap is permitted between the space at @var{buf} and the string
  545. @var{fmt}.
  546. These functions are not recommended, since there's no protection against
  547. exceeding the space available at @var{buf}.
  548. @end deftypefun
  549. @deftypefun int gmp_snprintf (char *@var{buf}, size_t @var{size}, const char *@var{fmt}, @dots{})
  550. @deftypefunx int gmp_vsnprintf (char *@var{buf}, size_t @var{size}, const char *@var{fmt}, va_list @var{ap})
  551. Form a null-terminated string in @var{buf}.  No more than @var{size} bytes
  552. will be written.  To get the full output, @var{size} must be enough for the
  553. string and null-terminator.
  554. The return value is the total number of characters which ought to have been
  555. produced, excluding the terminating null.  If @math{@var{retval} @ge{}
  556. @var{size}} then the actual output has been truncated to the first
  557. @math{@var{size}-1} characters, and a null appended.
  558. No overlap is permitted between the region @{@var{buf},@var{size}@} and the
  559. @var{fmt} string.
  560. Notice the return value is in ISO C99 @code{snprintf} style.  This is so even
  561. if the C library @code{vsnprintf} is the older GLIBC 2.0.x style.
  562. @end deftypefun
  563. @deftypefun int gmp_asprintf (char **@var{pp}, const char *@var{fmt}, @dots{})
  564. @deftypefunx int gmp_vasprintf (char **@var{pp}, const char *@var{fmt}, va_list @var{ap})
  565. Form a null-terminated string in a block of memory obtained from the current
  566. memory allocation function (@pxref{Custom Allocation}).  The block will be the
  567. size of the string and null-terminator.  The address of the block in stored to
  568. *@var{pp}.  The return value is the number of characters produced, excluding
  569. the null-terminator.
  570. Unlike the C library @code{asprintf}, @code{gmp_asprintf} doesn't return
  571. @math{-1} if there's no more memory available, it lets the current allocation
  572. function handle that.
  573. @end deftypefun
  574. @deftypefun int gmp_obstack_printf (struct obstack *@var{ob}, const char *@var{fmt}, @dots{})
  575. @deftypefunx int gmp_obstack_vprintf (struct obstack *@var{ob}, const char *@var{fmt}, va_list @var{ap})
  576. @cindex @code{obstack} output
  577. Append to the current object in @var{ob}.  The return value is the number of
  578. characters written.  A null-terminator is not written.
  579. @var{fmt} cannot be within the current object in @var{ob}, since that object
  580. might move as it grows.
  581. These functions are available only when the C library provides the obstack
  582. feature, which probably means only on GNU systems, see @ref{Obstacks,,
  583. Obstacks, libc, The GNU C Library Reference Manual}.
  584. @end deftypefun
  585. @node C++ Formatted Output,  , Formatted Output Functions, Formatted Output
  586. @section C++ Formatted Output
  587. @cindex C++ @code{ostream} output
  588. @cindex @code{ostream} output
  589. The following functions are provided in @file{libgmpxx} (@pxref{Headers and
  590. Libraries}), which is built if C++ support is enabled (@pxref{Build Options}).
  591. Prototypes are available from @code{<gmp.h>}.
  592. @deftypefun ostream& operator<< (ostream& @var{stream}, mpz_t @var{op})
  593. Print @var{op} to @var{stream}, using its @code{ios} formatting settings.
  594. @code{ios::width} is reset to 0 after output, the same as the standard
  595. @code{ostream operator<<} routines do.
  596. In hex or octal, @var{op} is printed as a signed number, the same as for
  597. decimal.  This is unlike the standard @code{operator<<} routines on @code{int}
  598. etc, which instead give twos complement.
  599. @end deftypefun
  600. @deftypefun ostream& operator<< (ostream& @var{stream}, mpq_t @var{op})
  601. Print @var{op} to @var{stream}, using its @code{ios} formatting settings.
  602. @code{ios::width} is reset to 0 after output, the same as the standard
  603. @code{ostream operator<<} routines do.
  604. Output will be a fraction like @samp{5/9}, or if the denominator is 1 then
  605. just a plain integer like @samp{123}.
  606. In hex or octal, @var{op} is printed as a signed value, the same as for
  607. decimal.  If @code{ios::showbase} is set then a base indicator is shown on
  608. both the numerator and denominator (if the denominator is required).
  609. @end deftypefun
  610. @deftypefun ostream& operator<< (ostream& @var{stream}, mpf_t @var{op})
  611. Print @var{op} to @var{stream}, using its @code{ios} formatting settings.
  612. @code{ios::width} is reset to 0 after output, the same as the standard
  613. @code{ostream operator<<} routines do.
  614. The decimal point follows the standard library float @code{operator<<}, which
  615. on recent systems means the @code{std::locale} imbued on @var{stream}.
  616. Hex and octal are supported, unlike the standard @code{operator<<} on
  617. @code{double}.  The mantissa will be in hex or octal, the exponent will be in
  618. decimal.  For hex the exponent delimiter is an @samp{@@}.  This is as per
  619. @code{mpf_out_str}.
  620. @code{ios::showbase} is supported, and will put a base on the mantissa, for
  621. example hex @samp{0x1.8} or @samp{0x0.8}, or octal @samp{01.4} or @samp{00.4}.
  622. This last form is slightly strange, but at least differentiates itself from
  623. decimal.
  624. @end deftypefun
  625. These operators mean that GMP types can be printed in the usual C++ way, for
  626. example,
  627. @example
  628. mpz_t  z;
  629. int    n;
  630. ...
  631. cout << "iteration " << n << " value " << z << "n";
  632. @end example
  633. But note that @code{ostream} output (and @code{istream} input, @pxref{C++
  634. Formatted Input}) is the only overloading available for the GMP types and that
  635. for instance using @code{+} with an @code{mpz_t} will have unpredictable
  636. results.  For classes with overloading, see @ref{C++ Class Interface}.
  637. @node Formatted Input, C++ Class Interface, Formatted Output, Top
  638. @chapter Formatted Input
  639. @cindex Formatted input
  640. @cindex @code{scanf} formatted input
  641. @menu
  642. * Formatted Input Strings::
  643. * Formatted Input Functions::
  644. * C++ Formatted Input::
  645. @end menu
  646. @node Formatted Input Strings, Formatted Input Functions, Formatted Input, Formatted Input
  647. @section Formatted Input Strings
  648. @code{gmp_scanf} and friends accept format strings similar to the standard C
  649. @code{scanf} (@pxref{Formatted Input,, Formatted Input, libc, The GNU C
  650. Library Reference Manual}).  A format specification is of the form
  651. @example
  652. % [flags] [width] [type] conv
  653. @end example
  654. GMP adds types @samp{Z}, @samp{Q} and @samp{F} for @code{mpz_t}, @code{mpq_t}
  655. and @code{mpf_t} respectively.  @samp{Z} and @samp{Q} behave like integers.
  656. @samp{Q} will read a @samp{/} and a denominator, if present.  @samp{F} behaves
  657. like a float.
  658. GMP variables don't require an @code{&} when passed to @code{gmp_scanf}, since
  659. they're already ``call-by-reference''.  For example,
  660. @example
  661. /* to read say "a(5) = 1234" */
  662. int   n;
  663. mpz_t z;
  664. gmp_scanf ("a(%d) = %Zdn", &n, z);
  665. mpq_t q1, q2;
  666. gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2);
  667. /* to read say "topleft (1.55,-2.66)" */
  668. mpf_t x, y;
  669. char  buf[32];
  670. gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y);
  671. @end example
  672. All the standard C @code{scanf} types behave the same as in the C library
  673. @code{scanf}, and can be freely intermixed with the GMP extensions.  In the
  674. current implementation the standard parts of the format string are simply
  675. handed to @code{scanf} and only the GMP extensions handled directly.
  676. The flags accepted are as follows.  @samp{a} and @samp{'} will depend on
  677. support from the C library, and @samp{'} cannot be used with GMP types.
  678. @quotation
  679. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  680. @item @nicode{*} @tab read but don't store
  681. @item @nicode{a} @tab allocate a buffer (string conversions)
  682. @item @nicode{'} @tab grouped digits, GLIBC style (not GMP types)
  683. @end multitable
  684. @end quotation
  685. The standard types accepted are as follows.  @samp{h} and @samp{l} are
  686. portable, the rest will depend on the compiler (or include files) for the type
  687. and the C library for the input.
  688. @quotation
  689. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  690. @item @nicode{h}  @tab @nicode{short}
  691. @item @nicode{hh} @tab @nicode{char}
  692. @item @nicode{j}  @tab @nicode{intmax_t} or @nicode{uintmax_t}
  693. @item @nicode{l}  @tab @nicode{long int}, @nicode{double} or @nicode{wchar_t}
  694. @item @nicode{ll} @tab @nicode{long long}
  695. @item @nicode{L}  @tab @nicode{long double}
  696. @item @nicode{q}  @tab @nicode{quad_t} or @nicode{u_quad_t}
  697. @item @nicode{t}  @tab @nicode{ptrdiff_t}
  698. @item @nicode{z}  @tab @nicode{size_t}
  699. @end multitable
  700. @end quotation
  701. @noindent
  702. The GMP types are
  703. @quotation
  704. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  705. @item @nicode{F}  @tab @nicode{mpf_t}, float conversions
  706. @item @nicode{Q}  @tab @nicode{mpq_t}, integer conversions
  707. @item @nicode{Z}  @tab @nicode{mpz_t}, integer conversions
  708. @end multitable
  709. @end quotation
  710. The conversions accepted are as follows.  @samp{p} and @samp{[} will depend on
  711. support from the C library, the rest are standard.
  712. @quotation
  713. @multitable {(space)} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  714. @item @nicode{c}            @tab character or characters
  715. @item @nicode{d}            @tab decimal integer
  716. @item @nicode{e} @nicode{E} @nicode{f} @nicode{g} @nicode{G}
  717.                             @tab float
  718. @item @nicode{i}            @tab integer with base indicator
  719. @item @nicode{n}            @tab characters read so far
  720. @item @nicode{o}            @tab octal integer
  721. @item @nicode{p}            @tab pointer
  722. @item @nicode{s}            @tab string of non-whitespace characters
  723. @item @nicode{u}            @tab decimal integer
  724. @item @nicode{x} @nicode{X} @tab hex integer
  725. @item @nicode{[}            @tab string of characters in a set
  726. @end multitable
  727. @end quotation
  728. @samp{e}, @samp{E}, @samp{f}, @samp{g} and @samp{G} are identical, they all
  729. read either fixed point or scientific format, and either upper or lower case
  730. @samp{e} for the exponent in scientific format.
  731. C99 style hex float format (@code{printf %a}, @pxref{Formatted Output
  732. Strings}) is always accepted for @code{mpf_t}, but for the standard float
  733. types it will depend on the C library.
  734. @samp{x} and @samp{X} are identical, both accept both upper and lower case
  735. hexadecimal.
  736. @samp{o}, @samp{u}, @samp{x} and @samp{X} all read positive or negative
  737. values.  For the standard C types these are described as ``unsigned''
  738. conversions, but that merely affects certain overflow handling, negatives are
  739. still allowed (per @code{strtoul}, @pxref{Parsing of Integers,, Parsing of
  740. Integers, libc, The GNU C Library Reference Manual}).  For GMP types there are
  741. no overflows, so @samp{d} and @samp{u} are identical.
  742. @samp{Q} type reads the numerator and (optional) denominator as given.  If the
  743. value might not be in canonical form then @code{mpq_canonicalize} must be
  744. called before using it in any calculations (@pxref{Rational Number
  745. Functions}).
  746. @samp{Qi} will read a base specification separately for the numerator and
  747. denominator.  For example @samp{0x10/11} would be 16/11, whereas
  748. @samp{0x10/0x11} would be 16/17.
  749. @samp{n} can be used with any of the types above, even the GMP types.
  750. @samp{*} to suppress assignment is allowed, though in that case it would do
  751. nothing at all.
  752. Other conversions or types that might be accepted by the C library
  753. @code{scanf} cannot be used through @code{gmp_scanf}.
  754. Whitespace is read and discarded before a field, except for @samp{c} and
  755. @samp{[} conversions.
  756. For float conversions, the decimal point character (or string) expected is
  757. taken from the current locale settings on systems which provide
  758. @code{localeconv} (@pxref{Locales,, Locales and Internationalization, libc,
  759. The GNU C Library Reference Manual}).  The C library will normally do the same
  760. for standard float input.
  761. The format string is only interpreted as plain @code{char}s, multibyte
  762. characters are not recognised.  Perhaps this will change in the future.
  763. @node Formatted Input Functions, C++ Formatted Input, Formatted Input Strings, Formatted Input
  764. @section Formatted Input Functions
  765. @cindex Input functions
  766. Each of the following functions is similar to the corresponding C library
  767. function.  The plain @code{scanf} forms take a variable argument list.  The
  768. @code{vscanf} forms take an argument pointer, see @ref{Variadic Functions,,
  769. Variadic Functions, libc, The GNU C Library Reference Manual}, or @samp{man 3
  770. va_start}.
  771. It should be emphasised that if a format string is invalid, or the arguments
  772. don't match what the format specifies, then the behaviour of any of these
  773. functions will be unpredictable.  GCC format string checking is not available,
  774. since it doesn't recognise the GMP extensions.
  775. No overlap is permitted between the @var{fmt} string and any of the results
  776. produced.
  777. @deftypefun int gmp_scanf (const char *@var{fmt}, @dots{})
  778. @deftypefunx int gmp_vscanf (const char *@var{fmt}, va_list @var{ap})
  779. Read from the standard input @code{stdin}.
  780. @end deftypefun
  781. @deftypefun int gmp_fscanf (FILE *@var{fp}, const char *@var{fmt}, @dots{})
  782. @deftypefunx int gmp_vfscanf (FILE *@var{fp}, const char *@var{fmt}, va_list @var{ap})
  783. Read from the stream @var{fp}.
  784. @end deftypefun
  785. @deftypefun int gmp_sscanf (const char *@var{s}, const char *@var{fmt}, @dots{})
  786. @deftypefunx int gmp_vsscanf (const char *@var{s}, const char *@var{fmt}, va_list @var{ap})
  787. Read from a null-terminated string @var{s}.
  788. @end deftypefun
  789. The return value from each of these functions is the same as the standard C99
  790. @code{scanf}, namely the number of fields successfully parsed and stored.
  791. @samp{%n} fields and fields read but suppressed by @samp{*} don't count
  792. towards the return value.
  793. If end of input (or a file error) is reached before a character for a field or
  794. a literal, and if no previous non-suppressed fields have matched, then the
  795. return value is @code{EOF} instead of 0.  A whitespace character in the format
  796. string is only an optional match and doesn't induce an @code{EOF} in this
  797. fashion.  Leading whitespace read and discarded for a field don't count as
  798. characters for that field.
  799. For the GMP types, input parsing follows C99 rules, namely one character of
  800. lookahead is used and characters are read while they continue to meet the
  801. format requirements.  If this doesn't provide a complete number then the
  802. function terminates, with that field not stored nor counted towards the return
  803. value.  For instance with @code{mpf_t} an input @samp{1.23e-XYZ} would be read
  804. up to the @samp{X} and that character pushed back since it's not a digit.  The
  805. string @samp{1.23e-} would then be considered invalid since an @samp{e} must
  806. be followed by at least one digit.
  807. For the standard C types, in the current implementation GMP calls the C
  808. library @code{scanf} functions, which might have looser rules about what
  809. constitutes a valid input.
  810. Note that @code{gmp_sscanf} is the same as @code{gmp_fscanf} and only does one
  811. character of lookahead when parsing.  Although clearly it could look at its
  812. entire input, it is deliberately made identical to @code{gmp_fscanf}, the same
  813. way C99 @code{sscanf} is the same as @code{fscanf}.
  814. @node C++ Formatted Input,  , Formatted Input Functions, Formatted Input
  815. @section C++ Formatted Input
  816. @cindex C++ @code{istream} input
  817. @cindex @code{istream} input
  818. The following functions are provided in @file{libgmpxx} (@pxref{Headers and
  819. Libraries}), which is built only if C++ support is enabled (@pxref{Build
  820. Options}).  Prototypes are available from @code{<gmp.h>}.
  821. @deftypefun istream& operator>> (istream& @var{stream}, mpz_t @var{rop})
  822. Read @var{rop} from @var{stream}, using its @code{ios} formatting settings.
  823. @end deftypefun
  824. @deftypefun istream& operator>> (istream& @var{stream}, mpq_t @var{rop})
  825. An integer like @samp{123} will be read, or a fraction like @samp{5/9}.  No
  826. whitespace is allowed around the @samp{/}.  If the fraction is not in
  827. canonical form then @code{mpq_canonicalize} must be called (@pxref{Rational
  828. Number Functions}) before operating on it.
  829. As per integer input, an @samp{0} or @samp{0x} base indicator is read when
  830. none of @code{ios::dec}, @code{ios::oct} or @code{ios::hex} are set.  This is
  831. done separately for numerator and denominator, so that for instance
  832. @samp{0x10/11} is @math{16/11} and @samp{0x10/0x11} is @math{16/17}.
  833. @end deftypefun
  834. @deftypefun istream& operator>> (istream& @var{stream}, mpf_t @var{rop})
  835. Read @var{rop} from @var{stream}, using its @code{ios} formatting settings.
  836. Hex or octal floats are not supported, but might be in the future, or perhaps
  837. it's best to accept only what the standard float @code{operator>>} does.
  838. @end deftypefun
  839. Note that digit grouping specified by the @code{istream} locale is currently
  840. not accepted.  Perhaps this will change in the future.
  841. @sp 1
  842. These operators mean that GMP types can be read in the usual C++ way, for
  843. example,
  844. @example
  845. mpz_t  z;
  846. ...
  847. cin >> z;
  848. @end example
  849. But note that @code{istream} input (and @code{ostream} output, @pxref{C++
  850. Formatted Output}) is the only overloading available for the GMP types and
  851. that for instance using @code{+} with an @code{mpz_t} will have unpredictable
  852. results.  For classes with overloading, see @ref{C++ Class Interface}.
  853. @node C++ Class Interface, BSD Compatible Functions, Formatted Input, Top
  854. @chapter C++ Class Interface
  855. @cindex C++ interface
  856. This chapter describes the C++ class based interface to GMP.
  857. All GMP C language types and functions can be used in C++ programs, since
  858. @file{gmp.h} has @code{extern "C"} qualifiers, but the class interface offers
  859. overloaded functions and operators which may be more convenient.
  860. Due to the implementation of this interface, a reasonably recent C++ compiler
  861. is required, one supporting namespaces, partial specialization of templates
  862. and member templates.  For GCC this means version 2.91 or later.
  863. @strong{Everything described in this chapter is to be considered preliminary
  864. and might be subject to incompatible changes if some unforeseen difficulty
  865. reveals itself.}
  866. @menu
  867. * C++ Interface General::
  868. * C++ Interface Integers::
  869. * C++ Interface Rationals::
  870. * C++ Interface Floats::
  871. * C++ Interface Random Numbers::
  872. * C++ Interface Limitations::
  873. @end menu
  874. @node C++ Interface General, C++ Interface Integers, C++ Class Interface, C++ Class Interface
  875. @section C++ Interface General
  876. @noindent
  877. All the C++ classes and functions are available with
  878. @cindex @code{gmpxx.h}
  879. @example
  880. #include <gmpxx.h>
  881. @end example
  882. Programs should be linked with the @file{libgmpxx} and @file{libgmp}
  883. libraries.  For example,
  884. @example
  885. g++ mycxxprog.cc -lgmpxx -lgmp
  886. @end example
  887. @noindent
  888. The classes defined are
  889. @deftp Class mpz_class
  890. @deftpx Class mpq_class
  891. @deftpx Class mpf_class
  892. @end deftp
  893. The standard operators and various standard functions are overloaded to allow
  894. arithmetic with these classes.  For example,
  895. @example
  896. int
  897. main (void)
  898. @{
  899.   mpz_class a, b, c;
  900.   a = 1234;
  901.   b = "-5678";
  902.   c = a+b;
  903.   cout << "sum is " << c << "n";
  904.   cout << "absolute value is " << abs(c) << "n";
  905.   return 0;
  906. @}
  907. @end example
  908. An important feature of the implementation is that an expression like
  909. @code{a=b+c} results in a single call to the corresponding @code{mpz_add},
  910. without using a temporary for the @code{b+c} part.  Expressions which by their
  911. nature imply intermediate values, like @code{a=b*c+d*e}, still use temporaries
  912. though.
  913. The classes can be freely intermixed in expressions, as can the classes and
  914. the standard types @code{long}, @code{unsigned long} and @code{double}.
  915. Smaller types like @code{int} or @code{float} can also be intermixed, since
  916. C++ will promote them.
  917. Note that @code{bool} is not accepted directly, but must be explicitly cast to
  918. an @code{int} first.  This is because C++ will automatically convert any
  919. pointer to a @code{bool}, so if GMP accepted @code{bool} it would make all
  920. sorts of invalid class and pointer combinations compile but almost certainly
  921. not do anything sensible.
  922. Conversions back from the classes to standard C++ types aren't done
  923. automatically, instead member functions like @code{get_si} are provided (see
  924. the following sections for details).
  925. Also there are no automatic conversions from the classes to the corresponding
  926. GMP C types, instead a reference to the underlying C object can be obtained
  927. with the following functions,
  928. @deftypefun mpz_t mpz_class::get_mpz_t ()
  929. @deftypefunx mpq_t mpq_class::get_mpq_t ()
  930. @deftypefunx mpf_t mpf_class::get_mpf_t ()
  931. @end deftypefun
  932. These can be used to call a C function which doesn't have a C++ class
  933. interface.  For example to set @code{a} to the GCD of @code{b} and @code{c},
  934. @example
  935. mpz_class a, b, c;
  936. ...
  937. mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t());
  938. @end example
  939. In the other direction, a class can be initialized from the corresponding GMP
  940. C type, or assigned to if an explicit constructor is used.  In both cases this
  941. makes a copy of the value, it doesn't create any sort of association.  For
  942. example,
  943. @example
  944. mpz_t z;
  945. // ... init and calculate z ...
  946. mpz_class x(z);
  947. mpz_class y;
  948. y = mpz_class (z);
  949. @end example
  950. There are no namespace setups in @file{gmpxx.h}, all types and functions are
  951. simply put into the global namespace.  This is what @file{gmp.h} has done in
  952. the past, and continues to do for compatibility.  The extras provided by
  953. @file{gmpxx.h} follow GMP naming conventions and are unlikely to clash with
  954. anything.
  955. @node C++ Interface Integers, C++ Interface Rationals, C++ Interface General, C++ Class Interface
  956. @section C++ Interface Integers
  957. @deftypefun void mpz_class::mpz_class (type @var{n})
  958. Construct an @code{mpz_class}.  All the standard C++ types may be used, except
  959. @code{long long} and @code{long double}, and all the GMP C++ classes can be
  960. used.  Any necessary conversion follows the corresponding C function, for
  961. example @code{double} follows @code{mpz_set_d} (@pxref{Assigning Integers}).
  962. @end deftypefun
  963. @deftypefun void mpz_class::mpz_class (mpz_t @var{z})
  964. Construct an @code{mpz_class} from an @code{mpz_t}.  The value in @var{z} is
  965. copied into the new @code{mpz_class}, there won't be any permanent association
  966. between it and @var{z}.
  967. @end deftypefun
  968. @deftypefun void mpz_class::mpz_class (const char *@var{s})
  969. @deftypefunx void mpz_class::mpz_class (const char *@var{s}, int @var{base} = 0)
  970. @deftypefunx void mpz_class::mpz_class (const string& @var{s})
  971. @deftypefunx void mpz_class::mpz_class (const string& @var{s}, int @var{base} = 0)
  972. Construct an @code{mpz_class} converted from a string using @code{mpz_set_str}
  973. (@pxref{Assigning Integers}).
  974. If the string is not a valid integer, an @code{std::invalid_argument}
  975. exception is thrown.  The same applies to @code{operator=}.
  976. @end deftypefun
  977. @deftypefun mpz_class operator/ (mpz_class @var{a}, mpz_class @var{d})
  978. @deftypefunx mpz_class operator% (mpz_class @var{a}, mpz_class @var{d})
  979. Divisions involving @code{mpz_class} round towards zero, as per the
  980. @code{mpz_tdiv_q} and @code{mpz_tdiv_r} functions (@pxref{Integer Division}).
  981. This is the same as the C99 @code{/} and @code{%} operators.
  982. The @code{mpz_fdiv@dots{}} or @code{mpz_cdiv@dots{}} functions can always be called
  983. directly if desired.  For example,
  984. @example
  985. mpz_class q, a, d;
  986. ...
  987. mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t());
  988. @end example
  989. @end deftypefun
  990. @deftypefun mpz_class abs (mpz_class @var{op1})
  991. @deftypefunx int cmp (mpz_class @var{op1}, type @var{op2})
  992. @deftypefunx int cmp (type @var{op1}, mpz_class @var{op2})
  993. @maybepagebreak
  994. @deftypefunx bool mpz_class::fits_sint_p (void)
  995. @deftypefunx bool mpz_class::fits_slong_p (void)
  996. @deftypefunx bool mpz_class::fits_sshort_p (void)
  997. @maybepagebreak
  998. @deftypefunx bool mpz_class::fits_uint_p (void)
  999. @deftypefunx bool mpz_class::fits_ulong_p (void)
  1000. @deftypefunx bool mpz_class::fits_ushort_p (void)
  1001. @maybepagebreak
  1002. @deftypefunx double mpz_class::get_d (void)
  1003. @deftypefunx long mpz_class::get_si (void)
  1004. @deftypefunx string mpz_class::get_str (int @var{base} = 10)
  1005. @deftypefunx {unsigned long} mpz_class::get_ui (void)
  1006. @maybepagebreak
  1007. @deftypefunx int mpz_class::set_str (const char *@var{str}, int @var{base})
  1008. @deftypefunx int mpz_class::set_str (const string& @var{str}, int @var{base})
  1009. @deftypefunx int sgn (mpz_class @var{op})
  1010. @deftypefunx mpz_class sqrt (mpz_class @var{op})
  1011. These functions provide a C++ class interface to the corresponding GMP C
  1012. routines.
  1013. @code{cmp} can be used with any of the classes or the standard C++ types,
  1014. except @code{long long} and @code{long double}.
  1015. @end deftypefun
  1016. @sp 1
  1017. Overloaded operators for combinations of @code{mpz_class} and @code{double}
  1018. are provided for completeness, but it should be noted that if the given
  1019. @code{double} is not an integer then the way any rounding is done is currently
  1020. unspecified.  The rounding might take place at the start, in the middle, or at
  1021. the end of the operation, and it might change in the future.
  1022. Conversions between @code{mpz_class} and @code{double}, however, are defined
  1023. to follow the corresponding C functions @code{mpz_get_d} and @code{mpz_set_d}.
  1024. And comparisons are always made exactly, as per @code{mpz_cmp_d}.
  1025. @node C++ Interface Rationals, C++ Interface Floats, C++ Interface Integers, C++ Class Interface
  1026. @section C++ Interface Rationals
  1027. In all the following constructors, if a fraction is given then it should be in
  1028. canonical form, or if not then @code{mpq_class::canonicalize} called.
  1029. @deftypefun void mpq_class::mpq_class (type @var{op})
  1030. @deftypefunx void mpq_class::mpq_class (integer @var{num}, integer @var{den})
  1031. Construct an @code{mpq_class}.  The initial value can be a single value of any
  1032. type, or a pair of integers (@code{mpz_class} or standard C++ integer types)
  1033. representing a fraction, except that @code{long long} and @code{long double}
  1034. are not supported.  For example,
  1035. @example
  1036. mpq_class q (99);
  1037. mpq_class q (1.75);
  1038. mpq_class q (1, 3);
  1039. @end example
  1040. @end deftypefun
  1041. @deftypefun void mpq_class::mpq_class (mpq_t @var{q})
  1042. Construct an @code{mpq_class} from an @code{mpq_t}.  The value in @var{q} is
  1043. copied into the new @code{mpq_class}, there won't be any permanent association
  1044. between it and @var{q}.
  1045. @end deftypefun
  1046. @deftypefun void mpq_class::mpq_class (const char *@var{s})
  1047. @deftypefunx void mpq_class::mpq_class (const char *@var{s}, int @var{base} = 0)
  1048. @deftypefunx void mpq_class::mpq_class (const string& @var{s})
  1049. @deftypefunx void mpq_class::mpq_class (const string& @var{s}, int @var{base} = 0)
  1050. Construct an @code{mpq_class} converted from a string using @code{mpq_set_str}
  1051. (@pxref{Initializing Rationals}).
  1052. If the string is not a valid rational, an @code{std::invalid_argument}
  1053. exception is thrown.  The same applies to @code{operator=}.
  1054. @end deftypefun
  1055. @deftypefun void mpq_class::canonicalize ()
  1056. Put an @code{mpq_class} into canonical form, as per @ref{Rational Number
  1057. Functions}.  All arithmetic operators require their operands in canonical
  1058. form, and will return results in canonical form.
  1059. @end deftypefun
  1060. @deftypefun mpq_class abs (mpq_class @var{op})
  1061. @deftypefunx int cmp (mpq_class @var{op1}, type @var{op2})
  1062. @deftypefunx int cmp (type @var{op1}, mpq_class @var{op2})
  1063. @maybepagebreak
  1064. @deftypefunx double mpq_class::get_d (void)
  1065. @deftypefunx string mpq_class::get_str (int @var{base} = 10)
  1066. @maybepagebreak
  1067. @deftypefunx int mpq_class::set_str (const char *@var{str}, int @var{base})
  1068. @deftypefunx int mpq_class::set_str (const string& @var{str}, int @var{base})
  1069. @deftypefunx int sgn (mpq_class @var{op})
  1070. These functions provide a C++ class interface to the corresponding GMP C
  1071. routines.
  1072. @code{cmp} can be used with any of the classes or the standard C++ types,
  1073. except @code{long long} and @code{long double}.
  1074. @end deftypefun
  1075. @deftypefun {mpz_class&} mpq_class::get_num ()
  1076. @deftypefunx {mpz_class&} mpq_class::get_den ()
  1077. Get a reference to an @code{mpz_class} which is the numerator or denominator
  1078. of an @code{mpq_class}.  This can be used both for read and write access.  If
  1079. the object returned is modified, it modifies the original @code{mpq_class}.
  1080. If direct manipulation might produce a non-canonical value, then
  1081. @code{mpq_class::canonicalize} must be called before further operations.
  1082. @end deftypefun
  1083. @deftypefun mpz_t mpq_class::get_num_mpz_t ()
  1084. @deftypefunx mpz_t mpq_class::get_den_mpz_t ()
  1085. Get a reference to the underlying @code{mpz_t} numerator or denominator of an
  1086. @code{mpq_class}.  This can be passed to C functions expecting an
  1087. @code{mpz_t}.  Any modifications made to the @code{mpz_t} will modify the
  1088. original @code{mpq_class}.
  1089. If direct manipulation might produce a non-canonical value, then
  1090. @code{mpq_class::canonicalize} must be called before further operations.
  1091. @end deftypefun
  1092. @deftypefun istream& operator>> (istream& @var{stream}, mpq_class& @var{rop});
  1093. Read @var{rop} from @var{stream}, using its @code{ios} formatting settings,
  1094. the same as @code{mpq_t operator>>} (@pxref{C++ Formatted Input}).
  1095. If the @var{rop} read might not be in canonical form then
  1096. @code{mpq_class::canonicalize} must be called.
  1097. @end deftypefun
  1098. @node C++ Interface Floats, C++ Interface Random Numbers, C++ Interface Rationals, C++ Class Interface
  1099. @section C++ Interface Floats
  1100. When an expression requires the use of temporary intermediate @code{mpf_class}
  1101. values, like @code{f=g*h+x*y}, those temporaries will have the same precision
  1102. as the destination @code{f}.  Explicit constructors can be used if this
  1103. doesn't suit.
  1104. @deftypefun {} mpf_class::mpf_class (type @var{op})
  1105. @deftypefunx {} mpf_class::mpf_class (type @var{op}, unsigned long @var{prec})
  1106. Construct an @code{mpf_class}.  Any standard C++ type can be used, except
  1107. @code{long long} and @code{long double}, and any of the GMP C++ classes can be
  1108. used.
  1109. If @var{prec} is given, the initial precision is that value, in bits.  If
  1110. @var{prec} is not given, then the initial precision is determined by the type
  1111. of @var{op} given.  An @code{mpz_class}, @code{mpq_class}, or C++
  1112. builtin type will give the default @code{mpf} precision (@pxref{Initializing
  1113. Floats}).  An @code{mpf_class} or expression will give the precision of that
  1114. value.  The precision of a binary expression is the higher of the two
  1115. operands.
  1116. @example
  1117. mpf_class f(1.5);        // default precision
  1118. mpf_class f(1.5, 500);   // 500 bits (at least)
  1119. mpf_class f(x);          // precision of x
  1120. mpf_class f(abs(x));     // precision of x
  1121. mpf_class f(-g, 1000);   // 1000 bits (at least)
  1122. mpf_class f(x+y);        // greater of precisions of x and y
  1123. @end example
  1124. @end deftypefun
  1125. @deftypefun void mpf_class::mpf_class (const char *@var{s})
  1126. @deftypefunx void mpf_class::mpf_class (const char *@var{s}, unsigned long @var{prec}, int @var{base} = 0)
  1127. @deftypefunx void mpf_class::mpf_class (const string& @var{s})
  1128. @deftypefunx void mpf_class::mpf_class (const string& @var{s}, unsigned long @var{prec}, int @var{base} = 0)
  1129. Construct an @code{mpf_class} converted from a string using @code{mpf_set_str}
  1130. (@pxref{Assigning Floats}).  If @var{prec} is given, the initial precision is
  1131. that value, in bits.  If not, the default @code{mpf} precision
  1132. (@pxref{Initializing Floats}) is used.
  1133. If the string is not a valid float, an @code{std::invalid_argument} exception
  1134. is thrown.  The same applies to @code{operator=}.
  1135. @end deftypefun
  1136. @deftypefun {mpf_class&} mpf_class::operator= (type @var{op})
  1137. Convert and store the given @var{op} value to an @code{mpf_class} object.  The
  1138. same types are accepted as for the constructors above.
  1139. Note that @code{operator=} only stores a new value, it doesn't copy or change
  1140. the precision of the destination, instead the value is truncated if necessary.
  1141. This is the same as @code{mpf_set} etc.  Note in particular this means for
  1142. @code{mpf_class} a copy constructor is not the same as a default constructor
  1143. plus assignment.
  1144. @example
  1145. mpf_class x (y);   // x created with precision of y
  1146. mpf_class x;       // x created with default precision
  1147. x = y;             // value truncated to that precision
  1148. @end example
  1149. Applications using templated code may need to be careful about the assumptions
  1150. the code makes in this area, when working with @code{mpf_class} values of
  1151. various different or non-default precisions.  For instance implementations of
  1152. the standard @code{complex} template have been seen in both styles above,
  1153. though of course @code{complex} is normally only actually specified for use
  1154. with the builtin float types.
  1155. @end deftypefun
  1156. @deftypefun mpf_class abs (mpf_class @var{op})
  1157. @deftypefunx mpf_class ceil (mpf_class @var{op})
  1158. @deftypefunx int cmp (mpf_class @var{op1}, type @var{op2})
  1159. @deftypefunx int cmp (type @var{op1}, mpf_class @var{op2})
  1160. @maybepagebreak
  1161. @deftypefunx bool mpf_class::fits_sint_p (void)
  1162. @deftypefunx bool mpf_class::fits_slong_p (void)
  1163. @deftypefunx bool mpf_class::fits_sshort_p (void)
  1164. @maybepagebreak
  1165. @deftypefunx bool mpf_class::fits_uint_p (void)
  1166. @deftypefunx bool mpf_class::fits_ulong_p (void)
  1167. @deftypefunx bool mpf_class::fits_ushort_p (void)
  1168. @maybepagebreak
  1169. @deftypefunx mpf_class floor (mpf_class @var{op})
  1170. @deftypefunx mpf_class hypot (mpf_class @var{op1}, mpf_class @var{op2})
  1171. @maybepagebreak
  1172. @deftypefunx double mpf_class::get_d (void)
  1173. @deftypefunx long mpf_class::get_si (void)
  1174. @deftypefunx string mpf_class::get_str (mp_exp_t& @var{exp}, int @var{base} = 10, size_t @var{digits} = 0)
  1175. @deftypefunx {unsigned long} mpf_class::get_ui (void)
  1176. @maybepagebreak
  1177. @deftypefunx int mpf_class::set_str (const char *@var{str}, int @var{base})
  1178. @deftypefunx int mpf_class::set_str (const string& @var{str}, int @var{base})
  1179. @deftypefunx int sgn (mpf_class @var{op})
  1180. @deftypefunx mpf_class sqrt (mpf_class @var{op})
  1181. @deftypefunx mpf_class trunc (mpf_class @var{op})
  1182. These functions provide a C++ class interface to the corresponding GMP C
  1183. routines.
  1184. @code{cmp} can be used with any of the classes or the standard C++ types,
  1185. except @code{long long} and @code{long double}.
  1186. The accuracy provided by @code{hypot} is not currently guaranteed.
  1187. @end deftypefun
  1188. @deftypefun {mp_bitcnt_t} mpf_class::get_prec ()
  1189. @deftypefunx void mpf_class::set_prec (mp_bitcnt_t @var{prec})
  1190. @deftypefunx void mpf_class::set_prec_raw (mp_bitcnt_t @var{prec})
  1191. Get or set the current precision of an @code{mpf_class}.
  1192. The restrictions described for @code{mpf_set_prec_raw} (@pxref{Initializing
  1193. Floats}) apply to @code{mpf_class::set_prec_raw}.  Note in particular that the
  1194. @code{mpf_class} must be restored to it's allocated precision before being
  1195. destroyed.  This must be done by application code, there's no automatic
  1196. mechanism for it.
  1197. @end deftypefun
  1198. @node C++ Interface Random Numbers, C++ Interface Limitations, C++ Interface Floats, C++ Class Interface
  1199. @section C++ Interface Random Numbers
  1200. @deftp Class gmp_randclass
  1201. The C++ class interface to the GMP random number functions uses
  1202. @code{gmp_randclass} to hold an algorithm selection and current state, as per
  1203. @code{gmp_randstate_t}.
  1204. @end deftp
  1205. @deftypefun {} gmp_randclass::gmp_randclass (void (*@var{randinit}) (gmp_randstate_t, @dots{}), @dots{})
  1206. Construct a @code{gmp_randclass}, using a call to the given @var{randinit}
  1207. function (@pxref{Random State Initialization}).  The arguments expected are
  1208. the same as @var{randinit}, but with @code{mpz_class} instead of @code{mpz_t}.
  1209. For example,
  1210. @example
  1211. gmp_randclass r1 (gmp_randinit_default);
  1212. gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32);
  1213. gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp);
  1214. gmp_randclass r4 (gmp_randinit_mt);
  1215. @end example
  1216. @code{gmp_randinit_lc_2exp_size} will fail if the size requested is too big,
  1217. an @code{std::length_error} exception is thrown in that case.
  1218. @end deftypefun
  1219. @deftypefun {} gmp_randclass::gmp_randclass (gmp_randalg_t @var{alg}, @dots{})
  1220. Construct a @code{gmp_randclass} using the same parameters as
  1221. @code{gmp_randinit} (@pxref{Random State Initialization}).  This function is
  1222. obsolete and the above @var{randinit} style should be preferred.
  1223. @end deftypefun
  1224. @deftypefun void gmp_randclass::seed (unsigned long int @var{s})
  1225. @deftypefunx void gmp_randclass::seed (mpz_class @var{s})
  1226. Seed a random number generator.  See @pxref{Random Number Functions}, for how
  1227. to choose a good seed.
  1228. @end deftypefun
  1229. @deftypefun mpz_class gmp_randclass::get_z_bits (unsigned long @var{bits})
  1230. @deftypefunx mpz_class gmp_randclass::get_z_bits (mpz_class @var{bits})
  1231. Generate a random integer with a specified number of bits.
  1232. @end deftypefun
  1233. @deftypefun mpz_class gmp_randclass::get_z_range (mpz_class @var{n})
  1234. Generate a random integer in the range 0 to @math{@var{n}-1} inclusive.
  1235. @end deftypefun
  1236. @deftypefun mpf_class gmp_randclass::get_f ()
  1237. @deftypefunx mpf_class gmp_randclass::get_f (unsigned long @var{prec})
  1238. Generate a random float @var{f} in the range @math{0 <= @var{f} < 1}.  @var{f}
  1239. will be to @var{prec} bits precision, or if @var{prec} is not given then to
  1240. the precision of the destination.  For example,
  1241. @example
  1242. gmp_randclass  r;
  1243. ...
  1244. mpf_class  f (0, 512);   // 512 bits precision
  1245. f = r.get_f();           // random number, 512 bits
  1246. @end example
  1247. @end deftypefun
  1248. @node C++ Interface Limitations,  , C++ Interface Random Numbers, C++ Class Interface
  1249. @section C++ Interface Limitations
  1250. @table @asis
  1251. @item @code{mpq_class} and Templated Reading
  1252. A generic piece of template code probably won't know that @code{mpq_class}
  1253. requires a @code{canonicalize} call if inputs read with @code{operator>>}
  1254. might be non-canonical.  This can lead to incorrect results.
  1255. @code{operator>>} behaves as it does for reasons of efficiency.  A
  1256. canonicalize can be quite time consuming on large operands, and is best
  1257. avoided if it's not necessary.
  1258. But this potential difficulty reduces the usefulness of @code{mpq_class}.
  1259. Perhaps a mechanism to tell @code{operator>>} what to do will be adopted in
  1260. the future, maybe a preprocessor define, a global flag, or an @code{ios} flag
  1261. pressed into service.  Or maybe, at the risk of inconsistency, the
  1262. @code{mpq_class} @code{operator>>} could canonicalize and leave @code{mpq_t}
  1263. @code{operator>>} not doing so, for use on those occasions when that's
  1264. acceptable.  Send feedback or alternate ideas to @email{gmp-bugs@@gmplib.org}.
  1265. @item Subclassing
  1266. Subclassing the GMP C++ classes works, but is not currently recommended.
  1267. Expressions involving subclasses resolve correctly (or seem to), but in normal
  1268. C++ fashion the subclass doesn't inherit constructors and assignments.
  1269. There's many of those in the GMP classes, and a good way to reestablish them
  1270. in a subclass is not yet provided.
  1271. @item Templated Expressions
  1272. A subtle difficulty exists when using expressions together with
  1273. application-defined template functions.  Consider the following, with @code{T}
  1274. intended to be some numeric type,
  1275. @example
  1276. template <class T>
  1277. T fun (const T &, const T &);
  1278. @end example
  1279. @noindent
  1280. When used with, say, plain @code{mpz_class} variables, it works fine: @code{T}
  1281. is resolved as @code{mpz_class}.
  1282. @example
  1283. mpz_class f(1), g(2);
  1284. fun (f, g);    // Good
  1285. @end example
  1286. @noindent
  1287. But when one of the arguments is an expression, it doesn't work.
  1288. @example
  1289. mpz_class f(1), g(2), h(3);
  1290. fun (f, g+h);  // Bad
  1291. @end example
  1292. This is because @code{g+h} ends up being a certain expression template type
  1293. internal to @code{gmpxx.h}, which the C++ template resolution rules are unable
  1294. to automatically convert to @code{mpz_class}.  The workaround is simply to add
  1295. an explicit cast.
  1296. @example
  1297. mpz_class f(1), g(2), h(3);
  1298. fun (f, mpz_class(g+h));  // Good
  1299. @end example
  1300. Similarly, within @code{fun} it may be necessary to cast an expression to type
  1301. @code{T} when calling a templated @code{fun2}.
  1302. @example
  1303. template <class T>
  1304. void fun (T f, T g)
  1305. @{
  1306.   fun2 (f, f+g);     // Bad
  1307. @}
  1308. template <class T>
  1309. void fun (T f, T g)
  1310. @{
  1311.   fun2 (f, T(f+g));  // Good
  1312. @}
  1313. @end example
  1314. @end table
  1315. @node BSD Compatible Functions, Custom Allocation, C++ Class Interface, Top
  1316. @comment  node-name,  next,  previous,  up
  1317. @chapter Berkeley MP Compatible Functions
  1318. @cindex Berkeley MP compatible functions
  1319. @cindex BSD MP compatible functions
  1320. These functions are intended to be fully compatible with the Berkeley MP
  1321. library which is available on many BSD derived U*ix systems.  The
  1322. @samp{--enable-mpbsd} option must be used when building GNU MP to make these
  1323. available (@pxref{Installing GMP}).
  1324. The original Berkeley MP library has a usage restriction: you cannot use the
  1325. same variable as both source and destination in a single function call.  The
  1326. compatible functions in GNU MP do not share this restriction---inputs and
  1327. outputs may overlap.
  1328. It is not recommended that new programs are written using these functions.
  1329. Apart from the incomplete set of functions, the interface for initializing
  1330. @code{MINT} objects is more error prone, and the @code{pow} function collides
  1331. with @code{pow} in @file{libm.a}.
  1332. @cindex @code{mp.h}
  1333. @tindex MINT
  1334. Include the header @file{mp.h} to get the definition of the necessary types and
  1335. functions.  If you are on a BSD derived system, make sure to include GNU
  1336. @file{mp.h} if you are going to link the GNU @file{libmp.a} to your program.
  1337. This means that you probably need to give the @samp{-I<dir>} option to the
  1338. compiler, where @samp{<dir>} is the directory where you have GNU @file{mp.h}.
  1339. @deftypefun {MINT *} itom (signed short int @var{initial_value})
  1340. Allocate an integer consisting of a @code{MINT} object and dynamic limb space.
  1341. Initialize the integer to @var{initial_value}.  Return a pointer to the
  1342. @code{MINT} object.
  1343. @end deftypefun
  1344. @deftypefun {MINT *} xtom (char *@var{initial_value})
  1345. Allocate an integer consisting of a @code{MINT} object and dynamic limb space.
  1346. Initialize the integer from @var{initial_value}, a hexadecimal,
  1347. null-terminated C string.  Return a pointer to the @code{MINT} object.
  1348. @end deftypefun
  1349. @deftypefun void move (MINT *@var{src}, MINT *@var{dest})
  1350. Set @var{dest} to @var{src} by copying.  Both variables must be previously
  1351. initialized.
  1352. @end deftypefun
  1353. @deftypefun void madd (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
  1354. Add @var{src_1} and @var{src_2} and put the sum in @var{destination}.
  1355. @end deftypefun
  1356. @deftypefun void msub (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
  1357. Subtract @var{src_2} from @var{src_1} and put the difference in
  1358. @var{destination}.
  1359. @end deftypefun
  1360. @deftypefun void mult (MINT *@var{src_1}, MINT *@var{src_2}, MINT *@var{destination})
  1361. Multiply @var{src_1} and @var{src_2} and put the product in @var{destination}.
  1362. @end deftypefun
  1363. @deftypefun void mdiv (MINT *@var{dividend}, MINT *@var{divisor}, MINT *@var{quotient}, MINT *@var{remainder})
  1364. @deftypefunx void sdiv (MINT *@var{dividend}, signed short int @var{divisor}, MINT *@var{quotient}, signed short int *@var{remainder})
  1365. Set @var{quotient} to @var{dividend}/@var{divisor}, and @var{remainder} to
  1366. @var{dividend} mod @var{divisor}.  The quotient is rounded towards zero; the
  1367. remainder has the same sign as the dividend unless it is zero.
  1368. Some implementations of these functions work differently---or not at all---for
  1369. negative arguments.
  1370. @end deftypefun
  1371. @deftypefun void msqrt (MINT *@var{op}, MINT *@var{root}, MINT *@var{remainder})
  1372. Set @var{root} to @m{lfloorsqrt{@var{op}}rfloor, the truncated integer part
  1373. of the square root of @var{op}}, like @code{mpz_sqrt}.  Set @var{remainder} to
  1374. @m{(@var{op} - @var{root}^2), @var{op}@minus{}@var{root}*@var{root}}, i.e.
  1375. zero if @var{op} is a perfect square.
  1376. If @var{root} and @var{remainder} are the same variable, the results are
  1377. undefined.
  1378. @end deftypefun
  1379. @deftypefun void pow (MINT *@var{base}, MINT *@var{exp}, MINT *@var{mod}, MINT *@var{dest})
  1380. Set @var{dest} to (@var{base} raised to @var{exp}) modulo @var{mod}.
  1381. Note that the name @code{pow} clashes with @code{pow} from the standard C math
  1382. library (@pxref{Exponents and Logarithms,, Exponentiation and Logarithms,
  1383. libc, The GNU C Library Reference Manual}).  An application will only be able
  1384. to use one or the other.
  1385. @end deftypefun
  1386. @deftypefun void rpow (MINT *@var{base}, signed short int @var{exp}, MINT *@var{dest})
  1387. Set @var{dest} to @var{base} raised to @var{exp}.
  1388. @end deftypefun
  1389. @deftypefun void gcd (MINT *@var{op1}, MINT *@var{op2}, MINT *@var{res})
  1390. Set @var{res} to the greatest common divisor of @var{op1} and @var{op2}.
  1391. @end deftypefun
  1392. @deftypefun int mcmp (MINT *@var{op1}, MINT *@var{op2})
  1393. Compare @var{op1} and @var{op2}.  Return a positive value if @var{op1} >
  1394. @var{op2}, zero if @var{op1} = @var{op2}, and a negative value if @var{op1} <
  1395. @var{op2}.
  1396. @end deftypefun
  1397. @deftypefun void min (MINT *@var{dest})
  1398. Input a decimal string from @code{stdin}, and put the read integer in
  1399. @var{dest}.  SPC and TAB are allowed in the number string, and are ignored.
  1400. @end deftypefun
  1401. @deftypefun void mout (MINT *@var{src})
  1402. Output @var{src} to @code{stdout}, as a decimal string.  Also output a newline.
  1403. @end deftypefun
  1404. @deftypefun {char *} mtox (MINT *@var{op})
  1405. Convert @var{op} to a hexadecimal string, and return a pointer to the string.
  1406. The returned string is allocated using the default memory allocation function,
  1407. @code{malloc} by default.  It will be @code{strlen(str)+1} bytes, that being
  1408. exactly enough for the string and null-terminator.
  1409. @end deftypefun
  1410. @deftypefun void mfree (MINT *@var{op})
  1411. De-allocate, the space used by @var{op}.  @strong{This function should only be
  1412. passed a value returned by @code{itom} or @code{xtom}.}
  1413. @end deftypefun
  1414. @node Custom Allocation, Language Bindings, BSD Compatible Functions, Top
  1415. @comment  node-name,  next,  previous,  up
  1416. @chapter Custom Allocation
  1417. @cindex Custom allocation
  1418. @cindex Memory allocation
  1419. @cindex Allocation of memory
  1420. By default GMP uses @code{malloc}, @code{realloc} and @code{free} for memory
  1421. allocation, and if they fail GMP prints a message to the standard error output
  1422. and terminates the program.
  1423. Alternate functions can be specified, to allocate memory in a different way or
  1424. to have a different error action on running out of memory.
  1425. This feature is available in the Berkeley compatibility library (@pxref{BSD
  1426. Compatible Functions}) as well as the main GMP library.
  1427. @deftypefun void mp_set_memory_functions (@* void *(*@var{alloc_func_ptr}) (size_t), @* void *(*@var{realloc_func_ptr}) (void *, size_t, size_t), @* void (*@var{free_func_ptr}) (void *, size_t))
  1428. Replace the current allocation functions from the arguments.  If an argument
  1429. is @code{NULL}, the corresponding default function is used.
  1430. These functions will be used for all memory allocation done by GMP, apart from
  1431. temporary space from @code{alloca} if that function is available and GMP is
  1432. configured to use it (@pxref{Build Options}).
  1433. @strong{Be sure to call @code{mp_set_memory_functions} only when there are no
  1434. active GMP objects allocated using the previous memory functions!  Usually
  1435. that means calling it before any other GMP function.}
  1436. @end deftypefun
  1437. The functions supplied should fit the following declarations:
  1438. @deftypevr Function {void *} allocate_function (size_t @var{alloc_size})
  1439. Return a pointer to newly allocated space with at least @var{alloc_size}
  1440. bytes.
  1441. @end deftypevr
  1442. @deftypevr Function {void *} reallocate_function (void *@var{ptr}, size_t @var{old_size}, size_t @var{new_size})
  1443. Resize a previously allocated block @var{ptr} of @var{old_size} bytes to be
  1444. @var{new_size} bytes.
  1445. The block may be moved if necessary or if desired, and in that case the
  1446. smaller of @var{old_size} and @var{new_size} bytes must be copied to the new
  1447. location.  The return value is a pointer to the resized block, that being the
  1448. new location if moved or just @var{ptr} if not.
  1449. @var{ptr} is never @code{NULL}, it's always a previously allocated block.
  1450. @var{new_size} may be bigger or smaller than @var{old_size}.
  1451. @end deftypevr
  1452. @deftypevr Function void free_function (void *@var{ptr}, size_t @var{size})
  1453. De-allocate the space pointed to by @var{ptr}.
  1454. @var{ptr} is never @code{NULL}, it's always a previously allocated block of
  1455. @var{size} bytes.
  1456. @end deftypevr
  1457. A @dfn{byte} here means the unit used by the @code{sizeof} operator.
  1458. The @var{old_size} parameters to @var{reallocate_function} and
  1459. @var{free_function} are passed for convenience, but of course can be ignored
  1460. if not needed.  The default functions using @code{malloc} and friends for
  1461. instance don't use them.
  1462. No error return is allowed from any of these functions, if they return then
  1463. they must have performed the specified operation.  In particular note that
  1464. @var{allocate_function} or @var{reallocate_function} mustn't return
  1465. @code{NULL}.
  1466. Getting a different fatal error action is a good use for custom allocation
  1467. functions, for example giving a graphical dialog rather than the default print
  1468. to @code{stderr}.  How much is possible when genuinely out of memory is
  1469. another question though.
  1470. There's currently no defined way for the allocation functions to recover from
  1471. an error such as out of memory, they must terminate program execution.  A
  1472. @code{longjmp} or throwing a C++ exception will have undefined results.  This
  1473. may change in the future.
  1474. GMP may use allocated blocks to hold pointers to other allocated blocks.  This
  1475. will limit the assumptions a conservative garbage collection scheme can make.
  1476. Since the default GMP allocation uses @code{malloc} and friends, those
  1477. functions will be linked in even if the first thing a program does is an
  1478. @code{mp_set_memory_functions}.  It's necessary to change the GMP sources if
  1479. this is a problem.
  1480. @sp 1
  1481. @deftypefun void mp_get_memory_functions (@* void *(**@var{alloc_func_ptr}) (size_t), @* void *(**@var{realloc_func_ptr}) (void *, size_t, size_t), @* void (**@var{free_func_ptr}) (void *, size_t))
  1482. Get the current allocation functions, storing function pointers to the
  1483. locations given by the arguments.  If an argument is @code{NULL}, that
  1484. function pointer is not stored.
  1485. @need 1000
  1486. For example, to get just the current free function,
  1487. @example
  1488. void (*freefunc) (void *, size_t);
  1489. mp_get_memory_functions (NULL, NULL, &freefunc);
  1490. @end example
  1491. @end deftypefun
  1492. @node Language Bindings, Algorithms, Custom Allocation, Top
  1493. @chapter Language Bindings
  1494. @cindex Language bindings
  1495. @cindex Other languages
  1496. The following packages and projects offer access to GMP from languages other
  1497. than C, though perhaps with varying levels of functionality and efficiency.
  1498. @c  @spaceuref{U} is the same as @uref{U}, but with a couple of extra spaces
  1499. @c  in tex, just to separate the URL from the preceding text a bit.
  1500. @iftex
  1501. @macro spaceuref {U}
  1502. @ @ @uref{U}
  1503. @end macro
  1504. @end iftex
  1505. @ifnottex
  1506. @macro spaceuref {U}
  1507. @uref{U}
  1508. @end macro
  1509. @end ifnottex
  1510. @sp 1
  1511. @table @asis
  1512. @item C++
  1513. @itemize @bullet
  1514. @item
  1515. GMP C++ class interface, @pxref{C++ Class Interface} @* Straightforward
  1516. interface, expression templates to eliminate temporaries.
  1517. @item
  1518. ALP @spaceuref{http://www-sop.inria.fr/saga/logiciels/ALP/} @* Linear algebra and
  1519. polynomials using templates.
  1520. @item
  1521. Arithmos @spaceuref{http://www.win.ua.ac.be/~cant/arithmos/} @* Rationals
  1522. with infinities and square roots.
  1523. @item
  1524. CLN @spaceuref{http://www.ginac.de/CLN/} @* High level classes for arithmetic.
  1525. @item
  1526. LiDIA @spaceuref{http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/} @* A C++
  1527. library for computational number theory.
  1528. @item
  1529. Linbox @spaceuref{http://www.linalg.org/} @* Sparse vectors and matrices.
  1530. @item
  1531. NTL @spaceuref{http://www.shoup.net/ntl/} @* A C++ number theory library.
  1532. @end itemize
  1533. @c @item D
  1534. @c @itemize @bullet
  1535. @c @item
  1536. @c gmp-d @spaceuref{http://home.comcast.net/~benhinkle/gmp-d/}
  1537. @c @end itemize
  1538. @item Fortran
  1539. @itemize @bullet
  1540. @item
  1541. Omni F77 @spaceuref{http://phase.hpcc.jp/Omni/home.html} @* Arbitrary
  1542. precision floats.
  1543. @end itemize
  1544. @item Haskell
  1545. @itemize @bullet
  1546. @item
  1547. Glasgow Haskell Compiler @spaceuref{http://www.haskell.org/ghc/}
  1548. @end itemize
  1549. @item Java
  1550. @itemize @bullet
  1551. @item
  1552. Kaffe @spaceuref{http://www.kaffe.org/}
  1553. @item
  1554. Kissme @spaceuref{http://kissme.sourceforge.net/}
  1555. @end itemize
  1556. @item Lisp
  1557. @itemize @bullet
  1558. @item
  1559. GNU Common Lisp @spaceuref{http://www.gnu.org/software/gcl/gcl.html}
  1560. @item
  1561. Librep @spaceuref{http://librep.sourceforge.net/}
  1562. @item
  1563. @c  FIXME: When there's a stable release with gmp support, just refer to it
  1564. @c  rather than bothering to talk about betas.
  1565. XEmacs (21.5.18 beta and up) @spaceuref{http://www.xemacs.org} @* Optional
  1566. big integers, rationals and floats using GMP.
  1567. @end itemize
  1568. @item M4
  1569. @itemize @bullet
  1570. @item
  1571. @c  FIXME: When there's a stable release with gmp support, just refer to it
  1572. @c  rather than bothering to talk about betas.
  1573. GNU m4 betas @spaceuref{http://www.seindal.dk/rene/gnu/} @* Optionally provides
  1574. an arbitrary precision @code{mpeval}.
  1575. @end itemize
  1576. @item ML
  1577. @itemize @bullet
  1578. @item
  1579. MLton compiler @spaceuref{http://mlton.org/}
  1580. @end itemize
  1581. @item Objective Caml
  1582. @itemize @bullet
  1583. @item
  1584. MLGMP @spaceuref{http://www.di.ens.fr/~monniaux/programmes.html.en}
  1585. @item
  1586. Numerix @spaceuref{http://pauillac.inria.fr/~quercia/} @* Optionally using
  1587. GMP.
  1588. @end itemize
  1589. @item Oz
  1590. @itemize @bullet
  1591. @item
  1592. Mozart @spaceuref{http://www.mozart-oz.org/}
  1593. @end itemize
  1594. @item Pascal
  1595. @itemize @bullet
  1596. @item
  1597. GNU Pascal Compiler @spaceuref{http://www.gnu-pascal.de/} @* GMP unit.
  1598. @item
  1599. Numerix @spaceuref{http://pauillac.inria.fr/~quercia/} @* For Free Pascal,
  1600. optionally using GMP.
  1601. @end itemize
  1602. @item Perl
  1603. @itemize @bullet
  1604. @item
  1605. GMP module, see @file{demos/perl} in the GMP sources (@pxref{Demonstration
  1606. Programs}).
  1607. @item
  1608. Math::GMP @spaceuref{http://www.cpan.org/} @* Compatible with Math::BigInt, but
  1609. not as many functions as the GMP module above.
  1610. @item
  1611. Math::BigInt::GMP @spaceuref{http://www.cpan.org/} @* Plug Math::GMP into
  1612. normal Math::BigInt operations.
  1613. @end itemize
  1614. @need 1000
  1615. @item Pike
  1616. @itemize @bullet
  1617. @item
  1618. mpz module in the standard distribution, @uref{http://pike.ida.liu.se/}
  1619. @end itemize
  1620. @need 500
  1621. @item Prolog
  1622. @itemize @bullet
  1623. @item
  1624. SWI Prolog @spaceuref{http://www.swi-prolog.org/} @*
  1625. Arbitrary precision floats.
  1626. @end itemize
  1627. @item Python
  1628. @itemize @bullet
  1629. @item
  1630. mpz module in the standard distribution, @uref{http://www.python.org/}
  1631. @item
  1632. GMPY @uref{http://gmpy.sourceforge.net/}
  1633. @end itemize
  1634. @item Scheme
  1635. @itemize @bullet
  1636. @item
  1637. GNU Guile (upcoming 1.8) @spaceuref{http://www.gnu.org/software/guile/guile.html}
  1638. @item
  1639. RScheme @spaceuref{http://www.rscheme.org/}
  1640. @item
  1641. STklos @spaceuref{http://www.stklos.org/}
  1642. @c
  1643. @c  For reference, MzScheme uses some of gmp, but (as of version 205) it only
  1644. @c  has copies of some of the generic C code, and we don't consider that a
  1645. @c  language binding to gmp.
  1646. @c
  1647. @end itemize
  1648. @item Smalltalk
  1649. @itemize @bullet
  1650. @item
  1651. GNU Smalltalk @spaceuref{http://www.smalltalk.org/versions/GNUSmalltalk.html}
  1652. @end itemize
  1653. @item Other
  1654. @itemize @bullet
  1655. @item
  1656. Axiom @uref{http://savannah.nongnu.org/projects/axiom} @* Computer algebra
  1657. using GCL.
  1658. @item
  1659. DrGenius @spaceuref{http://drgenius.seul.org/} @* Geometry system and
  1660. mathematical programming language.
  1661. @item
  1662. GiNaC @spaceuref{http://www.ginac.de/} @* C++ computer algebra using CLN.
  1663. @item
  1664. GOO @spaceuref{http://www.googoogaga.org/} @* Dynamic object oriented
  1665. language.
  1666. @item
  1667. Maxima @uref{http://www.ma.utexas.edu/users/wfs/maxima.html} @* Macsyma
  1668. computer algebra using GCL.
  1669. @item
  1670. Q @spaceuref{http://q-lang.sourceforge.net/} @* Equational programming system.
  1671. @item
  1672. Regina @spaceuref{http://regina.sourceforge.net/} @* Topological calculator.
  1673. @item
  1674. Yacas @spaceuref{http://www.xs4all.nl/~apinkus/yacas.html} @* Yet another
  1675. computer algebra system.
  1676. @end itemize
  1677. @end table
  1678. @node Algorithms, Internals, Language Bindings, Top
  1679. @chapter Algorithms
  1680. @cindex Algorithms
  1681. This chapter is an introduction to some of the algorithms used for various GMP
  1682. operations.  The code is likely to be hard to understand without knowing
  1683. something about the algorithms.
  1684. Some GMP internals are mentioned, but applications that expect to be
  1685. compatible with future GMP releases should take care to use only the
  1686. documented functions.
  1687. @menu
  1688. * Multiplication Algorithms::
  1689. * Division Algorithms::
  1690. * Greatest Common Divisor Algorithms::
  1691. * Powering Algorithms::
  1692. * Root Extraction Algorithms::
  1693. * Radix Conversion Algorithms::
  1694. * Other Algorithms::
  1695. * Assembly Coding::
  1696. @end menu
  1697. @node Multiplication Algorithms, Division Algorithms, Algorithms, Algorithms
  1698. @section Multiplication
  1699. @cindex Multiplication algorithms
  1700. N@cross{}N limb multiplications and squares are done using one of five
  1701. algorithms, as the size N increases.
  1702. @quotation
  1703. @multitable {KaratsubaMMM} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  1704. @item Algorithm @tab Threshold
  1705. @item Basecase  @tab (none)
  1706. @item Karatsuba @tab @code{MUL_TOOM22_THRESHOLD}
  1707. @item Toom-3    @tab @code{MUL_TOOM33_THRESHOLD}
  1708. @item Toom-4    @tab @code{MUL_TOOM44_THRESHOLD}
  1709. @item FFT       @tab @code{MUL_FFT_THRESHOLD}
  1710. @end multitable
  1711. @end quotation
  1712. Similarly for squaring, with the @code{SQR} thresholds.
  1713. N@cross{}M multiplications of operands with different sizes above
  1714. @code{MUL_TOOM22_THRESHOLD} are currently done by special Toom-inspired
  1715. algorithms or directly with FFT, depending on operand size (@pxref{Unbalanced
  1716. Multiplication}).
  1717. @menu
  1718. * Basecase Multiplication::
  1719. * Karatsuba Multiplication::
  1720. * Toom 3-Way Multiplication::
  1721. * Toom 4-Way Multiplication::
  1722. * FFT Multiplication::
  1723. * Other Multiplication::
  1724. * Unbalanced Multiplication::
  1725. @end menu
  1726. @node Basecase Multiplication, Karatsuba Multiplication, Multiplication Algorithms, Multiplication Algorithms
  1727. @subsection Basecase Multiplication
  1728. Basecase N@cross{}M multiplication is a straightforward rectangular set of
  1729. cross-products, the same as long multiplication done by hand and for that
  1730. reason sometimes known as the schoolbook or grammar school method.  This is an
  1731. @m{O(NM),O(N*M)} algorithm.  See Knuth section 4.3.1 algorithm M
  1732. (@pxref{References}), and the @file{mpn/generic/mul_basecase.c} code.
  1733. Assembly implementations of @code{mpn_mul_basecase} are essentially the same
  1734. as the generic C code, but have all the usual assembly tricks and
  1735. obscurities introduced for speed.
  1736. A square can be done in roughly half the time of a multiply, by using the fact
  1737. that the cross products above and below the diagonal are the same.  A triangle
  1738. of products below the diagonal is formed, doubled (left shift by one bit), and
  1739. then the products on the diagonal added.  This can be seen in
  1740. @file{mpn/generic/sqr_basecase.c}.  Again the assembly implementations take
  1741. essentially the same approach.
  1742. @tex
  1743. defGMPline#1#2#3#4#5#6{%
  1744.   hbox {%
  1745.     vrule height 2.5ex depth 1ex
  1746.            hbox to 2em {hfil{#2}hfil}%
  1747.     vrule hbox to 2em {hfil{#3}hfil}%
  1748.     vrule hbox to 2em {hfil{#4}hfil}%
  1749.     vrule hbox to 2em {hfil{#5}hfil}%
  1750.     vrule hbox to 2em {hfil{#6}hfil}%
  1751.     vrule}}
  1752. GMPdisplay{
  1753.   hbox{%
  1754.     vbox{%
  1755.       hbox to 1.5em {vrule height 2.5ex depth 1ex width 0pt}%
  1756.       hbox {vrule height 2.5ex depth 1ex width 0pt u0hfil}%
  1757.       hbox {vrule height 2.5ex depth 1ex width 0pt u1hfil}%
  1758.       hbox {vrule height 2.5ex depth 1ex width 0pt u2hfil}%
  1759.       hbox {vrule height 2.5ex depth 1ex width 0pt u3hfil}%
  1760.       hbox {vrule height 2.5ex depth 1ex width 0pt u4hfil}%
  1761.       vfill}%
  1762.     vbox{%
  1763.       hbox{%
  1764.         hbox to 2em {hfil u0hfil}%
  1765.         hbox to 2em {hfil u1hfil}%
  1766.         hbox to 2em {hfil u2hfil}%
  1767.         hbox to 2em {hfil u3hfil}%
  1768.         hbox to 2em {hfil u4hfil}}%
  1769.       vskip 0.7ex
  1770.       hrule
  1771.       GMPline{u0}{d}{}{}{}{}%
  1772.       hrule
  1773.       GMPline{u1}{}{d}{}{}{}%
  1774.       hrule
  1775.       GMPline{u2}{}{}{d}{}{}%
  1776.       hrule
  1777.       GMPline{u3}{}{}{}{d}{}%
  1778.       hrule
  1779.       GMPline{u4}{}{}{}{}{d}%
  1780.       hrule}}}
  1781. @end tex
  1782. @ifnottex
  1783. @example
  1784. @group
  1785.      u0  u1  u2  u3  u4
  1786.    +---+---+---+---+---+
  1787. u0 | d |   |   |   |   |
  1788.    +---+---+---+---+---+
  1789. u1 |   | d |   |   |   |
  1790.    +---+---+---+---+---+
  1791. u2 |   |   | d |   |   |
  1792.    +---+---+---+---+---+
  1793. u3 |   |   |   | d |   |
  1794.    +---+---+---+---+---+
  1795. u4 |   |   |   |   | d |
  1796.    +---+---+---+---+---+
  1797. @end group
  1798. @end example
  1799. @end ifnottex
  1800. In practice squaring isn't a full 2@cross{} faster than multiplying, it's
  1801. usually around 1.5@cross{}.  Less than 1.5@cross{} probably indicates
  1802. @code{mpn_sqr_basecase} wants improving on that CPU.
  1803. On some CPUs @code{mpn_mul_basecase} can be faster than the generic C
  1804. @code{mpn_sqr_basecase} on some small sizes.  @code{SQR_BASECASE_THRESHOLD} is
  1805. the size at which to use @code{mpn_sqr_basecase}, this will be zero if that
  1806. routine should be used always.
  1807. @node Karatsuba Multiplication, Toom 3-Way Multiplication, Basecase Multiplication, Multiplication Algorithms
  1808. @subsection Karatsuba Multiplication
  1809. @cindex Karatsuba multiplication
  1810. The Karatsuba multiplication algorithm is described in Knuth section 4.3.3
  1811. part A, and various other textbooks.  A brief description is given here.
  1812. The inputs @math{x} and @math{y} are treated as each split into two parts of
  1813. equal length (or the most significant part one limb shorter if N is odd).
  1814. @tex
  1815. % GMPboxwidth used for all the multiplication pictures
  1816. globalnewdimenGMPboxwidth globalGMPboxwidth=5em
  1817. % GMPboxdepth and GMPboxheight are also used for the float pictures
  1818. globalnewdimenGMPboxdepth  globalGMPboxdepth=1ex
  1819. globalnewdimenGMPboxheight globalGMPboxheight=2ex
  1820. gdefGMPvrule{vrule height GMPboxheight depth GMPboxdepth}
  1821. defGMPbox#1#2{%
  1822.   vbox {%
  1823.     hrule
  1824.     hbox to 2GMPboxwidth{%
  1825.       GMPvrule hfil $#1$hfil vrule hfil $#2$hfil vrule}%
  1826.     hrule}}
  1827. GMPdisplay{%
  1828. vbox{%
  1829.   hbox to 2GMPboxwidth {high hfil low}
  1830.   vskip 0.7ex
  1831.   GMPbox{x_1}{x_0}
  1832.   vskip 0.5ex
  1833.   GMPbox{y_1}{y_0}
  1834. }}
  1835. @end tex
  1836. @ifnottex
  1837. @example
  1838. @group
  1839.  high              low
  1840. +----------+----------+
  1841. |    x1    |    x0    |
  1842. +----------+----------+
  1843. +----------+----------+
  1844. |    y1    |    y0    |
  1845. +----------+----------+
  1846. @end group
  1847. @end example
  1848. @end ifnottex
  1849. Let @math{b} be the power of 2 where the split occurs, ie.@: if @ms{x,0} is
  1850. @math{k} limbs (@ms{y,0} the same) then
  1851. @m{b=2GMPraise{$k*$@code{mp_bits_per_limb}}, b=2^(k*mp_bits_per_limb)}.
  1852. With that @m{x=x_1b+x_0,x=x1*b+x0} and @m{y=y_1b+y_0,y=y1*b+y0}, and the
  1853. following holds,
  1854. @display
  1855. @m{xy = (b^2+b)x_1y_1 - b(x_1-x_0)(y_1-y_0) + (b+1)x_0y_0,
  1856.   x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0}
  1857. @end display
  1858. This formula means doing only three multiplies of (N/2)@cross{}(N/2) limbs,
  1859. whereas a basecase multiply of N@cross{}N limbs is equivalent to four
  1860. multiplies of (N/2)@cross{}(N/2).  The factors @math{(b^2+b)} etc represent
  1861. the positions where the three products must be added.
  1862. @tex
  1863. defGMPboxA#1#2{%
  1864.   vbox{%
  1865.     hrule
  1866.     hbox{%
  1867.       GMPvrule
  1868.       hbox to 2GMPboxwidth {hfilhbox{$#1$}hfil}%
  1869.       vrule
  1870.       hbox to 2GMPboxwidth {hfilhbox{$#2$}hfil}%
  1871.       vrule}
  1872.     hrule}}
  1873. defGMPboxB#1#2{%
  1874.   hbox{%
  1875.     raise GMPboxdepth hbox to GMPboxwidth {hfil #1hskip 0.5em}%
  1876.     vbox{%
  1877.       hrule
  1878.       hbox{%
  1879.         GMPvrule
  1880.         hbox to 2GMPboxwidth {hfilhbox{$#2$}hfil}%
  1881.         vrule}%
  1882.       hrule}}}
  1883. GMPdisplay{%
  1884. vbox{%
  1885.   hbox to 4GMPboxwidth {high hfil low}
  1886.   vskip 0.7ex
  1887.   GMPboxA{x_1y_1}{x_0y_0}
  1888.   vskip 0.5ex
  1889.   GMPboxB{$+$}{x_1y_1}
  1890.   vskip 0.5ex
  1891.   GMPboxB{$+$}{x_0y_0}
  1892.   vskip 0.5ex
  1893.   GMPboxB{$-$}{(x_1-x_0)(y_1-y_0)}
  1894. }}
  1895. @end tex
  1896. @ifnottex
  1897. @example
  1898. @group
  1899.  high                              low
  1900. +--------+--------+ +--------+--------+
  1901. |      x1*y1      | |      x0*y0      |
  1902. +--------+--------+ +--------+--------+
  1903.           +--------+--------+
  1904.       add |      x1*y1      |
  1905.           +--------+--------+
  1906.           +--------+--------+
  1907.       add |      x0*y0      |
  1908.           +--------+--------+
  1909.           +--------+--------+
  1910.       sub | (x1-x0)*(y1-y0) |
  1911.           +--------+--------+
  1912. @end group
  1913. @end example
  1914. @end ifnottex
  1915. The term @m{(x_1-x_0)(y_1-y_0),(x1-x0)*(y1-y0)} is best calculated as an
  1916. absolute value, and the sign used to choose to add or subtract.  Notice the
  1917. sum @m{mathop{rm high}(x_0y_0)+mathop{rm low}(x_1y_1),
  1918. high(x0*y0)+low(x1*y1)} occurs twice, so it's possible to do @m{5k,5*k} limb
  1919. additions, rather than @m{6k,6*k}, but in GMP extra function call overheads
  1920. outweigh the saving.
  1921. Squaring is similar to multiplying, but with @math{x=y} the formula reduces to
  1922. an equivalent with three squares,
  1923. @display
  1924. @m{x^2 = (b^2+b)x_1^2 - b(x_1-x_0)^2 + (b+1)x_0^2,
  1925.    x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2}
  1926. @end display
  1927. The final result is accumulated from those three squares the same way as for
  1928. the three multiplies above.  The middle term @m{(x_1-x_0)^2,(x1-x0)^2} is now
  1929. always positive.
  1930. A similar formula for both multiplying and squaring can be constructed with a
  1931. middle term @m{(x_1+x_0)(y_1+y_0),(x1+x0)*(y1+y0)}.  But those sums can exceed
  1932. @math{k} limbs, leading to more carry handling and additions than the form
  1933. above.
  1934. Karatsuba multiplication is asymptotically an @math{O(N^@W{1.585})} algorithm,
  1935. the exponent being @m{log3/log2,log(3)/log(2)}, representing 3 multiplies
  1936. each @math{1/2} the size of the inputs.  This is a big improvement over the
  1937. basecase multiply at @math{O(N^2)} and the advantage soon overcomes the extra
  1938. additions Karatsuba performs.  @code{MUL_TOOM22_THRESHOLD} can be as little
  1939. as 10 limbs.  The @code{SQR} threshold is usually about twice the @code{MUL}.
  1940. The basecase algorithm will take a time of the form @m{M(N) = aN^2 + bN + c,
  1941. M(N) = a*N^2 + b*N + c} and the Karatsuba algorithm @m{K(N) = 3M(N/2) + dN +
  1942. e, K(N) = 3*M(N/2) + d*N + e}, which expands to @m{K(N) = {3over4} aN^2 +
  1943. {3over2} bN + 3c + dN + e, K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e}.  The
  1944. factor @m{3over4, 3/4} for @math{a} means per-crossproduct speedups in the
  1945. basecase code will increase the threshold since they benefit @math{M(N)} more
  1946. than @math{K(N)}.  And conversely the @m{3over2, 3/2} for @math{b} means
  1947. linear style speedups of @math{b} will increase the threshold since they
  1948. benefit @math{K(N)} more than @math{M(N)}.  The latter can be seen for
  1949. instance when adding an optimized @code{mpn_sqr_diagonal} to
  1950. @code{mpn_sqr_basecase}.  Of course all speedups reduce total time, and in
  1951. that sense the algorithm thresholds are merely of academic interest.
  1952. @node Toom 3-Way Multiplication, Toom 4-Way Multiplication, Karatsuba Multiplication, Multiplication Algorithms
  1953. @subsection Toom 3-Way Multiplication
  1954. @cindex Toom multiplication
  1955. The Karatsuba formula is the simplest case of a general approach to splitting
  1956. inputs that leads to both Toom and FFT algorithms.  A description of
  1957. Toom can be found in Knuth section 4.3.3, with an example 3-way
  1958. calculation after Theorem A@.  The 3-way form used in GMP is described here.
  1959. The operands are each considered split into 3 pieces of equal length (or the
  1960. most significant part 1 or 2 limbs shorter than the other two).
  1961. @tex
  1962. defGMPbox#1#2#3{%
  1963.   vbox{%
  1964.     hrule vfil
  1965.     hbox to 3GMPboxwidth {%
  1966.       GMPvrule
  1967.       hfil$#1$hfil
  1968.       vrule
  1969.       hfil$#2$hfil
  1970.       vrule
  1971.       hfil$#3$hfil
  1972.       vrule}%
  1973.     vfil hrule
  1974. }}
  1975. GMPdisplay{%
  1976. vbox{%
  1977.   hbox to 3GMPboxwidth {high hfil low}
  1978.   vskip 0.7ex
  1979.   GMPbox{x_2}{x_1}{x_0}
  1980.   vskip 0.5ex
  1981.   GMPbox{y_2}{y_1}{y_0}
  1982.   vskip 0.5ex
  1983. }}
  1984. @end tex
  1985. @ifnottex
  1986. @example
  1987. @group
  1988.  high                         low
  1989. +----------+----------+----------+
  1990. |    x2    |    x1    |    x0    |
  1991. +----------+----------+----------+
  1992. +----------+----------+----------+
  1993. |    y2    |    y1    |    y0    |
  1994. +----------+----------+----------+
  1995. @end group
  1996. @end example
  1997. @end ifnottex
  1998. @noindent
  1999. These parts are treated as the coefficients of two polynomials
  2000. @display
  2001. @group
  2002. @m{X(t) = x_2t^2 + x_1t + x_0,
  2003.    X(t) = x2*t^2 + x1*t + x0}
  2004. @m{Y(t) = y_2t^2 + y_1t + y_0,
  2005.    Y(t) = y2*t^2 + y1*t + y0}
  2006. @end group
  2007. @end display
  2008. Let @math{b} equal the power of 2 which is the size of the @ms{x,0}, @ms{x,1},
  2009. @ms{y,0} and @ms{y,1} pieces, ie.@: if they're @math{k} limbs each then
  2010. @m{b=2GMPraise{$k*$@code{mp_bits_per_limb}}, b=2^(k*mp_bits_per_limb)}.
  2011. With this @math{x=X(b)} and @math{y=Y(b)}.
  2012. Let a polynomial @m{W(t)=X(t)Y(t),W(t)=X(t)*Y(t)} and suppose its coefficients
  2013. are
  2014. @display
  2015. @m{W(t) = w_4t^4 + w_3t^3 + w_2t^2 + w_1t + w_0,
  2016.    W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0}
  2017. @end display
  2018. The @m{w_i,w[i]} are going to be determined, and when they are they'll give
  2019. the final result using @math{w=W(b)}, since
  2020. @m{xy=X(b)Y(b),x*y=X(b)*Y(b)=W(b)}.  The coefficients will be roughly
  2021. @math{b^2} each, and the final @math{W(b)} will be an addition like,
  2022. @tex
  2023. defGMPbox#1#2{%
  2024.   moveright #1GMPboxwidth
  2025.   vbox{%
  2026.     hrule
  2027.     hbox{%
  2028.       GMPvrule
  2029.       hbox to 2GMPboxwidth {hfil$#2$hfil}%
  2030.       vrule}%
  2031.     hrule
  2032. }}
  2033. GMPdisplay{%
  2034. vbox{%
  2035.   hbox to 6GMPboxwidth {high hfil low}%
  2036.   vskip 0.7ex
  2037.   GMPbox{0}{w_4}
  2038.   vskip 0.5ex
  2039.   GMPbox{1}{w_3}
  2040.   vskip 0.5ex
  2041.   GMPbox{2}{w_2}
  2042.   vskip 0.5ex
  2043.   GMPbox{3}{w_1}
  2044.   vskip 0.5ex
  2045.   GMPbox{4}{w_0}
  2046. }}
  2047. @end tex
  2048. @ifnottex
  2049. @example
  2050. @group
  2051.  high                                        low
  2052. +-------+-------+
  2053. |       w4      |
  2054. +-------+-------+
  2055.        +--------+-------+
  2056.        |        w3      |
  2057.        +--------+-------+
  2058.                +--------+-------+
  2059.                |        w2      |
  2060.                +--------+-------+
  2061.                        +--------+-------+
  2062.                        |        w1      |
  2063.                        +--------+-------+
  2064.                                 +-------+-------+
  2065.                                 |       w0      |
  2066.                                 +-------+-------+
  2067. @end group
  2068. @end example
  2069. @end ifnottex
  2070. The @m{w_i,w[i]} coefficients could be formed by a simple set of cross
  2071. products, like @m{w_4=x_2y_2,w4=x2*y2}, @m{w_3=x_2y_1+x_1y_2,w3=x2*y1+x1*y2},
  2072. @m{w_2=x_2y_0+x_1y_1+x_0y_2,w2=x2*y0+x1*y1+x0*y2} etc, but this would need all
  2073. nine @m{x_iy_j,x[i]*y[j]} for @math{i,j=0,1,2}, and would be equivalent merely
  2074. to a basecase multiply.  Instead the following approach is used.
  2075. @math{X(t)} and @math{Y(t)} are evaluated and multiplied at 5 points, giving
  2076. values of @math{W(t)} at those points.  In GMP the following points are used,
  2077. @quotation
  2078. @multitable {@m{t=infty,t=inf}M} {MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM}
  2079. @item Point                 @tab Value
  2080. @item @math{t=0}            @tab @m{x_0y_0,x0 * y0}, which gives @ms{w,0} immediately
  2081. @item @math{t=1}            @tab @m{(x_2+x_1+x_0)(y_2+y_1+y_0),(x2+x1+x0) * (y2+y1+y0)}
  2082. @item @math{t=-1}           @tab @m{(x_2-x_1+x_0)(y_2-y_1+y_0),(x2-x1+x0) * (y2-y1+y0)}
  2083. @item @math{t=2}            @tab @m{(4x_2+2x_1+x_0)(4y_2+2y_1+y_0),(4*x2+2*x1+x0) * (4*y2+2*y1+y0)}
  2084. @item @m{t=infty,t=inf}    @tab @m{x_2y_2,x2 * y2}, which gives @ms{w,4} immediately
  2085. @end multitable
  2086. @end quotation
  2087. At @math{t=-1} the values can be negative and that's handled using the
  2088. absolute values and tracking the sign separately.  At @m{t=infty,t=inf} the
  2089. value is actually @m{lim_{ttoinfty} {X(t)Y(t)over t^4}, X(t)*Y(t)/t^4 in
  2090. the limit as t approaches infinity}, but it's much easier to think of as
  2091. simply @m{x_2y_2,x2*y2} giving @ms{w,4} immediately (much like
  2092. @m{x_0y_0,x0*y0} at @math{t=0} gives @ms{w,0} immediately).
  2093. Each of the points substituted into
  2094. @m{W(t)=w_4t^4+cdots+w_0,W(t)=w4*t^4+@dots{}+w0} gives a linear combination
  2095. of the @m{w_i,w[i]} coefficients, and the value of those combinations has just
  2096. been calculated.
  2097. @tex
  2098. GMPdisplay{%
  2099. $matrix{%
  2100. W(0)      & = &       &   &      &   &      &   &      &   & w_0 cr
  2101. W(1)      & = &   w_4 & + &  w_3 & + &  w_2 & + &  w_1 & + & w_0 cr
  2102. W(-1)     & = &   w_4 & - &  w_3 & + &  w_2 & - &  w_1 & + & w_0 cr
  2103. W(2)      & = & 16w_4 & + & 8w_3 & + & 4w_2 & + & 2w_1 & + & w_0 cr
  2104. W(infty) & = &   w_4 cr
  2105. }$}
  2106. @end tex
  2107. @ifnottex
  2108. @example
  2109. @group
  2110. W(0)   =                              w0
  2111. W(1)   =    w4 +   w3 +   w2 +   w1 + w0
  2112. W(-1)  =    w4 -   w3 +   w2 -   w1 + w0
  2113. W(2)   = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0
  2114. W(inf) =    w4
  2115. @end group
  2116. @end example
  2117. @end ifnottex
  2118. This is a set of five equations in five unknowns, and some elementary linear
  2119. algebra quickly isolates each @m{w_i,w[i]}.  This involves adding or
  2120. subtracting one @math{W(t)} value from another, and a couple of divisions by
  2121. powers of 2 and one division by 3, the latter using the special
  2122. @code{mpn_divexact_by3} (@pxref{Exact Division}).
  2123. The conversion of @math{W(t)} values to the coefficients is interpolation.  A
  2124. polynomial of degree 4 like @math{W(t)} is uniquely determined by values known
  2125. at 5 different points.  The points are arbitrary and can be chosen to make the
  2126. linear equations come out with a convenient set of steps for quickly isolating
  2127. the @m{w_i,w[i]}.
  2128. Squaring follows the same procedure as multiplication, but there's only one
  2129. @math{X(t)} and it's evaluated at the 5 points, and those values squared to
  2130. give values of @math{W(t)}.  The interpolation is then identical, and in fact
  2131. the same @code{toom3_interpolate} subroutine is used for both squaring and
  2132. multiplying.
  2133. Toom-3 is asymptotically @math{O(N^@W{1.465})}, the exponent being
  2134. @m{log5/log3,log(5)/log(3)}, representing 5 recursive multiplies of 1/3 the
  2135. original size each.  This is an improvement over Karatsuba at
  2136. @math{O(N^@W{1.585})}, though Toom does more work in the evaluation and
  2137. interpolation and so it only realizes its advantage above a certain size.
  2138. Near the crossover between Toom-3 and Karatsuba there's generally a range of
  2139. sizes where the difference between the two is small.
  2140. @code{MUL_TOOM33_THRESHOLD} is a somewhat arbitrary point in that range and
  2141. successive runs of the tune program can give different values due to small
  2142. variations in measuring.  A graph of time versus size for the two shows the
  2143. effect, see @file{tune/README}.
  2144. At the fairly small sizes where the Toom-3 thresholds occur it's worth
  2145. remembering that the asymptotic behaviour for Karatsuba and Toom-3 can't be
  2146. expected to make accurate predictions, due of course to the big influence of
  2147. all sorts of overheads, and the fact that only a few recursions of each are
  2148. being performed.  Even at large sizes there's a good chance machine dependent
  2149. effects like cache architecture will mean actual performance deviates from
  2150. what might be predicted.
  2151. The formula given for the Karatsuba algorithm (@pxref{Karatsuba
  2152. Multiplication}) has an equivalent for Toom-3 involving only five multiplies,
  2153. but this would be complicated and unenlightening.
  2154. An alternate view of Toom-3 can be found in Zuras (@pxref{References}), using
  2155. a vector to represent the @math{x} and @math{y} splits and a matrix
  2156. multiplication for the evaluation and interpolation stages.  The matrix
  2157. inverses are not meant to be actually used, and they have elements with values
  2158. much greater than in fact arise in the interpolation steps.  The diagram shown
  2159. for the 3-way is attractive, but again doesn't have to be implemented that way
  2160. and for example with a bit of rearrangement just one division by 6 can be
  2161. done.
  2162. @node Toom 4-Way Multiplication, FFT Multiplication, Toom 3-Way Multiplication, Multiplication Algorithms
  2163. @subsection Toom 4-Way Multiplication
  2164. @cindex Toom multiplication
  2165. Karatsuba and Toom-3 split the operands into 2 and 3 coefficients,
  2166. respectively.  Toom-4 analogously splits the operands into 4 coefficients.
  2167. Using the notation from the section on Toom-3 multiplication, we form two
  2168. polynomials:
  2169. @display
  2170. @group
  2171. @m{X(t) = x_3t^3 + x_2t^2 + x_1t + x_0,
  2172.    X(t) = x3*t^3 + x2*t^2 + x1*t + x0}
  2173. @m{Y(t) = y_3t^3 + y_2t^2 + y_1t + y_0,
  2174.    Y(t) = y3*t^3 + y2*t^2 + y1*t + y0}
  2175. @end group
  2176. @end display