1 /* mpfr.h -- Include file for mpfr.
2 
3 Copyright 1999-2020 Free Software Foundation, Inc.
4 Contributed by the AriC and Caramba projects, INRIA.
5 
6 This file is part of the GNU MPFR Library.
7 
8 The GNU MPFR Library is free software; you can redistribute it and/or modify
9 it under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12 
13 The GNU MPFR Library is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16 License for more details.
17 
18 You should have received a copy of the GNU Lesser General Public License
19 along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
20 https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
21 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22 
23 #ifndef __MPFR_H
24 #define __MPFR_H
25 
26 /* Define MPFR version number */
27 #define MPFR_VERSION_MAJOR 4
28 #define MPFR_VERSION_MINOR 1
29 #define MPFR_VERSION_PATCHLEVEL 0
30 #define MPFR_VERSION_STRING "4.1.0-p13"
31 
32 /* User macros:
33    MPFR_USE_FILE:        Define it to make MPFR define functions dealing
34                          with FILE* (auto-detect).
35    MPFR_USE_INTMAX_T:    Define it to make MPFR define functions dealing
36                          with intmax_t (auto-detect).
37    MPFR_USE_VA_LIST:     Define it to make MPFR define functions dealing
38                          with va_list (auto-detect).
39    MPFR_USE_C99_FEATURE: Define it to 1 to make MPFR support C99-feature
40                          (auto-detect), to 0 to bypass the detection.
41    MPFR_USE_EXTENSION:   Define it to make MPFR use GCC extension to
42                          reduce warnings.
43    MPFR_USE_NO_MACRO:    Define it to make MPFR remove any overriding
44                          function macro.
45 */
46 
47 /* Macros dealing with MPFR VERSION */
48 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
49 #define MPFR_VERSION \
50 MPFR_VERSION_NUM(MPFR_VERSION_MAJOR,MPFR_VERSION_MINOR,MPFR_VERSION_PATCHLEVEL)
51 
52 #ifndef MPFR_USE_MINI_GMP
53 #include <gmp.h>
54 #else
55 #include <mini-gmp.h>
56 #endif
57 
58 /* Avoid some problems with macro expansion if the user defines macros
59    with the same name as keywords. By convention, identifiers and macro
60    names starting with mpfr_ are reserved by MPFR. */
61 typedef void            mpfr_void;
62 typedef int             mpfr_int;
63 typedef unsigned int    mpfr_uint;
64 typedef long            mpfr_long;
65 typedef unsigned long   mpfr_ulong;
66 typedef size_t          mpfr_size_t;
67 
68 /* Global (possibly TLS) flags. Might also be used in an mpfr_t in the
69    future (there would be room as mpfr_sign_t just needs 1 byte).
70    TODO: The tests currently assume that the flags fits in an unsigned int;
71    this should be cleaned up, e.g. by defining a function that outputs the
72    flags as a string or by using the flags_out function (from tests/tests.c
73    directly). */
74 typedef unsigned int    mpfr_flags_t;
75 
76 /* Flags macros (in the public API) */
77 #define MPFR_FLAGS_UNDERFLOW 1
78 #define MPFR_FLAGS_OVERFLOW 2
79 #define MPFR_FLAGS_NAN 4
80 #define MPFR_FLAGS_INEXACT 8
81 #define MPFR_FLAGS_ERANGE 16
82 #define MPFR_FLAGS_DIVBY0 32
83 #define MPFR_FLAGS_ALL (MPFR_FLAGS_UNDERFLOW | \
84                         MPFR_FLAGS_OVERFLOW  | \
85                         MPFR_FLAGS_NAN       | \
86                         MPFR_FLAGS_INEXACT   | \
87                         MPFR_FLAGS_ERANGE    | \
88                         MPFR_FLAGS_DIVBY0)
89 
90 /* Definition of rounding modes (DON'T USE MPFR_RNDNA!).
91    Warning! Changing the contents of this enum should be seen as an
92    interface change since the old and the new types are not compatible
93    (the integer type compatible with the enumerated type can even change,
94    see ISO C99, 6.7.2.2#4), and in Makefile.am, AGE should be set to 0.
95 
96    MPFR_RNDU must appear just before MPFR_RNDD (see
97    MPFR_IS_RNDUTEST_OR_RNDDNOTTEST in mpfr-impl.h).
98 
99    If you change the order of the rounding modes, please update the routines
100    in texceptions.c which assume 0=RNDN, 1=RNDZ, 2=RNDU, 3=RNDD, 4=RNDA.
101 */
102 typedef enum {
103   MPFR_RNDN=0,  /* round to nearest, with ties to even */
104   MPFR_RNDZ,    /* round toward zero */
105   MPFR_RNDU,    /* round toward +Inf */
106   MPFR_RNDD,    /* round toward -Inf */
107   MPFR_RNDA,    /* round away from zero */
108   MPFR_RNDF,    /* faithful rounding */
109   MPFR_RNDNA=-1 /* round to nearest, with ties away from zero (mpfr_round) */
110 } mpfr_rnd_t;
111 
112 /* kept for compatibility with MPFR 2.4.x and before */
113 #define GMP_RNDN MPFR_RNDN
114 #define GMP_RNDZ MPFR_RNDZ
115 #define GMP_RNDU MPFR_RNDU
116 #define GMP_RNDD MPFR_RNDD
117 
118 /* The _MPFR_PREC_FORMAT and _MPFR_EXP_FORMAT values are automatically
119    defined below. You MUST NOT force a value (this will break the ABI),
120    possibly except for a very particular use, in which case you also need
121    to rebuild the MPFR library with the chosen values; do not install this
122    rebuilt library in a path that is searched by default, otherwise this
123    will break applications that are dynamically linked with MPFR.
124 
125    Using non-default values is not guaranteed to work.
126 
127    Note: With the following default choices for _MPFR_PREC_FORMAT and
128    _MPFR_EXP_FORMAT, mpfr_exp_t will be the same as [mp_exp_t] (at least
129    up to GMP 6). */
130 
131 /* Define precision: 1 (short), 2 (int) or 3 (long).
132    DON'T FORCE A VALUE (see above). */
133 #ifndef _MPFR_PREC_FORMAT
134 # if __GMP_MP_SIZE_T_INT
135 #  define _MPFR_PREC_FORMAT 2
136 # else
137 #  define _MPFR_PREC_FORMAT 3
138 # endif
139 #endif
140 
141 /* Define exponent: 1 (short), 2 (int), 3 (long) or 4 (intmax_t).
142    DON'T FORCE A VALUE (see above). */
143 #ifndef _MPFR_EXP_FORMAT
144 # define _MPFR_EXP_FORMAT _MPFR_PREC_FORMAT
145 #endif
146 
147 #if _MPFR_PREC_FORMAT > _MPFR_EXP_FORMAT
148 # error "mpfr_prec_t must not be larger than mpfr_exp_t"
149 #endif
150 
151 /* Let's make mpfr_prec_t signed in order to avoid problems due to the
152    usual arithmetic conversions when mixing mpfr_prec_t and mpfr_exp_t
153    in an expression (for error analysis) if casts are forgotten.
154    Note: mpfr_prec_t is currently limited to "long". This means that
155    under MS Windows, the precisions are limited to about 2^31; however,
156    these are already huge precisions, probably sufficient in practice
157    on this platform. */
158 #if   _MPFR_PREC_FORMAT == 1
159 typedef short mpfr_prec_t;
160 typedef unsigned short mpfr_uprec_t;
161 #elif _MPFR_PREC_FORMAT == 2
162 typedef int   mpfr_prec_t;
163 typedef unsigned int   mpfr_uprec_t;
164 #elif _MPFR_PREC_FORMAT == 3
165 /* we could use "long long" under Windows 64 here, which can be tested
166    with the macro _WIN64 according to
167    https://sourceforge.net/p/predef/wiki/OperatingSystems/ */
168 typedef long  mpfr_prec_t;
169 typedef unsigned long  mpfr_uprec_t;
170 #else
171 # error "Invalid MPFR Prec format"
172 #endif
173 
174 /* Definition of precision limits without needing <limits.h> */
175 /* Note: The casts allows the expression to yield the wanted behavior
176    for _MPFR_PREC_FORMAT == 1 (due to integer promotion rules). We
177    also make sure that MPFR_PREC_MIN and MPFR_PREC_MAX have a signed
178    integer type. The "- 256" allows more security, avoiding some
179    integer overflows in extreme cases; ideally it should be useless. */
180 #define MPFR_PREC_MIN 1
181 #define MPFR_PREC_MAX ((mpfr_prec_t) ((((mpfr_uprec_t) -1) >> 1) - 256))
182 
183 /* Definition of sign */
184 typedef int          mpfr_sign_t;
185 
186 /* Definition of the exponent. _MPFR_EXP_FORMAT must be large enough
187    so that mpfr_exp_t has at least 32 bits. */
188 #if   _MPFR_EXP_FORMAT == 1
189 typedef short mpfr_exp_t;
190 typedef unsigned short mpfr_uexp_t;
191 #elif _MPFR_EXP_FORMAT == 2
192 typedef int mpfr_exp_t;
193 typedef unsigned int mpfr_uexp_t;
194 #elif _MPFR_EXP_FORMAT == 3
195 typedef long mpfr_exp_t;
196 typedef unsigned long mpfr_uexp_t;
197 #elif _MPFR_EXP_FORMAT == 4
198 /* Note: in this case, intmax_t and uintmax_t must be defined before
199    the inclusion of mpfr.h (we do not include <stdint.h> here because
200    of some non-ISO C99 implementations that support these types). */
201 typedef intmax_t mpfr_exp_t;
202 typedef uintmax_t mpfr_uexp_t;
203 #else
204 # error "Invalid MPFR Exp format"
205 #endif
206 
207 /* Definition of the standard exponent limits */
208 #define MPFR_EMAX_DEFAULT ((mpfr_exp_t) (((mpfr_ulong) 1 << 30) - 1))
209 #define MPFR_EMIN_DEFAULT (-(MPFR_EMAX_DEFAULT))
210 
211 /* DON'T USE THIS! (For MPFR-public macros only, see below.)
212    The mpfr_sgn macro uses the fact that __MPFR_EXP_NAN and __MPFR_EXP_ZERO
213    are the smallest values. For a n-bit type, EXP_MAX is 2^(n-1)-1,
214    EXP_ZERO is 1-2^(n-1), EXP_NAN is 2-2^(n-1), EXP_INF is 3-2^(n-1).
215    This may change in the future. MPFR code should not be based on these
216    representations (but if this is absolutely needed, protect the code
217    with a static assertion). */
218 #define __MPFR_EXP_MAX ((mpfr_exp_t) (((mpfr_uexp_t) -1) >> 1))
219 #define __MPFR_EXP_NAN  (1 - __MPFR_EXP_MAX)
220 #define __MPFR_EXP_ZERO (0 - __MPFR_EXP_MAX)
221 #define __MPFR_EXP_INF  (2 - __MPFR_EXP_MAX)
222 
223 /* Definition of the main structure */
224 typedef struct {
225   mpfr_prec_t  _mpfr_prec;
226   mpfr_sign_t  _mpfr_sign;
227   mpfr_exp_t   _mpfr_exp;
228   mp_limb_t   *_mpfr_d;
229 } __mpfr_struct;
230 
231 /* Compatibility with previous types of MPFR */
232 #ifndef mp_rnd_t
233 # define mp_rnd_t  mpfr_rnd_t
234 #endif
235 #ifndef mp_prec_t
236 # define mp_prec_t mpfr_prec_t
237 #endif
238 
239 /*
240    The represented number is
241       _sign*(_d[k-1]/B+_d[k-2]/B^2+...+_d[0]/B^k)*2^_exp
242    where k=ceil(_mp_prec/GMP_NUMB_BITS) and B=2^GMP_NUMB_BITS.
243 
244    For the msb (most significant bit) normalized representation, we must have
245       _d[k-1]>=B/2, unless the number is singular.
246 
247    We must also have the last k*GMP_NUMB_BITS-_prec bits set to zero.
248 */
249 
250 typedef __mpfr_struct mpfr_t[1];
251 typedef __mpfr_struct *mpfr_ptr;
252 typedef const __mpfr_struct *mpfr_srcptr;
253 
254 /* For those who need a direct and fast access to the sign field.
255    However it is not in the API, thus use it at your own risk: it might
256    not be supported, or change name, in further versions!
257    Unfortunately, it must be defined here (instead of MPFR's internal
258    header file mpfr-impl.h) because it is used by some macros below.
259 */
260 #define MPFR_SIGN(x) ((x)->_mpfr_sign)
261 
262 /* Stack interface */
263 typedef enum {
264   MPFR_NAN_KIND     = 0,
265   MPFR_INF_KIND     = 1,
266   MPFR_ZERO_KIND    = 2,
267   MPFR_REGULAR_KIND = 3
268 } mpfr_kind_t;
269 
270 /* Free cache policy */
271 typedef enum {
272   MPFR_FREE_LOCAL_CACHE  = 1,  /* 1 << 0 */
273   MPFR_FREE_GLOBAL_CACHE = 2   /* 1 << 1 */
274 } mpfr_free_cache_t;
275 
276 /* GMP defines:
277     + size_t:                Standard size_t
278     + __GMP_NOTHROW          For C++: can't throw .
279     + __GMP_EXTERN_INLINE    Attribute for inline function.
280     + __GMP_DECLSPEC_EXPORT  compiling to go into a DLL
281     + __GMP_DECLSPEC_IMPORT  compiling to go into a application
282 */
283 /* Extra MPFR defines */
284 #define __MPFR_SENTINEL_ATTR
285 #if defined (__GNUC__)
286 # if __GNUC__ >= 4
287 #  undef __MPFR_SENTINEL_ATTR
288 #  define __MPFR_SENTINEL_ATTR __attribute__ ((__sentinel__))
289 # endif
290 #endif
291 
292 /* If the user hasn't requested his/her preference
293    and if the intention of support by the compiler is C99
294    and if the compiler is known to support the C99 feature
295    then we can auto-detect the C99 support as OK.
296    __GNUC__ is used to detect GNU-C, ICC & CLANG compilers.
297    Currently we need only variadic macros, and they are present
298    since GCC >= 3. We don't test library version since we don't
299    use any feature present in the library too (except intmax_t,
300    but they use another detection).*/
301 #ifndef MPFR_USE_C99_FEATURE
302 # if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
303 #  if defined (__GNUC__)
304 #   if __GNUC__ >= 3
305 #    define MPFR_USE_C99_FEATURE 1
306 #   endif
307 #  endif
308 # endif
309 # ifndef MPFR_USE_C99_FEATURE
310 #  define MPFR_USE_C99_FEATURE 0
311 # endif
312 #endif
313 
314 /* Support for WINDOWS Dll:
315    Check if we are inside a MPFR build, and if so export the functions.
316    Otherwise does the same thing as GMP */
317 #if defined(__MPFR_WITHIN_MPFR) && __GMP_LIBGMP_DLL
318 # define __MPFR_DECLSPEC __GMP_DECLSPEC_EXPORT
319 #else
320 # ifndef __GMP_DECLSPEC
321 #  define __GMP_DECLSPEC
322 # endif
323 # define __MPFR_DECLSPEC __GMP_DECLSPEC
324 #endif
325 
326 /* Use MPFR_DEPRECATED to mark MPFR functions, types or variables as
327    deprecated. Code inspired by Apache Subversion's svn_types.h file.
328    For compatibility with MSVC, MPFR_DEPRECATED must be put before
329    __MPFR_DECLSPEC (not at the end of the function declaration as
330    documented in the GCC manual); GCC does not seem to care.
331    Moreover, in order to avoid a warning when testing such functions,
332    do something like:
333      +------------------------------------------
334      |#ifndef _MPFR_NO_DEPRECATED_funcname
335      |MPFR_DEPRECATED
336      |#endif
337      |__MPFR_DECLSPEC int mpfr_funcname (...);
338      +------------------------------------------
339    and in the corresponding test program:
340      +------------------------------------------
341      |#define _MPFR_NO_DEPRECATED_funcname
342      |#include "mpfr-test.h"
343      +------------------------------------------
344 */
345 #if defined(__GNUC__) && \
346   (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
347 # define MPFR_DEPRECATED __attribute__ ((__deprecated__))
348 #elif defined(_MSC_VER) && _MSC_VER >= 1300
349 # define MPFR_DEPRECATED __declspec(deprecated)
350 #else
351 # define MPFR_DEPRECATED
352 #endif
353 /* TODO: Also define MPFR_EXPERIMENTAL for experimental functions?
354    See SVN_EXPERIMENTAL in Subversion 1.9+ as an example:
355    __attribute__((__warning__("..."))) can be used with GCC 4.3.1+ but
356    not __llvm__, and __declspec(deprecated("...")) can be used with
357    MSC as above. */
358 
359 #if defined(__GNUC__) && \
360   (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9))
361 # define MPFR_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
362 #else
363 # define MPFR_RETURNS_NONNULL
364 #endif
365 
366 /* Note: In order to be declared, some functions need a specific
367    system header to be included *before* "mpfr.h". If the user
368    forgets to include the header, the MPFR function prototype in
369    the user object file is not correct. To avoid wrong results,
370    we raise a linker error in that case by changing their internal
371    name in the library (prefixed by __gmpfr instead of mpfr). See
372    the lines of the form "#define mpfr_xxx __gmpfr_xxx" below. */
373 
374 #if defined (__cplusplus)
375 extern "C" {
376 #endif
377 
378 __MPFR_DECLSPEC MPFR_RETURNS_NONNULL const char * mpfr_get_version (void);
379 __MPFR_DECLSPEC MPFR_RETURNS_NONNULL const char * mpfr_get_patches (void);
380 
381 __MPFR_DECLSPEC int mpfr_buildopt_tls_p          (void);
382 __MPFR_DECLSPEC int mpfr_buildopt_float128_p     (void);
383 __MPFR_DECLSPEC int mpfr_buildopt_decimal_p      (void);
384 __MPFR_DECLSPEC int mpfr_buildopt_gmpinternals_p (void);
385 __MPFR_DECLSPEC int mpfr_buildopt_sharedcache_p  (void);
386 __MPFR_DECLSPEC MPFR_RETURNS_NONNULL const char *
387   mpfr_buildopt_tune_case (void);
388 
389 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emin     (void);
390 __MPFR_DECLSPEC int        mpfr_set_emin     (mpfr_exp_t);
391 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emin_min (void);
392 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emin_max (void);
393 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emax     (void);
394 __MPFR_DECLSPEC int        mpfr_set_emax     (mpfr_exp_t);
395 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emax_min (void);
396 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_emax_max (void);
397 
398 __MPFR_DECLSPEC void mpfr_set_default_rounding_mode (mpfr_rnd_t);
399 __MPFR_DECLSPEC mpfr_rnd_t mpfr_get_default_rounding_mode (void);
400 __MPFR_DECLSPEC const char * mpfr_print_rnd_mode (mpfr_rnd_t);
401 
402 __MPFR_DECLSPEC void mpfr_clear_flags (void);
403 __MPFR_DECLSPEC void mpfr_clear_underflow (void);
404 __MPFR_DECLSPEC void mpfr_clear_overflow (void);
405 __MPFR_DECLSPEC void mpfr_clear_divby0 (void);
406 __MPFR_DECLSPEC void mpfr_clear_nanflag (void);
407 __MPFR_DECLSPEC void mpfr_clear_inexflag (void);
408 __MPFR_DECLSPEC void mpfr_clear_erangeflag (void);
409 
410 __MPFR_DECLSPEC void mpfr_set_underflow (void);
411 __MPFR_DECLSPEC void mpfr_set_overflow (void);
412 __MPFR_DECLSPEC void mpfr_set_divby0 (void);
413 __MPFR_DECLSPEC void mpfr_set_nanflag (void);
414 __MPFR_DECLSPEC void mpfr_set_inexflag (void);
415 __MPFR_DECLSPEC void mpfr_set_erangeflag (void);
416 
417 __MPFR_DECLSPEC int mpfr_underflow_p (void);
418 __MPFR_DECLSPEC int mpfr_overflow_p (void);
419 __MPFR_DECLSPEC int mpfr_divby0_p (void);
420 __MPFR_DECLSPEC int mpfr_nanflag_p (void);
421 __MPFR_DECLSPEC int mpfr_inexflag_p (void);
422 __MPFR_DECLSPEC int mpfr_erangeflag_p (void);
423 
424 __MPFR_DECLSPEC void mpfr_flags_clear (mpfr_flags_t);
425 __MPFR_DECLSPEC void mpfr_flags_set (mpfr_flags_t);
426 __MPFR_DECLSPEC mpfr_flags_t mpfr_flags_test (mpfr_flags_t);
427 __MPFR_DECLSPEC mpfr_flags_t mpfr_flags_save (void);
428 __MPFR_DECLSPEC void mpfr_flags_restore (mpfr_flags_t,
429                                          mpfr_flags_t);
430 
431 __MPFR_DECLSPEC int mpfr_check_range (mpfr_ptr, int, mpfr_rnd_t);
432 
433 __MPFR_DECLSPEC void mpfr_init2 (mpfr_ptr, mpfr_prec_t);
434 __MPFR_DECLSPEC void mpfr_init (mpfr_ptr);
435 __MPFR_DECLSPEC void mpfr_clear (mpfr_ptr);
436 
437 __MPFR_DECLSPEC void
438   mpfr_inits2 (mpfr_prec_t, mpfr_ptr, ...) __MPFR_SENTINEL_ATTR;
439 __MPFR_DECLSPEC void
440   mpfr_inits (mpfr_ptr, ...) __MPFR_SENTINEL_ATTR;
441 __MPFR_DECLSPEC void
442   mpfr_clears (mpfr_ptr, ...) __MPFR_SENTINEL_ATTR;
443 
444 __MPFR_DECLSPEC int mpfr_prec_round (mpfr_ptr, mpfr_prec_t, mpfr_rnd_t);
445 __MPFR_DECLSPEC int mpfr_can_round (mpfr_srcptr, mpfr_exp_t, mpfr_rnd_t,
446                                     mpfr_rnd_t, mpfr_prec_t);
447 __MPFR_DECLSPEC mpfr_prec_t mpfr_min_prec (mpfr_srcptr);
448 
449 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_exp (mpfr_srcptr);
450 __MPFR_DECLSPEC int mpfr_set_exp (mpfr_ptr, mpfr_exp_t);
451 __MPFR_DECLSPEC mpfr_prec_t mpfr_get_prec (mpfr_srcptr);
452 __MPFR_DECLSPEC void mpfr_set_prec (mpfr_ptr, mpfr_prec_t);
453 __MPFR_DECLSPEC void mpfr_set_prec_raw (mpfr_ptr, mpfr_prec_t);
454 __MPFR_DECLSPEC void mpfr_set_default_prec (mpfr_prec_t);
455 __MPFR_DECLSPEC mpfr_prec_t mpfr_get_default_prec (void);
456 
457 __MPFR_DECLSPEC int mpfr_set_d (mpfr_ptr, double, mpfr_rnd_t);
458 __MPFR_DECLSPEC int mpfr_set_flt (mpfr_ptr, float, mpfr_rnd_t);
459 #ifdef MPFR_WANT_DECIMAL_FLOATS
460 /* _Decimal64 is not defined in C++,
461    cf https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51364 */
462 __MPFR_DECLSPEC int mpfr_set_decimal64 (mpfr_ptr, _Decimal64, mpfr_rnd_t);
463 __MPFR_DECLSPEC int mpfr_set_decimal128 (mpfr_ptr, _Decimal128, mpfr_rnd_t);
464 #endif
465 __MPFR_DECLSPEC int mpfr_set_ld (mpfr_ptr, long double, mpfr_rnd_t);
466 #ifdef MPFR_WANT_FLOAT128
467 __MPFR_DECLSPEC int mpfr_set_float128 (mpfr_ptr, _Float128, mpfr_rnd_t);
468 __MPFR_DECLSPEC _Float128 mpfr_get_float128 (mpfr_srcptr, mpfr_rnd_t);
469 #endif
470 __MPFR_DECLSPEC int mpfr_set_z (mpfr_ptr, mpz_srcptr, mpfr_rnd_t);
471 __MPFR_DECLSPEC int mpfr_set_z_2exp (mpfr_ptr, mpz_srcptr, mpfr_exp_t,
472                                      mpfr_rnd_t);
473 __MPFR_DECLSPEC void mpfr_set_nan (mpfr_ptr);
474 __MPFR_DECLSPEC void mpfr_set_inf (mpfr_ptr, int);
475 __MPFR_DECLSPEC void mpfr_set_zero (mpfr_ptr, int);
476 
477 #ifndef MPFR_USE_MINI_GMP
478   /* mini-gmp does not provide mpf_t, we disable the following functions */
479 __MPFR_DECLSPEC int mpfr_set_f (mpfr_ptr, mpf_srcptr, mpfr_rnd_t);
480 __MPFR_DECLSPEC int mpfr_cmp_f (mpfr_srcptr, mpf_srcptr);
481 __MPFR_DECLSPEC int mpfr_get_f (mpf_ptr, mpfr_srcptr, mpfr_rnd_t);
482 #endif
483 __MPFR_DECLSPEC int mpfr_set_si (mpfr_ptr, long, mpfr_rnd_t);
484 __MPFR_DECLSPEC int mpfr_set_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
485 __MPFR_DECLSPEC int mpfr_set_si_2exp (mpfr_ptr, long, mpfr_exp_t, mpfr_rnd_t);
486 __MPFR_DECLSPEC int mpfr_set_ui_2exp (mpfr_ptr, unsigned long, mpfr_exp_t,
487                                       mpfr_rnd_t);
488 #ifndef MPFR_USE_MINI_GMP
489   /* mini-gmp does not provide mpq_t, we disable the following functions */
490 __MPFR_DECLSPEC int mpfr_set_q (mpfr_ptr, mpq_srcptr, mpfr_rnd_t);
491 __MPFR_DECLSPEC int mpfr_mul_q (mpfr_ptr, mpfr_srcptr, mpq_srcptr, mpfr_rnd_t);
492 __MPFR_DECLSPEC int mpfr_div_q (mpfr_ptr, mpfr_srcptr, mpq_srcptr, mpfr_rnd_t);
493 __MPFR_DECLSPEC int mpfr_add_q (mpfr_ptr, mpfr_srcptr, mpq_srcptr, mpfr_rnd_t);
494 __MPFR_DECLSPEC int mpfr_sub_q (mpfr_ptr, mpfr_srcptr, mpq_srcptr, mpfr_rnd_t);
495 __MPFR_DECLSPEC int mpfr_cmp_q (mpfr_srcptr, mpq_srcptr);
496 __MPFR_DECLSPEC void mpfr_get_q (mpq_ptr q, mpfr_srcptr f);
497 #endif
498 __MPFR_DECLSPEC int mpfr_set_str (mpfr_ptr, const char *, int, mpfr_rnd_t);
499 __MPFR_DECLSPEC int mpfr_init_set_str (mpfr_ptr, const char *, int,
500                                        mpfr_rnd_t);
501 __MPFR_DECLSPEC int mpfr_set4 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t, int);
502 __MPFR_DECLSPEC int mpfr_abs (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
503 __MPFR_DECLSPEC int mpfr_set (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
504 __MPFR_DECLSPEC int mpfr_neg (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
505 __MPFR_DECLSPEC int mpfr_signbit (mpfr_srcptr);
506 __MPFR_DECLSPEC int mpfr_setsign (mpfr_ptr, mpfr_srcptr, int, mpfr_rnd_t);
507 __MPFR_DECLSPEC int mpfr_copysign (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
508                                    mpfr_rnd_t);
509 
510 __MPFR_DECLSPEC mpfr_exp_t mpfr_get_z_2exp (mpz_ptr, mpfr_srcptr);
511 __MPFR_DECLSPEC float mpfr_get_flt (mpfr_srcptr, mpfr_rnd_t);
512 __MPFR_DECLSPEC double mpfr_get_d (mpfr_srcptr, mpfr_rnd_t);
513 #ifdef MPFR_WANT_DECIMAL_FLOATS
514 __MPFR_DECLSPEC _Decimal64 mpfr_get_decimal64 (mpfr_srcptr, mpfr_rnd_t);
515 __MPFR_DECLSPEC _Decimal128 mpfr_get_decimal128 (mpfr_srcptr, mpfr_rnd_t);
516 #endif
517 __MPFR_DECLSPEC long double mpfr_get_ld (mpfr_srcptr, mpfr_rnd_t);
518 __MPFR_DECLSPEC double mpfr_get_d1 (mpfr_srcptr);
519 __MPFR_DECLSPEC double mpfr_get_d_2exp (long*, mpfr_srcptr, mpfr_rnd_t);
520 __MPFR_DECLSPEC long double mpfr_get_ld_2exp (long*, mpfr_srcptr, mpfr_rnd_t);
521 __MPFR_DECLSPEC int mpfr_frexp (mpfr_exp_t*, mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
522 __MPFR_DECLSPEC long mpfr_get_si (mpfr_srcptr, mpfr_rnd_t);
523 __MPFR_DECLSPEC unsigned long mpfr_get_ui (mpfr_srcptr, mpfr_rnd_t);
524 __MPFR_DECLSPEC size_t mpfr_get_str_ndigits (int, mpfr_prec_t);
525 __MPFR_DECLSPEC char * mpfr_get_str (char*, mpfr_exp_t*, int, size_t,
526                                      mpfr_srcptr, mpfr_rnd_t);
527 __MPFR_DECLSPEC int mpfr_get_z (mpz_ptr z, mpfr_srcptr f, mpfr_rnd_t);
528 
529 __MPFR_DECLSPEC void mpfr_free_str (char *);
530 
531 __MPFR_DECLSPEC int mpfr_urandom (mpfr_ptr, gmp_randstate_t, mpfr_rnd_t);
532 #ifndef _MPFR_NO_DEPRECATED_GRANDOM /* for the test of this function */
533 MPFR_DEPRECATED
534 #endif
535 __MPFR_DECLSPEC int mpfr_grandom (mpfr_ptr, mpfr_ptr, gmp_randstate_t,
536                                   mpfr_rnd_t);
537 __MPFR_DECLSPEC int mpfr_nrandom (mpfr_ptr, gmp_randstate_t, mpfr_rnd_t);
538 __MPFR_DECLSPEC int mpfr_erandom (mpfr_ptr, gmp_randstate_t, mpfr_rnd_t);
539 __MPFR_DECLSPEC int mpfr_urandomb (mpfr_ptr, gmp_randstate_t);
540 
541 __MPFR_DECLSPEC void mpfr_nextabove (mpfr_ptr);
542 __MPFR_DECLSPEC void mpfr_nextbelow (mpfr_ptr);
543 __MPFR_DECLSPEC void mpfr_nexttoward (mpfr_ptr, mpfr_srcptr);
544 
545 #ifndef MPFR_USE_MINI_GMP
546 __MPFR_DECLSPEC int mpfr_printf (const char*, ...);
547 __MPFR_DECLSPEC int mpfr_asprintf (char**, const char*, ...);
548 __MPFR_DECLSPEC int mpfr_sprintf (char*, const char*, ...);
549 __MPFR_DECLSPEC int mpfr_snprintf (char*, size_t, const char*, ...);
550 #endif
551 
552 __MPFR_DECLSPEC int mpfr_pow (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
553 __MPFR_DECLSPEC int mpfr_pow_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
554 __MPFR_DECLSPEC int mpfr_pow_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
555                                  mpfr_rnd_t);
556 __MPFR_DECLSPEC int mpfr_ui_pow_ui (mpfr_ptr, unsigned long, unsigned long,
557                                     mpfr_rnd_t);
558 __MPFR_DECLSPEC int mpfr_ui_pow (mpfr_ptr, unsigned long, mpfr_srcptr,
559                                  mpfr_rnd_t);
560 __MPFR_DECLSPEC int mpfr_pow_z (mpfr_ptr, mpfr_srcptr, mpz_srcptr, mpfr_rnd_t);
561 
562 __MPFR_DECLSPEC int mpfr_sqrt (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
563 __MPFR_DECLSPEC int mpfr_sqrt_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
564 __MPFR_DECLSPEC int mpfr_rec_sqrt (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
565 
566 __MPFR_DECLSPEC int mpfr_add (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
567 __MPFR_DECLSPEC int mpfr_sub (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
568 __MPFR_DECLSPEC int mpfr_mul (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
569 __MPFR_DECLSPEC int mpfr_div (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
570 
571 __MPFR_DECLSPEC int mpfr_add_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
572                                  mpfr_rnd_t);
573 __MPFR_DECLSPEC int mpfr_sub_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
574                                  mpfr_rnd_t);
575 __MPFR_DECLSPEC int mpfr_ui_sub (mpfr_ptr, unsigned long, mpfr_srcptr,
576                                  mpfr_rnd_t);
577 __MPFR_DECLSPEC int mpfr_mul_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
578                                  mpfr_rnd_t);
579 __MPFR_DECLSPEC int mpfr_div_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
580                                  mpfr_rnd_t);
581 __MPFR_DECLSPEC int mpfr_ui_div (mpfr_ptr, unsigned long, mpfr_srcptr,
582                                  mpfr_rnd_t);
583 
584 __MPFR_DECLSPEC int mpfr_add_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
585 __MPFR_DECLSPEC int mpfr_sub_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
586 __MPFR_DECLSPEC int mpfr_si_sub (mpfr_ptr, long, mpfr_srcptr, mpfr_rnd_t);
587 __MPFR_DECLSPEC int mpfr_mul_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
588 __MPFR_DECLSPEC int mpfr_div_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
589 __MPFR_DECLSPEC int mpfr_si_div (mpfr_ptr, long, mpfr_srcptr, mpfr_rnd_t);
590 
591 __MPFR_DECLSPEC int mpfr_add_d (mpfr_ptr, mpfr_srcptr, double, mpfr_rnd_t);
592 __MPFR_DECLSPEC int mpfr_sub_d (mpfr_ptr, mpfr_srcptr, double, mpfr_rnd_t);
593 __MPFR_DECLSPEC int mpfr_d_sub (mpfr_ptr, double, mpfr_srcptr, mpfr_rnd_t);
594 __MPFR_DECLSPEC int mpfr_mul_d (mpfr_ptr, mpfr_srcptr, double, mpfr_rnd_t);
595 __MPFR_DECLSPEC int mpfr_div_d (mpfr_ptr, mpfr_srcptr, double, mpfr_rnd_t);
596 __MPFR_DECLSPEC int mpfr_d_div (mpfr_ptr, double, mpfr_srcptr, mpfr_rnd_t);
597 
598 __MPFR_DECLSPEC int mpfr_sqr (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
599 
600 __MPFR_DECLSPEC int mpfr_const_pi (mpfr_ptr, mpfr_rnd_t);
601 __MPFR_DECLSPEC int mpfr_const_log2 (mpfr_ptr, mpfr_rnd_t);
602 __MPFR_DECLSPEC int mpfr_const_euler (mpfr_ptr, mpfr_rnd_t);
603 __MPFR_DECLSPEC int mpfr_const_catalan (mpfr_ptr, mpfr_rnd_t);
604 
605 __MPFR_DECLSPEC int mpfr_agm (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
606 
607 __MPFR_DECLSPEC int mpfr_log (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
608 __MPFR_DECLSPEC int mpfr_log2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
609 __MPFR_DECLSPEC int mpfr_log10 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
610 __MPFR_DECLSPEC int mpfr_log1p (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
611 __MPFR_DECLSPEC int mpfr_log_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
612 
613 __MPFR_DECLSPEC int mpfr_exp (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
614 __MPFR_DECLSPEC int mpfr_exp2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
615 __MPFR_DECLSPEC int mpfr_exp10 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
616 __MPFR_DECLSPEC int mpfr_expm1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
617 __MPFR_DECLSPEC int mpfr_eint (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
618 __MPFR_DECLSPEC int mpfr_li2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
619 
620 __MPFR_DECLSPEC int mpfr_cmp  (mpfr_srcptr, mpfr_srcptr);
621 __MPFR_DECLSPEC int mpfr_cmp3 (mpfr_srcptr, mpfr_srcptr, int);
622 __MPFR_DECLSPEC int mpfr_cmp_d (mpfr_srcptr, double);
623 __MPFR_DECLSPEC int mpfr_cmp_ld (mpfr_srcptr, long double);
624 __MPFR_DECLSPEC int mpfr_cmp_ui (mpfr_srcptr, unsigned long);
625 __MPFR_DECLSPEC int mpfr_cmp_si (mpfr_srcptr, long);
626 __MPFR_DECLSPEC int mpfr_cmp_ui_2exp (mpfr_srcptr, unsigned long, mpfr_exp_t);
627 __MPFR_DECLSPEC int mpfr_cmp_si_2exp (mpfr_srcptr, long, mpfr_exp_t);
628 __MPFR_DECLSPEC int mpfr_cmpabs (mpfr_srcptr, mpfr_srcptr);
629 __MPFR_DECLSPEC int mpfr_cmpabs_ui (mpfr_srcptr, unsigned long);
630 __MPFR_DECLSPEC void mpfr_reldiff (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
631                                    mpfr_rnd_t);
632 __MPFR_DECLSPEC int mpfr_eq (mpfr_srcptr, mpfr_srcptr, unsigned long);
633 __MPFR_DECLSPEC int mpfr_sgn (mpfr_srcptr);
634 
635 __MPFR_DECLSPEC int mpfr_mul_2exp (mpfr_ptr, mpfr_srcptr, unsigned long,
636                                    mpfr_rnd_t);
637 __MPFR_DECLSPEC int mpfr_div_2exp (mpfr_ptr, mpfr_srcptr, unsigned long,
638                                    mpfr_rnd_t);
639 __MPFR_DECLSPEC int mpfr_mul_2ui (mpfr_ptr, mpfr_srcptr, unsigned long,
640                                   mpfr_rnd_t);
641 __MPFR_DECLSPEC int mpfr_div_2ui (mpfr_ptr, mpfr_srcptr, unsigned long,
642                                   mpfr_rnd_t);
643 __MPFR_DECLSPEC int mpfr_mul_2si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
644 __MPFR_DECLSPEC int mpfr_div_2si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
645 
646 __MPFR_DECLSPEC int mpfr_rint (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
647 __MPFR_DECLSPEC int mpfr_roundeven (mpfr_ptr, mpfr_srcptr);
648 __MPFR_DECLSPEC int mpfr_round (mpfr_ptr, mpfr_srcptr);
649 __MPFR_DECLSPEC int mpfr_trunc (mpfr_ptr, mpfr_srcptr);
650 __MPFR_DECLSPEC int mpfr_ceil (mpfr_ptr, mpfr_srcptr);
651 __MPFR_DECLSPEC int mpfr_floor (mpfr_ptr, mpfr_srcptr);
652 __MPFR_DECLSPEC int mpfr_rint_roundeven (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
653 __MPFR_DECLSPEC int mpfr_rint_round (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
654 __MPFR_DECLSPEC int mpfr_rint_trunc (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
655 __MPFR_DECLSPEC int mpfr_rint_ceil (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
656 __MPFR_DECLSPEC int mpfr_rint_floor (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
657 __MPFR_DECLSPEC int mpfr_frac (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
658 __MPFR_DECLSPEC int mpfr_modf (mpfr_ptr, mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
659 __MPFR_DECLSPEC int mpfr_remquo (mpfr_ptr, long*, mpfr_srcptr, mpfr_srcptr,
660                                  mpfr_rnd_t);
661 __MPFR_DECLSPEC int mpfr_remainder (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
662                                     mpfr_rnd_t);
663 __MPFR_DECLSPEC int mpfr_fmod (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
664 __MPFR_DECLSPEC int mpfr_fmodquo (mpfr_ptr, long*, mpfr_srcptr, mpfr_srcptr,
665                                   mpfr_rnd_t);
666 
667 __MPFR_DECLSPEC int mpfr_fits_ulong_p (mpfr_srcptr, mpfr_rnd_t);
668 __MPFR_DECLSPEC int mpfr_fits_slong_p (mpfr_srcptr, mpfr_rnd_t);
669 __MPFR_DECLSPEC int mpfr_fits_uint_p (mpfr_srcptr, mpfr_rnd_t);
670 __MPFR_DECLSPEC int mpfr_fits_sint_p (mpfr_srcptr, mpfr_rnd_t);
671 __MPFR_DECLSPEC int mpfr_fits_ushort_p (mpfr_srcptr, mpfr_rnd_t);
672 __MPFR_DECLSPEC int mpfr_fits_sshort_p (mpfr_srcptr, mpfr_rnd_t);
673 __MPFR_DECLSPEC int mpfr_fits_uintmax_p (mpfr_srcptr, mpfr_rnd_t);
674 __MPFR_DECLSPEC int mpfr_fits_intmax_p (mpfr_srcptr, mpfr_rnd_t);
675 
676 __MPFR_DECLSPEC void mpfr_extract (mpz_ptr, mpfr_srcptr, unsigned int);
677 __MPFR_DECLSPEC void mpfr_swap (mpfr_ptr, mpfr_ptr);
678 __MPFR_DECLSPEC void mpfr_dump (mpfr_srcptr);
679 
680 __MPFR_DECLSPEC int mpfr_nan_p (mpfr_srcptr);
681 __MPFR_DECLSPEC int mpfr_inf_p (mpfr_srcptr);
682 __MPFR_DECLSPEC int mpfr_number_p (mpfr_srcptr);
683 __MPFR_DECLSPEC int mpfr_integer_p (mpfr_srcptr);
684 __MPFR_DECLSPEC int mpfr_zero_p (mpfr_srcptr);
685 __MPFR_DECLSPEC int mpfr_regular_p (mpfr_srcptr);
686 
687 __MPFR_DECLSPEC int mpfr_greater_p (mpfr_srcptr, mpfr_srcptr);
688 __MPFR_DECLSPEC int mpfr_greaterequal_p (mpfr_srcptr, mpfr_srcptr);
689 __MPFR_DECLSPEC int mpfr_less_p (mpfr_srcptr, mpfr_srcptr);
690 __MPFR_DECLSPEC int mpfr_lessequal_p (mpfr_srcptr, mpfr_srcptr);
691 __MPFR_DECLSPEC int mpfr_lessgreater_p (mpfr_srcptr, mpfr_srcptr);
692 __MPFR_DECLSPEC int mpfr_equal_p (mpfr_srcptr, mpfr_srcptr);
693 __MPFR_DECLSPEC int mpfr_unordered_p (mpfr_srcptr, mpfr_srcptr);
694 
695 __MPFR_DECLSPEC int mpfr_atanh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
696 __MPFR_DECLSPEC int mpfr_acosh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
697 __MPFR_DECLSPEC int mpfr_asinh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
698 __MPFR_DECLSPEC int mpfr_cosh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
699 __MPFR_DECLSPEC int mpfr_sinh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
700 __MPFR_DECLSPEC int mpfr_tanh (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
701 __MPFR_DECLSPEC int mpfr_sinh_cosh (mpfr_ptr, mpfr_ptr, mpfr_srcptr,
702                                     mpfr_rnd_t);
703 
704 __MPFR_DECLSPEC int mpfr_sech (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
705 __MPFR_DECLSPEC int mpfr_csch (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
706 __MPFR_DECLSPEC int mpfr_coth (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
707 
708 __MPFR_DECLSPEC int mpfr_acos (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
709 __MPFR_DECLSPEC int mpfr_asin (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
710 __MPFR_DECLSPEC int mpfr_atan (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
711 __MPFR_DECLSPEC int mpfr_sin (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
712 __MPFR_DECLSPEC int mpfr_sin_cos (mpfr_ptr, mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
713 __MPFR_DECLSPEC int mpfr_cos (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
714 __MPFR_DECLSPEC int mpfr_tan (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
715 __MPFR_DECLSPEC int mpfr_atan2 (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
716 __MPFR_DECLSPEC int mpfr_sec (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
717 __MPFR_DECLSPEC int mpfr_csc (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
718 __MPFR_DECLSPEC int mpfr_cot (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
719 
720 __MPFR_DECLSPEC int mpfr_hypot (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
721 __MPFR_DECLSPEC int mpfr_erf (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
722 __MPFR_DECLSPEC int mpfr_erfc (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
723 __MPFR_DECLSPEC int mpfr_cbrt (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
724 #ifndef _MPFR_NO_DEPRECATED_ROOT /* for the test of this function */
725 MPFR_DEPRECATED
726 #endif
727 __MPFR_DECLSPEC int mpfr_root (mpfr_ptr, mpfr_srcptr, unsigned long,
728                                mpfr_rnd_t);
729 __MPFR_DECLSPEC int mpfr_rootn_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
730                                    mpfr_rnd_t);
731 __MPFR_DECLSPEC int mpfr_gamma (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
732 __MPFR_DECLSPEC int mpfr_gamma_inc (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
733                                     mpfr_rnd_t);
734 __MPFR_DECLSPEC int mpfr_beta (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
735 __MPFR_DECLSPEC int mpfr_lngamma (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
736 __MPFR_DECLSPEC int mpfr_lgamma (mpfr_ptr, int *, mpfr_srcptr, mpfr_rnd_t);
737 __MPFR_DECLSPEC int mpfr_digamma (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
738 __MPFR_DECLSPEC int mpfr_zeta (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
739 __MPFR_DECLSPEC int mpfr_zeta_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
740 __MPFR_DECLSPEC int mpfr_fac_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
741 __MPFR_DECLSPEC int mpfr_j0 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
742 __MPFR_DECLSPEC int mpfr_j1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
743 __MPFR_DECLSPEC int mpfr_jn (mpfr_ptr, long, mpfr_srcptr, mpfr_rnd_t);
744 __MPFR_DECLSPEC int mpfr_y0 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
745 __MPFR_DECLSPEC int mpfr_y1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
746 __MPFR_DECLSPEC int mpfr_yn (mpfr_ptr, long, mpfr_srcptr, mpfr_rnd_t);
747 
748 __MPFR_DECLSPEC int mpfr_ai (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
749 
750 __MPFR_DECLSPEC int mpfr_min (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
751 __MPFR_DECLSPEC int mpfr_max (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
752 __MPFR_DECLSPEC int mpfr_dim (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
753 
754 __MPFR_DECLSPEC int mpfr_mul_z (mpfr_ptr, mpfr_srcptr, mpz_srcptr, mpfr_rnd_t);
755 __MPFR_DECLSPEC int mpfr_div_z (mpfr_ptr, mpfr_srcptr, mpz_srcptr, mpfr_rnd_t);
756 __MPFR_DECLSPEC int mpfr_add_z (mpfr_ptr, mpfr_srcptr, mpz_srcptr, mpfr_rnd_t);
757 __MPFR_DECLSPEC int mpfr_sub_z (mpfr_ptr, mpfr_srcptr, mpz_srcptr, mpfr_rnd_t);
758 __MPFR_DECLSPEC int mpfr_z_sub (mpfr_ptr, mpz_srcptr, mpfr_srcptr, mpfr_rnd_t);
759 __MPFR_DECLSPEC int mpfr_cmp_z (mpfr_srcptr, mpz_srcptr);
760 
761 __MPFR_DECLSPEC int mpfr_fma (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr,
762                               mpfr_rnd_t);
763 __MPFR_DECLSPEC int mpfr_fms (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr,
764                               mpfr_rnd_t);
765 __MPFR_DECLSPEC int mpfr_fmma (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr,
766                                mpfr_srcptr, mpfr_rnd_t);
767 __MPFR_DECLSPEC int mpfr_fmms (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr,
768                                mpfr_srcptr, mpfr_rnd_t);
769 __MPFR_DECLSPEC int mpfr_sum (mpfr_ptr, const mpfr_ptr *, unsigned long,
770                               mpfr_rnd_t);
771 __MPFR_DECLSPEC int mpfr_dot (mpfr_ptr, const mpfr_ptr *, const mpfr_ptr *,
772                               unsigned long, mpfr_rnd_t);
773 
774 __MPFR_DECLSPEC void mpfr_free_cache (void);
775 __MPFR_DECLSPEC void mpfr_free_cache2 (mpfr_free_cache_t);
776 __MPFR_DECLSPEC void mpfr_free_pool (void);
777 __MPFR_DECLSPEC int mpfr_mp_memory_cleanup (void);
778 
779 __MPFR_DECLSPEC int mpfr_subnormalize (mpfr_ptr, int, mpfr_rnd_t);
780 
781 __MPFR_DECLSPEC int mpfr_strtofr (mpfr_ptr, const char *, char **, int,
782                                   mpfr_rnd_t);
783 
784 __MPFR_DECLSPEC void mpfr_round_nearest_away_begin (mpfr_ptr);
785 __MPFR_DECLSPEC int mpfr_round_nearest_away_end (mpfr_ptr, int);
786 
787 __MPFR_DECLSPEC size_t mpfr_custom_get_size (mpfr_prec_t);
788 __MPFR_DECLSPEC void mpfr_custom_init (void *, mpfr_prec_t);
789 __MPFR_DECLSPEC MPFR_RETURNS_NONNULL void *
790   mpfr_custom_get_significand (mpfr_srcptr);
791 __MPFR_DECLSPEC mpfr_exp_t mpfr_custom_get_exp (mpfr_srcptr);
792 __MPFR_DECLSPEC void mpfr_custom_move (mpfr_ptr, void *);
793 __MPFR_DECLSPEC void mpfr_custom_init_set (mpfr_ptr, int, mpfr_exp_t,
794                                            mpfr_prec_t, void *);
795 __MPFR_DECLSPEC int mpfr_custom_get_kind (mpfr_srcptr);
796 
797 __MPFR_DECLSPEC int mpfr_total_order_p (mpfr_srcptr, mpfr_srcptr);
798 
799 #if defined (__cplusplus)
800 }
801 #endif
802 
803 /* Define MPFR_USE_EXTENSION to avoid "gcc -pedantic" warnings. */
804 #ifndef MPFR_EXTENSION
805 # if defined(MPFR_USE_EXTENSION)
806 #  define MPFR_EXTENSION __extension__
807 # else
808 #  define MPFR_EXTENSION
809 # endif
810 #endif
811 
812 /* Warning! This macro doesn't work with K&R C (e.g., compare the "gcc -E"
813    output with and without -traditional) and shouldn't be used internally.
814    For public use only, but see the MPFR manual. */
815 #define MPFR_DECL_INIT(_x, _p)                                        \
816   MPFR_EXTENSION mp_limb_t __gmpfr_local_tab_##_x[((_p)-1)/GMP_NUMB_BITS+1]; \
817   MPFR_EXTENSION mpfr_t _x = {{(_p),1,__MPFR_EXP_NAN,__gmpfr_local_tab_##_x}}
818 
819 #if MPFR_USE_C99_FEATURE
820 /* C99 & C11 version: functions with multiple inputs supported */
821 #define mpfr_round_nearest_away(func, rop, ...)                         \
822   (mpfr_round_nearest_away_begin(rop),                                  \
823    mpfr_round_nearest_away_end((rop), func((rop), __VA_ARGS__, MPFR_RNDN)))
824 #else
825 /* C89 version: function with one input supported */
826 #define mpfr_round_nearest_away(func, rop, op)                          \
827   (mpfr_round_nearest_away_begin(rop),                                  \
828    mpfr_round_nearest_away_end((rop), func((rop), (op), MPFR_RNDN)))
829 #endif
830 
831 /* Fast access macros to replace function interface.
832    If the USER don't want to use the macro interface, let him make happy
833    even if it produces faster and smaller code. */
834 #ifndef MPFR_USE_NO_MACRO
835 
836 /* In the implementation of these macros, we need to make sure that the
837    arguments are evaluated one time exactly and that type conversion is
838    done as it would be with a function. Tests should be added to ensure
839    that.
840    Note that the macros for the custom interface are not concerned; the
841    MPFR manual has been clarified. */
842 
843 /* Prevent x from being used as an lvalue.
844    Thanks to Wojtek Lerch and Tim Rentsch for the idea. */
845 #define MPFR_VALUE_OF(x)  (0 ? (x) : (x))
846 
847 /* The following macro converts the argument to mpfr_srcptr, as in type
848    conversion for function parameters. But it will detect disallowed
849    implicit conversions, e.g. when the argument has an integer type. */
850 #define MPFR_SRCPTR(x) ((mpfr_srcptr) (0 ? (x) : (mpfr_srcptr) (x)))
851 #define MPFR_GET_SIGN(_x) MPFR_VALUE_OF(MPFR_SIGN(MPFR_SRCPTR(_x)))
852 
853 #define mpfr_nan_p(_x)      (MPFR_SRCPTR(_x)->_mpfr_exp == __MPFR_EXP_NAN)
854 #define mpfr_inf_p(_x)      (MPFR_SRCPTR(_x)->_mpfr_exp == __MPFR_EXP_INF)
855 #define mpfr_zero_p(_x)     (MPFR_SRCPTR(_x)->_mpfr_exp == __MPFR_EXP_ZERO)
856 #define mpfr_regular_p(_x)  (MPFR_SRCPTR(_x)->_mpfr_exp >  __MPFR_EXP_INF)
857 
858 /* mpfr_sgn is documented as a macro, thus the following code is fine.
859    But it would be safer to regard it as a function in some future
860    MPFR version. */
861 #define mpfr_sgn(_x)                                               \
862   ((_x)->_mpfr_exp < __MPFR_EXP_INF ?                              \
863    (mpfr_nan_p (_x) ? mpfr_set_erangeflag () : (mpfr_void) 0), 0 : \
864    MPFR_SIGN (_x))
865 
866 #define mpfr_get_prec(_x) MPFR_VALUE_OF(MPFR_SRCPTR(_x)->_mpfr_prec)
867 #define mpfr_get_exp(_x)  MPFR_VALUE_OF(MPFR_SRCPTR(_x)->_mpfr_exp)
868 /* Note: Defining mpfr_get_exp() as a macro has the effect to disable
869    the check that the argument is a pure FP number (done in the function);
870    this increases the risk of undetected error and makes debugging more
871    complex. Is it really worth in practice? (Potential FIXME) */
872 
873 #define mpfr_round(a,b) mpfr_rint((a), (b), MPFR_RNDNA)
874 #define mpfr_trunc(a,b) mpfr_rint((a), (b), MPFR_RNDZ)
875 #define mpfr_ceil(a,b)  mpfr_rint((a), (b), MPFR_RNDU)
876 #define mpfr_floor(a,b) mpfr_rint((a), (b), MPFR_RNDD)
877 
878 #define mpfr_cmp_ui(b,i) mpfr_cmp_ui_2exp((b),(i),0)
879 #define mpfr_cmp_si(b,i) mpfr_cmp_si_2exp((b),(i),0)
880 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
881 #define mpfr_set(a,b,r)                         \
882   __extension__ ({                              \
883       mpfr_srcptr _p = (b);                     \
884       mpfr_set4(a,_p,r,MPFR_SIGN(_p));          \
885     })
886 #endif
887 #define mpfr_abs(a,b,r)  mpfr_set4(a,b,r,1)
888 #define mpfr_copysign(a,b,c,r) mpfr_set4(a,b,r,MPFR_GET_SIGN(c))
889 #define mpfr_setsign(a,b,s,r) mpfr_set4(a,b,r,(s) ? -1 : 1)
890 #define mpfr_signbit(x)  (MPFR_GET_SIGN(x) < 0)
891 #define mpfr_cmp(b, c)   mpfr_cmp3(b, c, 1)
892 #define mpfr_mul_2exp(y,x,n,r) mpfr_mul_2ui((y),(x),(n),(r))
893 #define mpfr_div_2exp(y,x,n,r) mpfr_div_2ui((y),(x),(n),(r))
894 
895 
896 /* When using GCC or ICC, optimize certain common comparisons and affectations.
897    Added casts to improve robustness in case of undefined behavior and
898    compiler extensions based on UB (in particular -fwrapv). MPFR doesn't
899    use such extensions, but these macros will be used by 3rd-party code,
900    where such extensions may be required.
901    Moreover casts to unsigned long have been added to avoid warnings in
902    programs that use MPFR and are compiled with -Wconversion; such casts
903    are OK since if X is a constant expression, then (unsigned long) X is
904    also a constant expression, so that the optimizations still work. The
905    warnings are probably related to the following two bugs:
906      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=4210
907      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38470 (possibly a variant)
908    and the casts could be removed once these bugs are fixed.
909    Casts shouldn't be used on the generic calls (to the ..._2exp functions),
910    where implicit conversions are performed. Indeed, having at least one
911    implicit conversion in the macro allows the compiler to emit diagnostics
912    when normally expected, for instance in the following call:
913      mpfr_set_ui (x, "foo", MPFR_RNDN);
914    If this is not possible (for future macros), one of the tricks described
915    on http://groups.google.com/group/comp.std.c/msg/e92abd24bf9eaf7b could
916    be used. */
917 #if defined (__GNUC__) && !defined(__cplusplus)
918 #if (__GNUC__ >= 2)
919 
920 #undef mpfr_cmp_ui
921 /* We use the fact that mpfr_sgn on NaN sets the erange flag and returns 0.
922    But warning! mpfr_sgn is specified as a macro in the API, thus the macro
923    mustn't be used if side effects are possible, like here. */
924 #define mpfr_cmp_ui(_f,_u)                                      \
925   (__builtin_constant_p (_u) && (mpfr_ulong) (_u) == 0 ?        \
926    (mpfr_sgn) (_f) :                                            \
927    mpfr_cmp_ui_2exp ((_f), (_u), 0))
928 
929 #undef mpfr_cmp_si
930 #define mpfr_cmp_si(_f,_s)                                      \
931   (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ?         \
932    mpfr_cmp_ui ((_f), (mpfr_ulong) (mpfr_long) (_s)) :          \
933    mpfr_cmp_si_2exp ((_f), (_s), 0))
934 
935 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
936 #undef mpfr_set_ui
937 #define mpfr_set_ui(_f,_u,_r)                                   \
938   (__builtin_constant_p (_u) && (mpfr_ulong) (_u) == 0 ?        \
939    __extension__ ({                                             \
940        mpfr_ptr _p = (_f);                                      \
941        _p->_mpfr_sign = 1;                                      \
942        _p->_mpfr_exp = __MPFR_EXP_ZERO;                         \
943        (mpfr_void) (_r); 0; }) :                                \
944    mpfr_set_ui_2exp ((_f), (_u), 0, (_r)))
945 #endif
946 
947 #undef mpfr_set_si
948 #define mpfr_set_si(_f,_s,_r)                                   \
949   (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ?         \
950    mpfr_set_ui ((_f), (mpfr_ulong) (mpfr_long) (_s), (_r)) :    \
951    mpfr_set_si_2exp ((_f), (_s), 0, (_r)))
952 
953 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
954 /* If the source is a constant number that is a power of 2,
955    optimize the call */
956 #undef mpfr_mul_ui
957 #define mpfr_mul_ui(_f, _g, _u,_r)                              \
958   (__builtin_constant_p (_u) && (mpfr_ulong) (_u) >= 1 &&       \
959    ((mpfr_ulong) (_u) & ((mpfr_ulong) (_u) - 1)) == 0 ?         \
960    mpfr_mul_2si((_f), (_g), __builtin_ctzl (_u), (_r)) :        \
961    mpfr_mul_ui ((_f), (_g), (_u), (_r)))
962 #undef mpfr_div_ui
963 #define mpfr_div_ui(_f, _g, _u,_r)                              \
964   (__builtin_constant_p (_u) && (mpfr_ulong) (_u) >= 1 &&       \
965    ((mpfr_ulong) (_u) & ((mpfr_ulong) (_u) - 1)) == 0 ?         \
966    mpfr_mul_2si((_f), (_g), - __builtin_ctzl (_u), (_r)) :      \
967    mpfr_div_ui ((_f), (_g), (_u), (_r)))
968 #endif
969 
970 /* If the source is a constant number that is non-negative,
971    optimize the call */
972 #undef mpfr_mul_si
973 #define mpfr_mul_si(_f, _g, _s,_r)                                      \
974   (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ?                 \
975    mpfr_mul_ui ((_f), (_g), (mpfr_ulong) (mpfr_long) (_s), (_r)) :      \
976    mpfr_mul_si ((_f), (_g), (_s), (_r)))
977 #undef mpfr_div_si
978 #define mpfr_div_si(_f, _g, _s,_r)                                      \
979   (__builtin_constant_p (_s) && (mpfr_long) (_s) >= 0 ?                 \
980    mpfr_div_ui ((_f), (_g), (mpfr_ulong) (mpfr_long) (_s), (_r)) :      \
981    mpfr_div_si ((_f), (_g), (_s), (_r)))
982 
983 #endif
984 #endif
985 
986 /* Macro version of mpfr_stack interface for fast access */
987 #define mpfr_custom_get_size(p) ((mpfr_size_t)                          \
988        (((p)+GMP_NUMB_BITS-1)/GMP_NUMB_BITS*sizeof (mp_limb_t)))
989 #define mpfr_custom_init(m,p) do {} while (0)
990 #define mpfr_custom_get_significand(x) ((mpfr_void*)((x)->_mpfr_d))
991 #define mpfr_custom_get_exp(x) ((x)->_mpfr_exp)
992 #define mpfr_custom_move(x,m) do { ((x)->_mpfr_d = (mp_limb_t*)(m)); } while (0)
993 #define mpfr_custom_init_set(x,k,e,p,m) do {                   \
994   mpfr_ptr _x = (x);                                           \
995   mpfr_exp_t _e;                                               \
996   mpfr_kind_t _t;                                              \
997   mpfr_int _s, _k;                                             \
998   _k = (k);                                                    \
999   if (_k >= 0)  {                                              \
1000     _t = (mpfr_kind_t) _k;                                     \
1001     _s = 1;                                                    \
1002   } else {                                                     \
1003     _t = (mpfr_kind_t) - _k;                                   \
1004     _s = -1;                                                   \
1005   }                                                            \
1006   _e = _t == MPFR_REGULAR_KIND ? (e) :                         \
1007     _t == MPFR_NAN_KIND ? __MPFR_EXP_NAN :                     \
1008     _t == MPFR_INF_KIND ? __MPFR_EXP_INF : __MPFR_EXP_ZERO;    \
1009   _x->_mpfr_prec = (p);                                        \
1010   _x->_mpfr_sign = _s;                                         \
1011   _x->_mpfr_exp  = _e;                                         \
1012   _x->_mpfr_d    = (mp_limb_t*) (m);                           \
1013  } while (0)
1014 #define mpfr_custom_get_kind(x)                                         \
1015   ( (x)->_mpfr_exp >  __MPFR_EXP_INF ?                                  \
1016     (mpfr_int) MPFR_REGULAR_KIND * MPFR_SIGN (x)                        \
1017   : (x)->_mpfr_exp == __MPFR_EXP_INF ?                                  \
1018     (mpfr_int) MPFR_INF_KIND * MPFR_SIGN (x)                            \
1019   : (x)->_mpfr_exp == __MPFR_EXP_NAN ? (mpfr_int) MPFR_NAN_KIND         \
1020   : (mpfr_int) MPFR_ZERO_KIND * MPFR_SIGN (x) )
1021 
1022 
1023 #endif /* MPFR_USE_NO_MACRO */
1024 
1025 /* These are defined to be macros */
1026 #define mpfr_init_set_si(x, i, rnd) \
1027  ( mpfr_init(x), mpfr_set_si((x), (i), (rnd)) )
1028 #define mpfr_init_set_ui(x, i, rnd) \
1029  ( mpfr_init(x), mpfr_set_ui((x), (i), (rnd)) )
1030 #define mpfr_init_set_d(x, d, rnd) \
1031  ( mpfr_init(x), mpfr_set_d((x), (d), (rnd)) )
1032 #define mpfr_init_set_ld(x, d, rnd) \
1033  ( mpfr_init(x), mpfr_set_ld((x), (d), (rnd)) )
1034 #define mpfr_init_set_z(x, i, rnd) \
1035  ( mpfr_init(x), mpfr_set_z((x), (i), (rnd)) )
1036 #ifndef MPFR_USE_MINI_GMP
1037 #define mpfr_init_set_q(x, i, rnd) \
1038  ( mpfr_init(x), mpfr_set_q((x), (i), (rnd)) )
1039 #define mpfr_init_set_f(x, y, rnd) \
1040  ( mpfr_init(x), mpfr_set_f((x), (y), (rnd)) )
1041 #endif
1042 #define mpfr_init_set(x, y, rnd) \
1043  ( mpfr_init(x), mpfr_set((x), (y), (rnd)) )
1044 
1045 /* Compatibility layer -- obsolete functions and macros */
1046 /* Note: it is not possible to output warnings, unless one defines
1047  * a deprecated variable and uses it, e.g.
1048  *   MPFR_DEPRECATED extern int mpfr_deprecated_feature;
1049  *   #define MPFR_EMIN_MIN ((void)mpfr_deprecated_feature,mpfr_get_emin_min())
1050  * (the cast to void avoids a warning because the left-hand operand
1051  * has no effect).
1052  */
1053 #define mpfr_cmp_abs mpfr_cmpabs
1054 #define mpfr_round_prec(x,r,p) mpfr_prec_round(x,p,r)
1055 #define __gmp_default_rounding_mode (mpfr_get_default_rounding_mode())
1056 #define __mpfr_emin (mpfr_get_emin())
1057 #define __mpfr_emax (mpfr_get_emax())
1058 #define __mpfr_default_fp_bit_precision (mpfr_get_default_fp_bit_precision())
1059 #define MPFR_EMIN_MIN mpfr_get_emin_min()
1060 #define MPFR_EMIN_MAX mpfr_get_emin_max()
1061 #define MPFR_EMAX_MIN mpfr_get_emax_min()
1062 #define MPFR_EMAX_MAX mpfr_get_emax_max()
1063 #define mpfr_version (mpfr_get_version())
1064 #ifndef mpz_set_fr
1065 # define mpz_set_fr mpfr_get_z
1066 #endif
1067 #define mpfr_get_z_exp mpfr_get_z_2exp
1068 #define mpfr_custom_get_mantissa mpfr_custom_get_significand
1069 
1070 #endif /* __MPFR_H */
1071 
1072 
1073 /* Check if <stdint.h> / <inttypes.h> is included or if the user
1074    explicitly wants intmax_t. Automatic detection is done by
1075    checking:
1076      - INTMAX_C and UINTMAX_C, but not if the compiler is a C++ one
1077        (as suggested by Patrick Pelissier) because the test does not
1078        work well in this case. See:
1079          https://sympa.inria.fr/sympa/arc/mpfr/2010-02/msg00025.html
1080        We do not check INTMAX_MAX and UINTMAX_MAX because under Solaris,
1081        these macros are always defined by <limits.h> (i.e. even when
1082        <stdint.h> and <inttypes.h> are not included).
1083      - _STDINT_H (defined by the glibc), _STDINT_H_ (defined under
1084        Mac OS X) and _STDINT (defined under MS Visual Studio), but
1085        this test may not work with all implementations.
1086        Portable software should not rely on these tests.
1087 */
1088 #if (defined (INTMAX_C) && defined (UINTMAX_C) && !defined(__cplusplus)) || \
1089   defined (MPFR_USE_INTMAX_T) || \
1090   defined (_STDINT_H) || defined (_STDINT_H_) || defined (_STDINT) || \
1091   defined (_SYS_STDINT_H_) /* needed for FreeBSD */
1092 # ifndef _MPFR_H_HAVE_INTMAX_T
1093 # define _MPFR_H_HAVE_INTMAX_T 1
1094 
1095 #if defined (__cplusplus)
1096 extern "C" {
1097 #endif
1098 
1099 #define mpfr_set_sj __gmpfr_set_sj
1100 #define mpfr_set_sj_2exp __gmpfr_set_sj_2exp
1101 #define mpfr_set_uj __gmpfr_set_uj
1102 #define mpfr_set_uj_2exp __gmpfr_set_uj_2exp
1103 #define mpfr_get_sj __gmpfr_mpfr_get_sj
1104 #define mpfr_get_uj __gmpfr_mpfr_get_uj
1105 __MPFR_DECLSPEC int mpfr_set_sj (mpfr_ptr, intmax_t, mpfr_rnd_t);
1106 __MPFR_DECLSPEC int mpfr_set_sj_2exp (mpfr_ptr, intmax_t, intmax_t,
1107                                       mpfr_rnd_t);
1108 __MPFR_DECLSPEC int mpfr_set_uj (mpfr_ptr, uintmax_t, mpfr_rnd_t);
1109 __MPFR_DECLSPEC int mpfr_set_uj_2exp (mpfr_ptr, uintmax_t, intmax_t,
1110                                       mpfr_rnd_t);
1111 __MPFR_DECLSPEC intmax_t mpfr_get_sj (mpfr_srcptr, mpfr_rnd_t);
1112 __MPFR_DECLSPEC uintmax_t mpfr_get_uj (mpfr_srcptr, mpfr_rnd_t);
1113 
1114 #if defined (__cplusplus)
1115 }
1116 #endif
1117 
1118 # endif /* _MPFR_H_HAVE_INTMAX_T */
1119 #endif
1120 
1121 
1122 /* Check if <stdio.h> has been included or if the user wants FILE */
1123 #if defined (_GMP_H_HAVE_FILE) || defined (MPFR_USE_FILE)
1124 # ifndef _MPFR_H_HAVE_FILE
1125 # define _MPFR_H_HAVE_FILE 1
1126 
1127 #if defined (__cplusplus)
1128 extern "C" {
1129 #endif
1130 
1131 #define mpfr_inp_str __gmpfr_inp_str
1132 #define mpfr_out_str __gmpfr_out_str
1133 __MPFR_DECLSPEC size_t mpfr_inp_str (mpfr_ptr, FILE*, int, mpfr_rnd_t);
1134 __MPFR_DECLSPEC size_t mpfr_out_str (FILE*, int, size_t, mpfr_srcptr,
1135                                      mpfr_rnd_t);
1136 #ifndef MPFR_USE_MINI_GMP
1137 #define mpfr_fprintf __gmpfr_fprintf
1138 __MPFR_DECLSPEC int mpfr_fprintf (FILE*, const char*, ...);
1139 #endif
1140 #define mpfr_fpif_export __gmpfr_fpif_export
1141 #define mpfr_fpif_import __gmpfr_fpif_import
1142 __MPFR_DECLSPEC int mpfr_fpif_export (FILE*, mpfr_ptr);
1143 __MPFR_DECLSPEC int mpfr_fpif_import (mpfr_ptr, FILE*);
1144 
1145 #if defined (__cplusplus)
1146 }
1147 #endif
1148 
1149 # endif /* _MPFR_H_HAVE_FILE */
1150 #endif
1151 
1152 
1153 /* check if <stdarg.h> has been included or if the user wants va_list */
1154 #if defined (_GMP_H_HAVE_VA_LIST) || defined (MPFR_USE_VA_LIST)
1155 # ifndef _MPFR_H_HAVE_VA_LIST
1156 # define _MPFR_H_HAVE_VA_LIST 1
1157 
1158 #if defined (__cplusplus)
1159 extern "C" {
1160 #endif
1161 
1162 #define mpfr_vprintf __gmpfr_vprintf
1163 #define mpfr_vasprintf __gmpfr_vasprintf
1164 #define mpfr_vsprintf __gmpfr_vsprintf
1165 #define mpfr_vsnprintf __gmpfr_vsnprintf
1166 __MPFR_DECLSPEC int mpfr_vprintf (const char*, va_list);
1167 __MPFR_DECLSPEC int mpfr_vasprintf (char**, const char*, va_list);
1168 __MPFR_DECLSPEC int mpfr_vsprintf (char*, const char*, va_list);
1169 __MPFR_DECLSPEC int mpfr_vsnprintf (char*, size_t, const char*, va_list);
1170 
1171 #if defined (__cplusplus)
1172 }
1173 #endif
1174 
1175 # endif /* _MPFR_H_HAVE_VA_LIST */
1176 #endif
1177 
1178 
1179 /* check if <stdarg.h> has been included and if FILE is available
1180    (see above) */
1181 #if defined (_MPFR_H_HAVE_VA_LIST) && defined (_MPFR_H_HAVE_FILE)
1182 # ifndef _MPFR_H_HAVE_VA_LIST_FILE
1183 # define _MPFR_H_HAVE_VA_LIST_FILE 1
1184 
1185 #if defined (__cplusplus)
1186 extern "C" {
1187 #endif
1188 
1189 #define mpfr_vfprintf __gmpfr_vfprintf
1190 __MPFR_DECLSPEC int mpfr_vfprintf (FILE*, const char*, va_list);
1191 
1192 #if defined (__cplusplus)
1193 }
1194 #endif
1195 
1196 # endif /* _MPFR_H_HAVE_VA_LIST_FILE */
1197 #endif
1198