BWAPI
SPAR/AIModule/BWTA/vendors/CGAL/auxiliary/gmp/include/mpfr.h
Go to the documentation of this file.
00001 /* mpfr.h -- Include file for mpfr.
00002 
00003 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
00004 Contributed by the Arenaire and Cacao projects, INRIA.
00005 
00006 This file is part of the MPFR Library.
00007 
00008 The MPFR Library is free software; you can redistribute it and/or modify
00009 it under the terms of the GNU Lesser General Public License as published by
00010 the Free Software Foundation; either version 2.1 of the License, or (at your
00011 option) any later version.
00012 
00013 The MPFR Library is distributed in the hope that it will be useful, but
00014 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
00015 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00016 License for more details.
00017 
00018 You should have received a copy of the GNU Lesser General Public License
00019 along with the MPFR Library; see the file COPYING.LIB.  If not, write to
00020 the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
00021 MA 02110-1301, USA. */
00022 
00023 #ifndef __MPFR_H
00024 #define __MPFR_H
00025 
00026 /* Define MPFR version number */
00027 #define MPFR_VERSION_MAJOR 2
00028 #define MPFR_VERSION_MINOR 3
00029 #define MPFR_VERSION_PATCHLEVEL 2
00030 #define MPFR_VERSION_STRING "2.3.2"
00031 
00032 /* Macros dealing with MPFR VERSION */
00033 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
00034 #define MPFR_VERSION \
00035 MPFR_VERSION_NUM(MPFR_VERSION_MAJOR,MPFR_VERSION_MINOR,MPFR_VERSION_PATCHLEVEL)
00036 
00037 /* Check if GMP is included, and try to include it (Works with local GMP) */
00038 #ifndef __GMP_H__
00039 # include <gmp.h>
00040 #endif
00041 
00042 /* Check if stdio.h is included or if the user wants FILE */
00043 #if defined (_GMP_H_HAVE_FILE) || defined (MPFR_USE_FILE)
00044 # define _MPFR_H_HAVE_FILE 1
00045 #endif
00046 
00047 /* Check if stdint.h/inttypes.h is included or if the user wants intmax_t */
00048 #if (defined (INTMAX_C) && defined (UINTMAX_C)) || defined (MPFR_USE_INTMAX_T)
00049 # define _MPFR_H_HAVE_INTMAX_T 1
00050 #endif
00051 
00052 /* Definition of rounding modes (DON'T USE GMP_RNDNA!)*/
00053 typedef enum {
00054   GMP_RNDN=0, GMP_RNDZ, GMP_RNDU, GMP_RNDD, GMP_RND_MAX,
00055   GMP_RNDNA=-1
00056 } mpfr_rnd_t;
00057 
00058 /* Define precision : 1 (short), 2 (int) or 3 (long) (DON'T USE IT!)*/
00059 #ifndef _MPFR_PREC_FORMAT
00060 # if __GMP_MP_SIZE_T_INT == 1
00061 #  define _MPFR_PREC_FORMAT 2
00062 # else
00063 #  define _MPFR_PREC_FORMAT 3
00064 # endif
00065 #endif
00066 
00067 #if   _MPFR_PREC_FORMAT == 1
00068 typedef unsigned short mpfr_prec_t;
00069 #elif _MPFR_PREC_FORMAT == 2
00070 typedef unsigned int   mpfr_prec_t;
00071 #elif _MPFR_PREC_FORMAT == 3
00072 typedef unsigned long  mpfr_prec_t;
00073 #else
00074 # error "Invalid MPFR Prec format"
00075 #endif
00076 
00077 /* Definition of precision limits */
00078 #define MPFR_PREC_MIN 2
00079 #define MPFR_PREC_MAX ((mpfr_prec_t)((mpfr_prec_t)(~(mpfr_prec_t)0)>>1))
00080 
00081 /* Definition of sign */
00082 typedef int          mpfr_sign_t;
00083 
00084 /* Definition of the standard exponent limits */
00085 #define MPFR_EMAX_DEFAULT ((mp_exp_t) (((unsigned long) 1 << 30) - 1))
00086 #define MPFR_EMIN_DEFAULT (-(MPFR_EMAX_DEFAULT))
00087 
00088 /* Definition of the main structure */
00089 typedef struct {
00090   mpfr_prec_t  _mpfr_prec;
00091   mpfr_sign_t  _mpfr_sign;
00092   mp_exp_t     _mpfr_exp;
00093   mp_limb_t   *_mpfr_d;
00094 } __mpfr_struct;
00095 
00096 /* Compatibility with previous types of MPFR */
00097 #ifndef mp_rnd_t
00098 # define mp_rnd_t  mpfr_rnd_t
00099 #endif
00100 #ifndef mp_prec_t
00101 # define mp_prec_t mpfr_prec_t
00102 #endif
00103 
00104 /*
00105    The represented number is
00106       _sign*(_d[k-1]/B+_d[k-2]/B^2+...+_d[0]/B^k)*2^_exp
00107    where k=ceil(_mp_prec/BITS_PER_MP_LIMB) and B=2^BITS_PER_MP_LIMB.
00108 
00109    For the msb (most significant bit) normalized representation, we must have
00110       _d[k-1]>=B/2, unless the number is singular.
00111 
00112    We must also have the last k*BITS_PER_MP_LIMB-_prec bits set to zero.
00113 */
00114 
00115 typedef __mpfr_struct mpfr_t[1];
00116 typedef __mpfr_struct *mpfr_ptr;
00117 typedef __gmp_const __mpfr_struct *mpfr_srcptr;
00118 
00119 /* For those who needs a direct access and fast access to the sign field */
00120 #define MPFR_SIGN(x) ((x)->_mpfr_sign)
00121 
00122 /* Stack interface */
00123 typedef enum {
00124   MPFR_NAN_KIND = 0,
00125   MPFR_INF_KIND = 1, MPFR_ZERO_KIND = 2, MPFR_REGULAR_KIND = 3
00126 } mpfr_kind_t;
00127 
00128 /* GMP defines:
00129     + size_t:                Standard size_t
00130     + __GMP_ATTRIBUTE_PURE   Attribute for math functions.
00131     + __GMP_NOTHROW          For C++: can't throw .
00132     + __GMP_EXTERN_INLINE    Attribute for inline function.
00133     * __gmp_const            const (Supports for K&R compiler only for mpfr.h).
00134     + __GMP_DECLSPEC_EXPORT  compiling to go into a DLL
00135     + __GMP_DECLSPEC_IMPORT  compiling to go into a application
00136 */
00137 /* Extra MPFR defines */
00138 #define __MPFR_SENTINEL_ATTR
00139 #if defined (__GNUC__)
00140 # if __GNUC__ >= 4
00141 #  undef __MPFR_SENTINEL_ATTR
00142 #  define __MPFR_SENTINEL_ATTR __attribute__ ((sentinel))
00143 # endif
00144 #endif
00145 
00146 /* Prototypes: Support of K&R compiler */
00147 #if defined (__GMP_PROTO)
00148 # define _MPFR_PROTO __GMP_PROTO
00149 #elif defined (__STDC__) || defined (__cplusplus)
00150 # define _MPFR_PROTO(x) x
00151 #else
00152 # define _MPFR_PROTO(x) ()
00153 #endif
00154 /* Support for WINDOWS Dll:
00155    Check if we are inside a MPFR build, and if so export the functions.
00156    Otherwise does the same thing as GMP */
00157 #if defined(__MPFR_WITHIN_MPFR) && __GMP_LIBGMP_DLL
00158 # define __MPFR_DECLSPEC __GMP_DECLSPEC_EXPORT
00159 #else
00160 # define __MPFR_DECLSPEC __GMP_DECLSPEC
00161 #endif
00162 
00163 #if defined (__cplusplus)
00164 extern "C" {
00165 #endif
00166 
00167 __MPFR_DECLSPEC __gmp_const char * mpfr_get_version _MPFR_PROTO ((void));
00168 __MPFR_DECLSPEC __gmp_const char * mpfr_get_patches _MPFR_PROTO ((void));
00169 
00170 __MPFR_DECLSPEC mp_exp_t mpfr_get_emin     _MPFR_PROTO ((void));
00171 __MPFR_DECLSPEC int      mpfr_set_emin     _MPFR_PROTO ((mp_exp_t));
00172 __MPFR_DECLSPEC mp_exp_t mpfr_get_emin_min _MPFR_PROTO ((void));
00173 __MPFR_DECLSPEC mp_exp_t mpfr_get_emin_max _MPFR_PROTO ((void));
00174 __MPFR_DECLSPEC mp_exp_t mpfr_get_emax     _MPFR_PROTO ((void));
00175 __MPFR_DECLSPEC int      mpfr_set_emax     _MPFR_PROTO ((mp_exp_t));
00176 __MPFR_DECLSPEC mp_exp_t mpfr_get_emax_min _MPFR_PROTO ((void));
00177 __MPFR_DECLSPEC mp_exp_t mpfr_get_emax_max _MPFR_PROTO ((void));
00178 
00179 __MPFR_DECLSPEC void mpfr_set_default_rounding_mode _MPFR_PROTO((mpfr_rnd_t));
00180 __MPFR_DECLSPEC mp_rnd_t mpfr_get_default_rounding_mode _MPFR_PROTO((void));
00181 __MPFR_DECLSPEC __gmp_const char *
00182    mpfr_print_rnd_mode _MPFR_PROTO((mpfr_rnd_t));
00183 
00184 __MPFR_DECLSPEC void mpfr_clear_flags _MPFR_PROTO ((void));
00185 __MPFR_DECLSPEC void mpfr_clear_underflow _MPFR_PROTO ((void));
00186 __MPFR_DECLSPEC void mpfr_clear_overflow _MPFR_PROTO ((void));
00187 __MPFR_DECLSPEC void mpfr_clear_nanflag _MPFR_PROTO ((void));
00188 __MPFR_DECLSPEC void mpfr_clear_inexflag _MPFR_PROTO ((void));
00189 __MPFR_DECLSPEC void mpfr_clear_erangeflag _MPFR_PROTO ((void));
00190 
00191 __MPFR_DECLSPEC void mpfr_set_underflow _MPFR_PROTO ((void));
00192 __MPFR_DECLSPEC void mpfr_set_overflow _MPFR_PROTO ((void));
00193 __MPFR_DECLSPEC void mpfr_set_nanflag _MPFR_PROTO ((void));
00194 __MPFR_DECLSPEC void mpfr_set_inexflag _MPFR_PROTO ((void));
00195 __MPFR_DECLSPEC void mpfr_set_erangeflag _MPFR_PROTO ((void));
00196 
00197 __MPFR_DECLSPEC int mpfr_underflow_p _MPFR_PROTO ((void));
00198 __MPFR_DECLSPEC int mpfr_overflow_p _MPFR_PROTO ((void));
00199 __MPFR_DECLSPEC int mpfr_nanflag_p _MPFR_PROTO ((void));
00200 __MPFR_DECLSPEC int mpfr_inexflag_p _MPFR_PROTO ((void));
00201 __MPFR_DECLSPEC int mpfr_erangeflag_p _MPFR_PROTO ((void));
00202 
00203 __MPFR_DECLSPEC int
00204   mpfr_check_range _MPFR_PROTO ((mpfr_ptr, int, mpfr_rnd_t));
00205 
00206 __MPFR_DECLSPEC void mpfr_init2 _MPFR_PROTO ((mpfr_ptr, mpfr_prec_t));
00207 __MPFR_DECLSPEC void mpfr_init _MPFR_PROTO ((mpfr_ptr));
00208 __MPFR_DECLSPEC void mpfr_clear _MPFR_PROTO ((mpfr_ptr));
00209 
00210 __MPFR_DECLSPEC void
00211   mpfr_inits2 _MPFR_PROTO ((mp_prec_t, mpfr_ptr, ...)) __MPFR_SENTINEL_ATTR;
00212 __MPFR_DECLSPEC void
00213   mpfr_inits _MPFR_PROTO ((mpfr_ptr, ...)) __MPFR_SENTINEL_ATTR;
00214 __MPFR_DECLSPEC void
00215   mpfr_clears _MPFR_PROTO ((mpfr_ptr, ...)) __MPFR_SENTINEL_ATTR;
00216 
00217 __MPFR_DECLSPEC int
00218   mpfr_prec_round _MPFR_PROTO ((mpfr_ptr, mpfr_prec_t, mpfr_rnd_t));
00219 __MPFR_DECLSPEC int
00220   mpfr_can_round _MPFR_PROTO ((mpfr_srcptr, mp_exp_t, mpfr_rnd_t, mpfr_rnd_t,
00221                                mpfr_prec_t));
00222 
00223 __MPFR_DECLSPEC mp_exp_t mpfr_get_exp _MPFR_PROTO ((mpfr_srcptr));
00224 __MPFR_DECLSPEC int mpfr_set_exp _MPFR_PROTO ((mpfr_ptr, mp_exp_t));
00225 __MPFR_DECLSPEC mp_prec_t mpfr_get_prec _MPFR_PROTO((mpfr_srcptr));
00226 __MPFR_DECLSPEC void mpfr_set_prec _MPFR_PROTO((mpfr_ptr, mpfr_prec_t));
00227 __MPFR_DECLSPEC void mpfr_set_prec_raw _MPFR_PROTO((mpfr_ptr, mpfr_prec_t));
00228 __MPFR_DECLSPEC void mpfr_set_default_prec _MPFR_PROTO((mpfr_prec_t));
00229 __MPFR_DECLSPEC mp_prec_t mpfr_get_default_prec _MPFR_PROTO((void));
00230 
00231 __MPFR_DECLSPEC int mpfr_set_d _MPFR_PROTO ((mpfr_ptr, double, mpfr_rnd_t));
00232 #if MPFR_WANT_DECIMAL_FLOATS
00233 __MPFR_DECLSPEC int mpfr_set_decimal64 _MPFR_PROTO ((mpfr_ptr, _Decimal64,
00234                                                      mp_rnd_t));
00235 #endif
00236 __MPFR_DECLSPEC int
00237   mpfr_set_ld _MPFR_PROTO ((mpfr_ptr, long double, mpfr_rnd_t));
00238 __MPFR_DECLSPEC int
00239   mpfr_set_z _MPFR_PROTO ((mpfr_ptr, mpz_srcptr, mpfr_rnd_t));
00240 __MPFR_DECLSPEC void mpfr_set_nan _MPFR_PROTO ((mpfr_ptr));
00241 __MPFR_DECLSPEC void mpfr_set_inf _MPFR_PROTO ((mpfr_ptr, int));
00242 __MPFR_DECLSPEC int
00243   mpfr_set_f _MPFR_PROTO ((mpfr_ptr, mpf_srcptr, mpfr_rnd_t));
00244 __MPFR_DECLSPEC int
00245   mpfr_get_f _MPFR_PROTO ((mpf_ptr, mpfr_srcptr, mpfr_rnd_t));
00246 __MPFR_DECLSPEC int mpfr_set_si _MPFR_PROTO ((mpfr_ptr, long, mpfr_rnd_t));
00247 __MPFR_DECLSPEC int
00248   mpfr_set_ui _MPFR_PROTO ((mpfr_ptr, unsigned long, mpfr_rnd_t));
00249 __MPFR_DECLSPEC int
00250   mpfr_set_si_2exp _MPFR_PROTO ((mpfr_ptr, long, mp_exp_t, mpfr_rnd_t));
00251 __MPFR_DECLSPEC int
00252   mpfr_set_ui_2exp _MPFR_PROTO ((mpfr_ptr,unsigned long,mp_exp_t,mpfr_rnd_t));
00253 __MPFR_DECLSPEC int
00254   mpfr_set_q _MPFR_PROTO ((mpfr_ptr, mpq_srcptr, mpfr_rnd_t));
00255 __MPFR_DECLSPEC int
00256   mpfr_set_str _MPFR_PROTO ((mpfr_ptr, __gmp_const char *, int, mpfr_rnd_t));
00257 __MPFR_DECLSPEC int
00258   mpfr_init_set_str _MPFR_PROTO ((mpfr_ptr, __gmp_const char *, int,
00259                                   mpfr_rnd_t));
00260 __MPFR_DECLSPEC int
00261   mpfr_set4 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t, int));
00262 __MPFR_DECLSPEC int
00263   mpfr_abs _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00264 __MPFR_DECLSPEC int
00265   mpfr_set _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00266 __MPFR_DECLSPEC int mpfr_neg _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00267 __MPFR_DECLSPEC int mpfr_signbit _MPFR_PROTO ((mpfr_srcptr));
00268 __MPFR_DECLSPEC int
00269   mpfr_setsign _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, int, mpfr_rnd_t));
00270 __MPFR_DECLSPEC int
00271   mpfr_copysign _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t));
00272 
00273 #ifdef _MPFR_H_HAVE_INTMAX_T
00274 #define mpfr_set_sj __gmpfr_set_sj
00275 #define mpfr_set_sj_2exp __gmpfr_set_sj_2exp
00276 #define mpfr_set_uj __gmpfr_set_uj
00277 #define mpfr_set_uj_2exp __gmpfr_set_uj_2exp
00278 #define mpfr_get_sj __gmpfr_mpfr_get_sj
00279 #define mpfr_get_uj __gmpfr_mpfr_get_uj
00280 __MPFR_DECLSPEC int mpfr_set_sj _MPFR_PROTO ((mpfr_t, intmax_t, mpfr_rnd_t));
00281 __MPFR_DECLSPEC int
00282   mpfr_set_sj_2exp _MPFR_PROTO ((mpfr_t, intmax_t, intmax_t, mpfr_rnd_t));
00283 __MPFR_DECLSPEC int mpfr_set_uj _MPFR_PROTO ((mpfr_t, uintmax_t, mpfr_rnd_t));
00284 __MPFR_DECLSPEC int
00285   mpfr_set_uj_2exp _MPFR_PROTO ((mpfr_t, uintmax_t, intmax_t, mpfr_rnd_t));
00286 __MPFR_DECLSPEC intmax_t mpfr_get_sj _MPFR_PROTO ((mpfr_srcptr, mpfr_rnd_t));
00287 __MPFR_DECLSPEC uintmax_t mpfr_get_uj _MPFR_PROTO ((mpfr_srcptr, mpfr_rnd_t));
00288 #endif
00289 
00290 __MPFR_DECLSPEC mp_exp_t mpfr_get_z_exp _MPFR_PROTO ((mpz_ptr, mpfr_srcptr));
00291 __MPFR_DECLSPEC double mpfr_get_d _MPFR_PROTO ((mpfr_srcptr, mpfr_rnd_t));
00292 #if MPFR_WANT_DECIMAL_FLOATS
00293 __MPFR_DECLSPEC _Decimal64 mpfr_get_decimal64 _MPFR_PROTO ((mpfr_srcptr,
00294                                                            mp_rnd_t));
00295 #endif
00296 __MPFR_DECLSPEC long double mpfr_get_ld _MPFR_PROTO ((mpfr_srcptr,
00297                                                       mpfr_rnd_t));
00298 __MPFR_DECLSPEC double mpfr_get_d1 _MPFR_PROTO ((mpfr_srcptr));
00299 __MPFR_DECLSPEC double mpfr_get_d_2exp _MPFR_PROTO ((long*, mpfr_srcptr,
00300                                                      mpfr_rnd_t));
00301 __MPFR_DECLSPEC long double mpfr_get_ld_2exp _MPFR_PROTO ((long*, mpfr_srcptr,
00302                                                            mpfr_rnd_t));
00303 __MPFR_DECLSPEC long mpfr_get_si _MPFR_PROTO ((mpfr_srcptr, mpfr_rnd_t));
00304 __MPFR_DECLSPEC unsigned long mpfr_get_ui _MPFR_PROTO ((mpfr_srcptr,
00305                                                         mpfr_rnd_t));
00306 __MPFR_DECLSPEC char*mpfr_get_str _MPFR_PROTO ((char*, mp_exp_t*, int, size_t,
00307                                                 mpfr_srcptr, mpfr_rnd_t));
00308 __MPFR_DECLSPEC void mpfr_get_z _MPFR_PROTO ((mpz_ptr z, mpfr_srcptr f,
00309                                               mpfr_rnd_t));
00310 
00311 __MPFR_DECLSPEC void mpfr_free_str _MPFR_PROTO ((char *));
00312 
00313 
00314 __MPFR_DECLSPEC void mpfr_random _MPFR_PROTO ((mpfr_ptr));
00315 __MPFR_DECLSPEC void mpfr_random2 _MPFR_PROTO ((mpfr_ptr,mp_size_t,mp_exp_t));
00316 __MPFR_DECLSPEC int mpfr_urandomb _MPFR_PROTO ((mpfr_ptr, gmp_randstate_t));
00317 
00318 __MPFR_DECLSPEC void mpfr_nextabove _MPFR_PROTO ((mpfr_ptr));
00319 __MPFR_DECLSPEC void mpfr_nextbelow _MPFR_PROTO ((mpfr_ptr));
00320 __MPFR_DECLSPEC void mpfr_nexttoward _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr));
00321 
00322 #ifdef _MPFR_H_HAVE_FILE
00323 #define mpfr_inp_str __gmpfr_inp_str
00324 #define mpfr_out_str __gmpfr_out_str
00325 __MPFR_DECLSPEC size_t mpfr_inp_str _MPFR_PROTO ((mpfr_ptr, FILE*, int,
00326                                                   mpfr_rnd_t));
00327 __MPFR_DECLSPEC size_t mpfr_out_str _MPFR_PROTO ((FILE*, int, size_t,
00328                                                   mpfr_srcptr, mpfr_rnd_t));
00329 #endif
00330 
00331 __MPFR_DECLSPEC int mpfr_pow _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00332                                            mpfr_srcptr, mpfr_rnd_t));
00333 __MPFR_DECLSPEC int mpfr_pow_si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00334                                               long int, mpfr_rnd_t));
00335 __MPFR_DECLSPEC int mpfr_pow_ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00336                                               unsigned long int, mpfr_rnd_t));
00337 __MPFR_DECLSPEC int mpfr_ui_pow_ui _MPFR_PROTO ((mpfr_ptr, unsigned long int,
00338                                              unsigned long int, mpfr_rnd_t));
00339 __MPFR_DECLSPEC int mpfr_ui_pow _MPFR_PROTO ((mpfr_ptr, unsigned long int,
00340                                               mpfr_srcptr, mpfr_rnd_t));
00341 __MPFR_DECLSPEC int mpfr_pow_z _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00342                                              mpz_srcptr, mpfr_rnd_t));
00343 
00344 __MPFR_DECLSPEC int mpfr_sqrt _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00345                                             mpfr_rnd_t));
00346 __MPFR_DECLSPEC int mpfr_sqrt_ui _MPFR_PROTO ((mpfr_ptr, unsigned long,
00347                                                mpfr_rnd_t));
00348 
00349 __MPFR_DECLSPEC int mpfr_add _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00350                                            mpfr_srcptr, mpfr_rnd_t));
00351 __MPFR_DECLSPEC int mpfr_sub _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00352                                            mpfr_srcptr, mpfr_rnd_t));
00353 __MPFR_DECLSPEC int mpfr_mul _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00354                                            mpfr_srcptr, mpfr_rnd_t));
00355 __MPFR_DECLSPEC int mpfr_div _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00356                                            mpfr_srcptr, mpfr_rnd_t));
00357 
00358 __MPFR_DECLSPEC int mpfr_add_ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00359                                               unsigned long, mpfr_rnd_t));
00360 __MPFR_DECLSPEC int mpfr_sub_ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00361                                               unsigned long, mpfr_rnd_t));
00362 __MPFR_DECLSPEC int mpfr_ui_sub _MPFR_PROTO ((mpfr_ptr, unsigned long,
00363                                               mpfr_srcptr, mpfr_rnd_t));
00364 __MPFR_DECLSPEC int mpfr_mul_ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00365                                               unsigned long, mpfr_rnd_t));
00366 __MPFR_DECLSPEC int mpfr_div_ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00367                                               unsigned long, mpfr_rnd_t));
00368 __MPFR_DECLSPEC int mpfr_ui_div _MPFR_PROTO ((mpfr_ptr, unsigned long,
00369                                               mpfr_srcptr, mpfr_rnd_t));
00370 
00371 __MPFR_DECLSPEC int mpfr_add_si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00372                                               long int, mpfr_rnd_t));
00373 __MPFR_DECLSPEC int mpfr_sub_si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00374                                               long int, mpfr_rnd_t));
00375 __MPFR_DECLSPEC int mpfr_si_sub _MPFR_PROTO ((mpfr_ptr, long int,
00376                                               mpfr_srcptr, mpfr_rnd_t));
00377 __MPFR_DECLSPEC int mpfr_mul_si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00378                                               long int, mpfr_rnd_t));
00379 __MPFR_DECLSPEC int mpfr_div_si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00380                                               long int, mpfr_rnd_t));
00381 __MPFR_DECLSPEC int mpfr_si_div _MPFR_PROTO ((mpfr_ptr, long int,
00382                                               mpfr_srcptr, mpfr_rnd_t));
00383 
00384 __MPFR_DECLSPEC int mpfr_sqr _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00385 
00386 __MPFR_DECLSPEC int mpfr_const_pi _MPFR_PROTO ((mpfr_ptr, mpfr_rnd_t));
00387 __MPFR_DECLSPEC int mpfr_const_log2 _MPFR_PROTO ((mpfr_ptr, mpfr_rnd_t));
00388 __MPFR_DECLSPEC int mpfr_const_euler _MPFR_PROTO ((mpfr_ptr, mpfr_rnd_t));
00389 __MPFR_DECLSPEC int mpfr_const_catalan _MPFR_PROTO ((mpfr_ptr, mpfr_rnd_t));
00390 
00391 __MPFR_DECLSPEC int mpfr_agm _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00392                                            mpfr_rnd_t));
00393 
00394 __MPFR_DECLSPEC int mpfr_log _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00395 __MPFR_DECLSPEC int mpfr_log2 _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00396 __MPFR_DECLSPEC int mpfr_log10 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00397                                              mpfr_rnd_t));
00398 __MPFR_DECLSPEC int mpfr_log1p _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00399                                              mpfr_rnd_t));
00400 
00401 __MPFR_DECLSPEC int mpfr_exp _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00402 __MPFR_DECLSPEC int mpfr_exp2 _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00403 __MPFR_DECLSPEC int mpfr_exp10 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00404                                              mpfr_rnd_t));
00405 __MPFR_DECLSPEC int mpfr_expm1 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00406                                              mpfr_rnd_t));
00407 __MPFR_DECLSPEC int mpfr_eint _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00408 
00409 __MPFR_DECLSPEC int mpfr_cmp  _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00410 __MPFR_DECLSPEC int mpfr_cmp3 _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr, int));
00411 __MPFR_DECLSPEC int mpfr_cmp_d _MPFR_PROTO ((mpfr_srcptr, double));
00412 __MPFR_DECLSPEC int mpfr_cmp_ld _MPFR_PROTO ((mpfr_srcptr, long double));
00413 __MPFR_DECLSPEC int mpfr_cmpabs _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00414 __MPFR_DECLSPEC int mpfr_cmp_ui _MPFR_PROTO ((mpfr_srcptr, unsigned long));
00415 __MPFR_DECLSPEC int mpfr_cmp_si _MPFR_PROTO ((mpfr_srcptr, long));
00416 __MPFR_DECLSPEC int mpfr_cmp_ui_2exp _MPFR_PROTO ((mpfr_srcptr, unsigned long,
00417                                                    mp_exp_t));
00418 __MPFR_DECLSPEC int mpfr_cmp_si_2exp _MPFR_PROTO ((mpfr_srcptr, long,
00419                                                    mp_exp_t));
00420 __MPFR_DECLSPEC void mpfr_reldiff _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00421                                                 mpfr_srcptr, mpfr_rnd_t));
00422 __MPFR_DECLSPEC int mpfr_eq _MPFR_PROTO((mpfr_srcptr, mpfr_srcptr,
00423                                          unsigned long));
00424 __MPFR_DECLSPEC int mpfr_sgn _MPFR_PROTO ((mpfr_srcptr));
00425 
00426 __MPFR_DECLSPEC int mpfr_mul_2exp _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00427                                                 unsigned long, mpfr_rnd_t));
00428 __MPFR_DECLSPEC int mpfr_div_2exp _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00429                                                 unsigned long, mpfr_rnd_t));
00430 __MPFR_DECLSPEC int mpfr_mul_2ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00431                                                unsigned long, mpfr_rnd_t));
00432 __MPFR_DECLSPEC int mpfr_div_2ui _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00433                                                unsigned long, mpfr_rnd_t));
00434 __MPFR_DECLSPEC int mpfr_mul_2si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00435                                                long, mpfr_rnd_t));
00436 __MPFR_DECLSPEC int mpfr_div_2si _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00437                                                long, mpfr_rnd_t));
00438 
00439 __MPFR_DECLSPEC int mpfr_rint _MPFR_PROTO((mpfr_ptr,mpfr_srcptr, mpfr_rnd_t));
00440 __MPFR_DECLSPEC int mpfr_round _MPFR_PROTO((mpfr_ptr, mpfr_srcptr));
00441 __MPFR_DECLSPEC int mpfr_trunc _MPFR_PROTO((mpfr_ptr, mpfr_srcptr));
00442 __MPFR_DECLSPEC int mpfr_ceil _MPFR_PROTO((mpfr_ptr, mpfr_srcptr));
00443 __MPFR_DECLSPEC int mpfr_floor _MPFR_PROTO((mpfr_ptr, mpfr_srcptr));
00444 __MPFR_DECLSPEC int mpfr_rint_round _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00445                                                   mpfr_rnd_t));
00446 __MPFR_DECLSPEC int mpfr_rint_trunc _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00447                                                   mpfr_rnd_t));
00448 __MPFR_DECLSPEC int mpfr_rint_ceil _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00449                                                  mpfr_rnd_t));
00450 __MPFR_DECLSPEC int mpfr_rint_floor _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00451                                                   mpfr_rnd_t));
00452 __MPFR_DECLSPEC int mpfr_frac _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00453 __MPFR_DECLSPEC int mpfr_remquo _MPFR_PROTO ((mpfr_ptr, long*, mpfr_srcptr,
00454                                               mpfr_srcptr, mp_rnd_t));
00455 __MPFR_DECLSPEC int mpfr_remainder _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00456                                                  mpfr_srcptr, mp_rnd_t));
00457 
00458 __MPFR_DECLSPEC int mpfr_fits_ulong_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00459 __MPFR_DECLSPEC int mpfr_fits_slong_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00460 __MPFR_DECLSPEC int mpfr_fits_uint_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00461 __MPFR_DECLSPEC int mpfr_fits_sint_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00462 __MPFR_DECLSPEC int mpfr_fits_ushort_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00463 __MPFR_DECLSPEC int mpfr_fits_sshort_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00464 __MPFR_DECLSPEC int mpfr_fits_uintmax_p _MPFR_PROTO((mpfr_srcptr,mpfr_rnd_t));
00465 __MPFR_DECLSPEC int mpfr_fits_intmax_p _MPFR_PROTO((mpfr_srcptr, mpfr_rnd_t));
00466 
00467 __MPFR_DECLSPEC void mpfr_extract _MPFR_PROTO ((mpz_ptr, mpfr_srcptr,
00468                                                 unsigned int));
00469 __MPFR_DECLSPEC void mpfr_swap _MPFR_PROTO ((mpfr_ptr, mpfr_ptr));
00470 __MPFR_DECLSPEC void mpfr_dump _MPFR_PROTO ((mpfr_srcptr));
00471 
00472 __MPFR_DECLSPEC int mpfr_nan_p _MPFR_PROTO((mpfr_srcptr));
00473 __MPFR_DECLSPEC int mpfr_inf_p _MPFR_PROTO((mpfr_srcptr));
00474 __MPFR_DECLSPEC int mpfr_number_p _MPFR_PROTO((mpfr_srcptr));
00475 __MPFR_DECLSPEC int mpfr_integer_p _MPFR_PROTO ((mpfr_srcptr));
00476 __MPFR_DECLSPEC int mpfr_zero_p _MPFR_PROTO ((mpfr_srcptr));
00477 
00478 __MPFR_DECLSPEC int mpfr_greater_p _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00479 __MPFR_DECLSPEC int mpfr_greaterequal_p _MPFR_PROTO ((mpfr_srcptr,
00480                                                       mpfr_srcptr));
00481 __MPFR_DECLSPEC int mpfr_less_p _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00482 __MPFR_DECLSPEC int mpfr_lessequal_p _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00483 __MPFR_DECLSPEC int mpfr_lessgreater_p _MPFR_PROTO((mpfr_srcptr,mpfr_srcptr));
00484 __MPFR_DECLSPEC int mpfr_equal_p _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00485 __MPFR_DECLSPEC int mpfr_unordered_p _MPFR_PROTO ((mpfr_srcptr, mpfr_srcptr));
00486 
00487 __MPFR_DECLSPEC int mpfr_atanh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00488 __MPFR_DECLSPEC int mpfr_acosh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00489 __MPFR_DECLSPEC int mpfr_asinh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00490 __MPFR_DECLSPEC int mpfr_cosh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr, mpfr_rnd_t));
00491 __MPFR_DECLSPEC int mpfr_sinh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr, mpfr_rnd_t));
00492 __MPFR_DECLSPEC int mpfr_tanh _MPFR_PROTO((mpfr_ptr,mpfr_srcptr, mpfr_rnd_t));
00493 
00494 __MPFR_DECLSPEC int mpfr_sech _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00495 __MPFR_DECLSPEC int mpfr_csch _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00496 __MPFR_DECLSPEC int mpfr_coth _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00497 
00498 __MPFR_DECLSPEC int mpfr_acos _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00499 __MPFR_DECLSPEC int mpfr_asin _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00500 __MPFR_DECLSPEC int mpfr_atan _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00501 __MPFR_DECLSPEC int mpfr_sin _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00502 __MPFR_DECLSPEC int mpfr_sin_cos _MPFR_PROTO ((mpfr_ptr, mpfr_ptr,
00503                                                mpfr_srcptr, mpfr_rnd_t));
00504 __MPFR_DECLSPEC int mpfr_cos _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00505 __MPFR_DECLSPEC int mpfr_tan _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00506 __MPFR_DECLSPEC int mpfr_atan2 _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_srcptr,
00507                                              mpfr_rnd_t));
00508 __MPFR_DECLSPEC int mpfr_sec _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00509 __MPFR_DECLSPEC int mpfr_csc _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00510 __MPFR_DECLSPEC int mpfr_cot _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00511 
00512 __MPFR_DECLSPEC int mpfr_hypot _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00513                                              mpfr_srcptr, mpfr_rnd_t));
00514 __MPFR_DECLSPEC int mpfr_erf _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00515 __MPFR_DECLSPEC int mpfr_erfc _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_rnd_t));
00516 __MPFR_DECLSPEC int mpfr_cbrt _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00517 __MPFR_DECLSPEC int mpfr_root _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,unsigned long,mpfr_rnd_t));
00518 __MPFR_DECLSPEC int mpfr_gamma _MPFR_PROTO((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00519 __MPFR_DECLSPEC int mpfr_lngamma _MPFR_PROTO((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00520 __MPFR_DECLSPEC int mpfr_lgamma _MPFR_PROTO((mpfr_ptr,int*,mpfr_srcptr,mpfr_rnd_t));
00521 __MPFR_DECLSPEC int mpfr_zeta _MPFR_PROTO ((mpfr_ptr,mpfr_srcptr,mpfr_rnd_t));
00522 __MPFR_DECLSPEC int mpfr_zeta_ui _MPFR_PROTO ((mpfr_ptr,unsigned long,mpfr_rnd_t));
00523 __MPFR_DECLSPEC int mpfr_fac_ui _MPFR_PROTO ((mpfr_ptr, unsigned long int,
00524                                               mpfr_rnd_t));
00525 __MPFR_DECLSPEC int mpfr_j0 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00526 __MPFR_DECLSPEC int mpfr_j1 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00527 __MPFR_DECLSPEC int mpfr_jn _MPFR_PROTO ((mpfr_ptr, long, mpfr_srcptr,
00528                                           mpfr_rnd_t));
00529 __MPFR_DECLSPEC int mpfr_y0 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00530 __MPFR_DECLSPEC int mpfr_y1 _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_rnd_t));
00531 __MPFR_DECLSPEC int mpfr_yn _MPFR_PROTO ((mpfr_ptr, long, mpfr_srcptr,
00532                                           mpfr_rnd_t));
00533 
00534 __MPFR_DECLSPEC int mpfr_min _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00535                                            mpfr_rnd_t));
00536 __MPFR_DECLSPEC int mpfr_max _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00537                                            mpfr_rnd_t));
00538 __MPFR_DECLSPEC int mpfr_dim _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00539                                            mpfr_rnd_t));
00540 
00541 __MPFR_DECLSPEC int mpfr_mul_z _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00542                                              mpz_srcptr, mpfr_rnd_t));
00543 __MPFR_DECLSPEC int mpfr_div_z _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00544                                              mpz_srcptr, mpfr_rnd_t));
00545 __MPFR_DECLSPEC int mpfr_add_z _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00546                                              mpz_srcptr, mpfr_rnd_t));
00547 __MPFR_DECLSPEC int mpfr_sub_z _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00548                                              mpz_srcptr, mpfr_rnd_t));
00549 __MPFR_DECLSPEC int mpfr_cmp_z _MPFR_PROTO ((mpfr_srcptr, mpz_srcptr));
00550 
00551 __MPFR_DECLSPEC int mpfr_mul_q _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00552                                              mpq_srcptr, mpfr_rnd_t));
00553 __MPFR_DECLSPEC int mpfr_div_q _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00554                                              mpq_srcptr, mpfr_rnd_t));
00555 __MPFR_DECLSPEC int mpfr_add_q _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00556                                              mpq_srcptr, mpfr_rnd_t));
00557 __MPFR_DECLSPEC int mpfr_sub_q _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr,
00558                                              mpq_srcptr, mpfr_rnd_t));
00559 __MPFR_DECLSPEC int mpfr_cmp_q _MPFR_PROTO ((mpfr_srcptr, mpq_srcptr));
00560 
00561 __MPFR_DECLSPEC int mpfr_cmp_f _MPFR_PROTO ((mpfr_srcptr, mpf_srcptr));
00562 
00563 __MPFR_DECLSPEC int mpfr_fma _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00564                                            mpfr_srcptr, mpfr_rnd_t));
00565 __MPFR_DECLSPEC int mpfr_fms _MPFR_PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
00566                                            mpfr_srcptr, mpfr_rnd_t));
00567 __MPFR_DECLSPEC int mpfr_sum _MPFR_PROTO ((mpfr_ptr, mpfr_ptr *__gmp_const,
00568                                            unsigned long, mpfr_rnd_t));
00569 
00570 __MPFR_DECLSPEC void mpfr_free_cache _MPFR_PROTO ((void));
00571 
00572 __MPFR_DECLSPEC int  mpfr_subnormalize _MPFR_PROTO ((mpfr_ptr, int,
00573                                                      mp_rnd_t));
00574 
00575 __MPFR_DECLSPEC int  mpfr_strtofr _MPFR_PROTO ((mpfr_ptr, __gmp_const char *,
00576                                                 char **, int, mpfr_rnd_t));
00577 
00578 __MPFR_DECLSPEC size_t mpfr_custom_get_size   _MPFR_PROTO ((mp_prec_t));
00579 __MPFR_DECLSPEC void   mpfr_custom_init       _MPFR_PROTO ((void *, mp_prec_t));
00580 __MPFR_DECLSPEC void * mpfr_custom_get_mantissa _MPFR_PROTO ((mpfr_srcptr));
00581 __MPFR_DECLSPEC mp_exp_t mpfr_custom_get_exp  _MPFR_PROTO ((mpfr_srcptr));
00582 __MPFR_DECLSPEC void   mpfr_custom_move       _MPFR_PROTO ((mpfr_ptr, void *));
00583 __MPFR_DECLSPEC void   mpfr_custom_init_set   _MPFR_PROTO ((mpfr_ptr, int,
00584                                                mp_exp_t, mp_prec_t, void *));
00585 __MPFR_DECLSPEC int    mpfr_custom_get_kind   _MPFR_PROTO ((mpfr_srcptr));
00586 
00587 #if defined (__cplusplus)
00588 }
00589 #endif
00590 
00591 /* DON'T USE THIS! (For MPFR-public macros only, see below.)
00592    The mpfr_sgn macro uses the fact that __MPFR_EXP_NAN and __MPFR_EXP_ZERO
00593    are the smallest values. */
00594 #if __GMP_MP_SIZE_T_INT
00595 #define __MPFR_EXP_NAN  ((mp_exp_t)((~((~(unsigned int)0)>>1))+2))
00596 #define __MPFR_EXP_ZERO ((mp_exp_t)((~((~(unsigned int)0)>>1))+1))
00597 #define __MPFR_EXP_INF  ((mp_exp_t)((~((~(unsigned int)0)>>1))+3))
00598 #else
00599 #define __MPFR_EXP_NAN  ((mp_exp_t)((~((~(unsigned long)0)>>1))+2))
00600 #define __MPFR_EXP_ZERO ((mp_exp_t)((~((~(unsigned long)0)>>1))+1))
00601 #define __MPFR_EXP_INF  ((mp_exp_t)((~((~(unsigned long)0)>>1))+3))
00602 #endif
00603 
00604 /* Define MPFR_USE_EXTENSION to avoid "gcc -pedantic" warnings. */
00605 #ifndef MPFR_EXTENSION
00606 # if defined(MPFR_USE_EXTENSION)
00607 #  define MPFR_EXTENSION __extension__
00608 # else
00609 #  define MPFR_EXTENSION
00610 # endif
00611 #endif
00612 
00613 /* Warning! This macro doesn't work with K&R C and shouldn't be used
00614    internally. For public use only, but see the MPFR manual. */
00615 #define MPFR_DECL_INIT(_x, _p)                                        \
00616   MPFR_EXTENSION mp_limb_t __gmpfr_local_tab_##_x[((_p)-1)/GMP_NUMB_BITS+1]; \
00617   MPFR_EXTENSION mpfr_t _x = {{(_p),1,__MPFR_EXP_NAN,__gmpfr_local_tab_##_x}}
00618 
00619 /* Fast access macros to replace function interface.
00620    If the USER don't want to use the macro interface, let him make happy
00621    even if it produces faster and smaller code. */
00622 #ifndef MPFR_USE_NO_MACRO
00623 
00624 /* Inlining theses functions is both faster and smaller */
00625 #define mpfr_nan_p(_x)    ((_x)->_mpfr_exp == __MPFR_EXP_NAN)
00626 #define mpfr_inf_p(_x)    ((_x)->_mpfr_exp == __MPFR_EXP_INF)
00627 #define mpfr_zero_p(_x)   ((_x)->_mpfr_exp == __MPFR_EXP_ZERO)
00628 #define mpfr_sgn(_x)                                          \
00629   ((_x)->_mpfr_exp < __MPFR_EXP_INF ?                         \
00630    (mpfr_nan_p (_x) ? mpfr_set_erangeflag () : (void) 0), 0 : \
00631    MPFR_SIGN (_x))
00632 
00633 /* Prevent them from using as lvalues */
00634 #define mpfr_get_prec(_x) ((_x)->_mpfr_prec + 0)
00635 #define mpfr_get_exp(_x)  ((_x)->_mpfr_exp + 0)
00636 
00637 #define mpfr_round(a,b) mpfr_rint((a), (b), GMP_RNDNA)
00638 #define mpfr_trunc(a,b) mpfr_rint((a), (b), GMP_RNDZ)
00639 #define mpfr_ceil(a,b)  mpfr_rint((a), (b), GMP_RNDU)
00640 #define mpfr_floor(a,b) mpfr_rint((a), (b), GMP_RNDD)
00641 
00642 #define mpfr_cmp_ui(b,i) mpfr_cmp_ui_2exp((b),(i),0)
00643 #define mpfr_cmp_si(b,i) mpfr_cmp_si_2exp((b),(i),0)
00644 #define mpfr_set(a,b,r)  mpfr_set4(a,b,r,MPFR_SIGN(b))
00645 #define mpfr_abs(a,b,r)  mpfr_set4(a,b,r,1)
00646 #define mpfr_copysign(a,b,c,r) mpfr_set4(a,b,r,MPFR_SIGN(c))
00647 #define mpfr_setsign(a,b,s,r) mpfr_set4(a,b,r,(s) ? -1 : 1)
00648 #define mpfr_signbit(x)  (MPFR_SIGN(x) < 0)
00649 #define mpfr_cmp(b, c)   mpfr_cmp3(b, c, 1)
00650 #define mpfr_mul_2exp(y,x,n,r) mpfr_mul_2ui((y),(x),(n),(r))
00651 #define mpfr_div_2exp(y,x,n,r) mpfr_div_2ui((y),(x),(n),(r))
00652 
00653 
00654 /* When using GCC, optimize certain common comparisons and affectations.
00655    + Remove ICC since it defines __GNUC__ but produces a
00656      huge number of warnings if you use this code.
00657    + Remove C++ too, since it complains too much. */
00658 #if defined (__GNUC__) && !defined(__ICC) && !defined(__cplusplus)
00659 #if (__GNUC__ >= 2)
00660 #undef mpfr_cmp_ui
00661 /* We use the fact that mpfr_sgn on NaN sets the erange flag and returns 0. */
00662 #define mpfr_cmp_ui(_f,_u)                 \
00663  (__builtin_constant_p (_u) && (_u) == 0 ? \
00664    mpfr_sgn (_f) :                         \
00665    mpfr_cmp_ui_2exp ((_f),(_u),0))
00666 #undef mpfr_cmp_si
00667 #define mpfr_cmp_si(_f,_s)                 \
00668  (__builtin_constant_p (_s) && (_s) >= 0 ? \
00669    mpfr_cmp_ui ((_f), (_s)) :              \
00670    mpfr_cmp_si_2exp ((_f), (_s), 0))
00671 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
00672 #undef mpfr_set_ui
00673 #define mpfr_set_ui(_f,_u,_r)              \
00674  (__builtin_constant_p (_u) && (_u) == 0 ? \
00675    __extension__ ({                        \
00676      mpfr_ptr _p = (_f);                   \
00677      _p->_mpfr_sign = 1;                   \
00678      _p->_mpfr_exp = __MPFR_EXP_ZERO;      \
00679      (void) (_r); 0; }) :                  \
00680    mpfr_set_ui_2exp ((_f), (_u), 0, (_r)))
00681 #endif
00682 #undef mpfr_set_si
00683 #define mpfr_set_si(_f,_s,_r)              \
00684  (__builtin_constant_p (_s) && (_s) >= 0 ? \
00685    mpfr_set_ui ((_f), (_s), (_r)) :        \
00686    mpfr_set_si_2exp ((_f), (_s), 0, (_r)))
00687 #endif
00688 #endif
00689 
00690 /* Macro version of mpfr_stack interface for fast access */
00691 #define mpfr_custom_get_size(p) ((size_t)                            \
00692        (((p)+GMP_NUMB_BITS-1)/GMP_NUMB_BITS*sizeof (mp_limb_t)))
00693 #define mpfr_custom_init(m,p) do {} while (0)
00694 #define mpfr_custom_get_mantissa(x) ((void*)((x)->_mpfr_d))
00695 #define mpfr_custom_get_exp(x) ((x)->_mpfr_exp)
00696 #define mpfr_custom_move(x,m) do { ((x)->_mpfr_d = (mp_limb_t*)(m)); } while (0)
00697 #define mpfr_custom_init_set(x,k,e,p,m) do {                    \
00698   mpfr_ptr _x = (x);                                           \
00699   mp_exp_t _e;                                                 \
00700   mpfr_kind_t _t;                                              \
00701   int _s, _k;                                                  \
00702   _k = (k);                                                    \
00703   if (_k >= 0)  {                                              \
00704     _t = (mpfr_kind_t) _k;                                     \
00705     _s = 1;                                                    \
00706   } else {                                                     \
00707     _t = (mpfr_kind_t) -k;                                     \
00708     _s = -1;                                                   \
00709   }                                                            \
00710   _e = _t == MPFR_REGULAR_KIND ? (e) :                         \
00711     _t == MPFR_NAN_KIND ? __MPFR_EXP_NAN :                     \
00712     _t == MPFR_INF_KIND ? __MPFR_EXP_INF : __MPFR_EXP_ZERO;    \
00713   _x->_mpfr_prec = (p);                                        \
00714   _x->_mpfr_sign = _s;                                         \
00715   _x->_mpfr_exp  = _e;                                         \
00716   _x->_mpfr_d    = (mp_limb_t*) (m);                           \
00717  } while (0)
00718 #define mpfr_custom_get_kind(x)                                              \
00719   ( (x)->_mpfr_exp >  __MPFR_EXP_INF ? (int)MPFR_REGULAR_KIND*MPFR_SIGN (x) \
00720   : (x)->_mpfr_exp == __MPFR_EXP_INF ? (int)MPFR_INF_KIND*MPFR_SIGN (x)     \
00721   : (x)->_mpfr_exp == __MPFR_EXP_NAN ? (int)MPFR_NAN_KIND                   \
00722   : (int) MPFR_ZERO_KIND * MPFR_SIGN (x) )
00723 
00724 
00725 #endif /* MPFR_USE_NO_MACRO */
00726 
00727 /* Theses are defined to be macros */
00728 #define mpfr_init_set_si(x, i, rnd) \
00729  ( mpfr_init(x), mpfr_set_si((x), (i), (rnd)) )
00730 #define mpfr_init_set_ui(x, i, rnd) \
00731  ( mpfr_init(x), mpfr_set_ui((x), (i), (rnd)) )
00732 #define mpfr_init_set_d(x, d, rnd) \
00733  ( mpfr_init(x), mpfr_set_d((x), (d), (rnd)) )
00734 #define mpfr_init_set_ld(x, d, rnd) \
00735  ( mpfr_init(x), mpfr_set_ld((x), (d), (rnd)) )
00736 #define mpfr_init_set_z(x, i, rnd) \
00737  ( mpfr_init(x), mpfr_set_z((x), (i), (rnd)) )
00738 #define mpfr_init_set_q(x, i, rnd) \
00739  ( mpfr_init(x), mpfr_set_q((x), (i), (rnd)) )
00740 #define mpfr_init_set(x, y, rnd) \
00741  ( mpfr_init(x), mpfr_set((x), (y), (rnd)) )
00742 #define mpfr_init_set_f(x, y, rnd) \
00743  ( mpfr_init(x), mpfr_set_f((x), (y), (rnd)) )
00744 
00745 /* Compatibility layer -- obsolete functions and macros */
00746 #define mpfr_cmp_abs mpfr_cmpabs
00747 #define mpfr_round_prec(x,r,p) mpfr_prec_round(x,p,r)
00748 #define __gmp_default_rounding_mode (mpfr_get_default_rounding_mode())
00749 #define __mpfr_emin (mpfr_get_emin())
00750 #define __mpfr_emax (mpfr_get_emax())
00751 #define __mpfr_default_fp_bit_precision (mpfr_get_default_fp_bit_precision())
00752 #define MPFR_EMIN_MIN mpfr_get_emin_min()
00753 #define MPFR_EMIN_MAX mpfr_get_emin_max()
00754 #define MPFR_EMAX_MIN mpfr_get_emax_min()
00755 #define MPFR_EMAX_MAX mpfr_get_emax_max()
00756 #define mpfr_version (mpfr_get_version())
00757 #ifndef mpz_set_fr
00758 # define mpz_set_fr mpfr_get_z
00759 #endif
00760 #define mpfr_add_one_ulp(x,r) \
00761  (mpfr_sgn (x) > 0 ? mpfr_nextabove (x) : mpfr_nextbelow (x))
00762 #define mpfr_sub_one_ulp(x,r) \
00763  (mpfr_sgn (x) > 0 ? mpfr_nextbelow (x) : mpfr_nextabove (x))
00764 
00765 #endif /* __MPFR_H*/
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines