BWAPI
|
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*/