version 1.1, 2000/09/09 14:12:19 |
version 1.1.1.2, 2003/08/25 16:06:06 |
|
|
/* mpfr.h -- Include file for mpfr. |
/* mpfr.h -- Include file for mpfr. |
|
|
Copyright (C) 1999 PolKA project, Inria Lorraine and Loria |
Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
|
This file is part of the MPFR Library. |
This file is part of the MPFR Library. |
|
|
The MPFR Library is free software; you can redistribute it and/or modify |
The MPFR Library is free software; you can redistribute it and/or modify |
it under the terms of the GNU Library General Public License as published by |
it under the terms of the GNU Lesser General Public License as published by |
the Free Software Foundation; either version 2 of the License, or (at your |
the Free Software Foundation; either version 2.1 of the License, or (at your |
option) any later version. |
option) any later version. |
|
|
The MPFR Library is distributed in the hope that it will be useful, but |
The MPFR Library is distributed in the hope that it will be useful, but |
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public |
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
License for more details. |
License for more details. |
|
|
You should have received a copy of the GNU Library General Public License |
You should have received a copy of the GNU Lesser General Public License |
along with the MPFR Library; see the file COPYING.LIB. If not, write to |
along with the MPFR Library; see the file COPYING.LIB. If not, write to |
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
MA 02111-1307, USA. */ |
MA 02111-1307, USA. */ |
|
|
#include <stdio.h> |
#ifndef __MPFR_H |
|
#define __MPFR_H |
|
|
/* Cygnus does not know about *rand48 functions */ |
/* check if stdio.h is included */ |
#ifdef __CYGWIN32__ |
#if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \ |
#define mrand48 rand |
|| defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \ |
#define drand48 rand |
|| defined (_STDIO_INCLUDED) || defined (__dj_include_stdio_h_) |
#define lrand48 rand |
#define _MPFR_H_HAVE_FILE 1 |
#define srand48 srand |
|
#endif |
#endif |
|
|
/* Definition of rounding modes */ |
/* Definition of rounding modes */ |
Line 36 MA 02111-1307, USA. */ |
|
Line 36 MA 02111-1307, USA. */ |
|
#define GMP_RNDU 2 |
#define GMP_RNDU 2 |
#define GMP_RNDD 3 |
#define GMP_RNDD 3 |
|
|
|
/* Definition of exponent limits */ |
|
|
|
#define MPFR_EMAX_DEFAULT ((mp_exp_t) (((unsigned long) 1 << 31) - 1)) |
|
#define MPFR_EMIN_DEFAULT (-(MPFR_EMAX_DEFAULT)) |
|
|
|
#define MPFR_EMIN_MIN MPFR_EMIN_DEFAULT |
|
#define MPFR_EMIN_MAX MPFR_EMAX_DEFAULT |
|
#define MPFR_EMAX_MIN MPFR_EMIN_DEFAULT |
|
#define MPFR_EMAX_MAX MPFR_EMAX_DEFAULT |
|
|
|
/* Flags */ |
|
|
|
#define MPFR_FLAGS_UNDERFLOW 1 |
|
#define MPFR_FLAGS_OVERFLOW 2 |
|
#define MPFR_FLAGS_NAN 4 |
|
#define MPFR_FLAGS_INEXACT 8 |
|
#define MPFR_FLAGS_ALL 15 |
|
|
/* Definitions of types and their semantics */ |
/* Definitions of types and their semantics */ |
|
|
|
typedef unsigned long int mp_prec_t; /* easy to change if necessary */ |
|
#define MPFR_PREC_MIN 2 |
|
#define MPFR_PREC_MAX (ULONG_MAX >> 1) |
|
/* Limit mainly due to the multiplication code. */ |
|
|
|
typedef int mp_rnd_t; |
|
|
typedef struct { |
typedef struct { |
unsigned long int _mp_prec; /* WARNING : for the mpfr type, the precision */ |
mp_prec_t _mpfr_prec; /* WARNING : for the mpfr type, the precision */ |
/* should be understood as the number of BITS,*/ |
/* should be understood as the number of BITS,*/ |
/* not the number of mp_limb_t's. This means */ |
/* not the number of mp_limb_t's. This means */ |
/* that the corresponding number of allocated |
/* that the corresponding number of allocated |
limbs is >= ceil(_mp_prec/BITS_PER_MP_LIMB) */ |
limbs is >= ceil(_mp_prec/BITS_PER_MP_LIMB) */ |
mp_size_t _mp_size; /* abs(_mp_size) is the number of allocated |
mp_size_t _mpfr_size; /* MPFR_ABSSIZE(.) is the number of allocated |
limbs the field _mp_d points to. |
limbs the field _mp_d points to. |
The sign is that of _mp_size. |
The sign is that of _mpfr_size. |
The number 0 is such that _mp_d[k-1]=0 |
The number 0 is such that _mp_d[k-1]=0 |
where k = ceil(_mp_prec/BITS_PER_MP_LIMB) */ |
where k = ceil(_mp_prec/BITS_PER_MP_LIMB) */ |
mp_exp_t _mp_exp; |
mp_exp_t _mpfr_exp; |
mp_limb_t *_mp_d; |
mp_limb_t *_mpfr_d; |
} |
} |
__mpfr_struct; |
__mpfr_struct; |
|
|
/* |
/* |
The number represented is |
The number represented is |
|
|
sign(_mp_size)*(_mp_d[k-1]/B+_mp_d[k-2]/B^2+...+_mp_d[0]/B^k)*2^_mp_exp |
sign(_mpfr_size)*(_mpfr_d[k-1]/B+_mpfr_d[k-2]/B^2+...+_mpfr_d[0]/B^k)*2^_mpfr_exp |
|
|
where k=ceil(_mp_prec/BITS_PER_MP_LIMB) and B=2^BITS_PER_MP_LIMB. |
where k=ceil(_mp_prec/BITS_PER_MP_LIMB) and B=2^BITS_PER_MP_LIMB. |
|
|
For the msb (most significant bit) normalized representation, we must have |
For the msb (most significant bit) normalized representation, we must have |
_mp_d[k-1]>=B/2, unless the number is zero (in that case its sign is still |
_mpfr_d[k-1]>=B/2, unless the number is zero (in that case its sign is still |
given by sign(_mp_size)). |
given by sign(_mpfr_size)). |
|
|
We must also have the last k*BITS_PER_MP_LIMB-_mp_prec bits set to zero. |
We must also have the last k*BITS_PER_MP_LIMB-_mp_prec bits set to zero. |
*/ |
*/ |
Line 72 typedef __mpfr_struct mpfr_t[1]; |
|
Line 97 typedef __mpfr_struct mpfr_t[1]; |
|
typedef __mpfr_struct *mpfr_ptr; |
typedef __mpfr_struct *mpfr_ptr; |
typedef __gmp_const __mpfr_struct *mpfr_srcptr; |
typedef __gmp_const __mpfr_struct *mpfr_srcptr; |
|
|
|
#define MPFR_SIGN(x) (((x)->_mpfr_size >> 31) ? -1 : 1) |
|
|
/* Prototypes */ |
/* Prototypes */ |
|
|
Line 83 typedef __gmp_const __mpfr_struct *mpfr_srcptr; |
|
Line 109 typedef __gmp_const __mpfr_struct *mpfr_srcptr; |
|
#endif |
#endif |
#endif |
#endif |
|
|
/* bit 31 of _mp_size is used for sign, |
/* _PROTO will be renamed __GMP_PROTO in gmp 4.1 */ |
bit 30 of _mp_size is used for Nan flag, |
#ifndef __GMP_PROTO |
remaining bits are used to store the number of allocated limbs */ |
#define __GMP_PROTO(x) _PROTO(x) |
#define FLAG_NAN(x) (((x)->_mp_size >> 30)&1) |
#endif |
#define SET_NAN(x) ((x)->_mp_size |= (1<<30)) |
|
#define ABSSIZE(x) ((x)->_mp_size & ((1<<30)-1)) |
|
#define SIZE(x) ((x)->_mp_size) |
|
#define EXP(x) ((x)->_mp_exp) |
|
#define MANT(x) ((x)->_mp_d) |
|
#define SIGN(x) (((x)->_mp_size >> 31) ? -1 : 1) |
|
#define ISNONNEG(x) (SIGN(x)>=0) |
|
#define ISNEG(x) (SIGN(x)==-1) |
|
#define CHANGE_SIGN(x) (SIZE(x) = SIZE(x) ^ (1<<31)) |
|
#define PREC(x) ((x)->_mp_prec) |
|
#define NOTZERO(x) (MANT(x)[(PREC(x)-1)/BITS_PER_MP_LIMB]) |
|
#define SET_ZERO(x) (MANT(x)[(PREC(x)-1)/BITS_PER_MP_LIMB] = 0) |
|
|
|
/* reallocates the mantissa of x to q bits and sets the precision to q */ |
#if defined (__cplusplus) |
#define _mpfr_realloc(x, q) { \ |
extern "C" { |
(x)->_mp_d = (mp_ptr) (*_mp_reallocate_func) \ |
#endif |
((x)->_mp_d, (x)->_mp_prec>>3 + 1, (q)>>3 + 1); \ |
|
(x)->_mp_prec = q; } |
|
|
|
void mpfr_init2 _PROTO ((mpfr_ptr, unsigned long int)); |
extern unsigned int __mpfr_flags; |
int mpfr_round_raw _PROTO ((mp_limb_t *, mp_limb_t *, unsigned long, char, |
extern mp_exp_t __mpfr_emin; |
unsigned long, char)); |
extern mp_exp_t __mpfr_emax; |
int mpfr_round_raw2 _PROTO ((mp_limb_t *, unsigned long, char, char, |
mp_exp_t mpfr_get_emin _PROTO ((void)); |
unsigned long)); |
int mpfr_set_emin _PROTO ((mp_exp_t)); |
void mpfr_round _PROTO ((mpfr_ptr, char, unsigned long)); |
mp_exp_t mpfr_get_emax _PROTO ((void)); |
int mpfr_can_round _PROTO ((mpfr_ptr, unsigned long, unsigned char, |
int mpfr_set_emax _PROTO ((mp_exp_t)); |
unsigned char, unsigned long)); |
void mpfr_clear_flags _PROTO ((void)); |
int mpfr_can_round_raw _PROTO ((mp_limb_t *, unsigned long, int, |
void mpfr_clear_underflow _PROTO ((void)); |
unsigned long, |
void mpfr_clear_overflow _PROTO ((void)); |
unsigned char, unsigned char, unsigned long)); |
void mpfr_clear_nanflag _PROTO ((void)); |
void mpfr_set_d _PROTO ((mpfr_ptr, double, unsigned char)); |
void mpfr_clear_inexflag _PROTO ((void)); |
int mpfr_set_z _PROTO ((mpfr_ptr, mpz_srcptr, unsigned char)); |
int mpfr_check_range _PROTO ((mpfr_ptr, mp_rnd_t)); |
double mpfr_get_d _PROTO ((mpfr_srcptr)); |
int mpfr_underflow_p _PROTO ((void)); |
double mpfr_get_d2 _PROTO ((mpfr_srcptr, long)); |
int mpfr_overflow_p _PROTO ((void)); |
void mpfr_set_f _PROTO ((mpfr_ptr, mpf_srcptr, char)); |
int mpfr_nanflag_p _PROTO ((void)); |
void mpfr_set_si _PROTO ((mpfr_ptr, long, unsigned char)); |
int mpfr_inexflag_p _PROTO ((void)); |
void mpfr_set_ui _PROTO ((mpfr_ptr, unsigned long, unsigned char)); |
|
void mpfr_print_raw _PROTO ((mpfr_srcptr)); |
void mpfr_init2 _PROTO ((mpfr_ptr, mp_prec_t)); |
void mpfr_random _PROTO ((mpfr_ptr)); |
void mpfr_init _PROTO ((mpfr_ptr)); |
|
int mpfr_round_prec _PROTO ((mpfr_ptr, mp_rnd_t, mp_prec_t)); |
|
int mpfr_can_round _PROTO ((mpfr_ptr, mp_exp_t, mp_rnd_t, mp_rnd_t, |
|
mp_prec_t)); |
|
int mpfr_set_d _PROTO ((mpfr_ptr, double, mp_rnd_t)); |
|
int mpfr_set_z _PROTO ((mpfr_ptr, mpz_srcptr, mp_rnd_t)); |
|
void mpfr_set_nan _PROTO ((mpfr_ptr)); |
|
void mpfr_set_inf _PROTO ((mpfr_ptr, int)); |
|
mp_exp_t mpfr_get_z_exp _PROTO ((mpz_ptr, mpfr_srcptr)); |
|
int mpfr_set_q _PROTO ((mpfr_ptr, mpq_srcptr, mp_rnd_t)); |
|
double mpfr_get_d1 _PROTO ((mpfr_srcptr)); |
|
double mpfr_get_d _PROTO ((mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_set_f _PROTO ((mpfr_ptr, mpf_srcptr, mp_rnd_t)); |
|
int mpfr_set_si _PROTO ((mpfr_ptr, long, mp_rnd_t)); |
|
int mpfr_set_ui _PROTO ((mpfr_ptr, unsigned long, mp_rnd_t)); |
|
void mpfr_print_binary _PROTO ((mpfr_srcptr)); |
|
void mpfr_random _PROTO ((mpfr_ptr)); |
|
void mpfr_random2 _PROTO ((mpfr_ptr, mp_size_t, mp_exp_t)); |
|
void mpfr_urandomb _PROTO ((mpfr_ptr, gmp_randstate_t)); |
void mpfr_clear _PROTO ((mpfr_ptr)); |
void mpfr_clear _PROTO ((mpfr_ptr)); |
void mpfr_set_str_raw _PROTO ((mpfr_ptr, char *)); |
void mpfr_set_str_raw _PROTO ((mpfr_ptr, char *)); |
void mpfr_get_str_raw _PROTO ((char *, mpfr_srcptr)); |
int mpfr_set_str _PROTO ((mpfr_ptr, __gmp_const char *, int, mp_rnd_t)); |
char* mpfr_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpfr_srcptr, unsigned char)); |
int mpfr_init_set_str _PROTO ((mpfr_ptr, char *, int, mp_rnd_t)); |
size_t mpfr_out_str _PROTO ((FILE *, int, size_t, mpfr_srcptr, unsigned char)); |
char* mpfr_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpfr_srcptr, mp_rnd_t)); |
void mpfr_mul _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned char)); |
#ifdef _MPFR_H_HAVE_FILE |
void mpfr_pow_ui _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned int, unsigned char)); |
size_t mpfr_inp_str _PROTO ((mpfr_ptr, FILE *, int, mp_rnd_t)); |
void mpfr_ui_pow_ui _PROTO ((mpfr_ptr, unsigned int, unsigned int, unsigned char)); |
size_t mpfr_out_str _PROTO ((FILE *, int, size_t, mpfr_srcptr, mp_rnd_t)); |
mp_limb_t mpn_divrem_n _PROTO ((mp_limb_t *, mp_limb_t *, mp_limb_t *, mp_size_t)); |
#endif |
mp_size_t kara_sqrtrem _PROTO ((mp_limb_t *, mp_limb_t *, mp_limb_t *, mp_size_t)); |
int mpfr_mul _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
void mpfr_div _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned char)); |
int mpfr_pow_ui _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
void mpfr_agm _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned char)); |
int mpfr_ui_pow_ui _PROTO ((mpfr_ptr, unsigned long int, unsigned long int, |
int mpfr_sqrt _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned char)); |
mp_rnd_t)); |
void mpfr_add _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned char)); |
int mpfr_div _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
int mpfr_add_one_ulp _PROTO ((mpfr_ptr)); |
void mpfr_agm _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
void mpfr_sub _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned char)); |
int mpfr_sqrt _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
void mpfr_set4 _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned char, int)); |
int mpfr_sqrt_ui _PROTO ((mpfr_ptr, unsigned long, mp_rnd_t)); |
void mpfr_pi _PROTO ((mpfr_ptr, unsigned char)); |
int mpfr_add _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
void mpfr_log2 _PROTO ((mpfr_ptr, unsigned char)); |
int mpfr_add_ui _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned long, mp_rnd_t)); |
int mpfr_log _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned char)); |
int mpfr_sub_ui _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned long, mp_rnd_t)); |
int mpfr_exp _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned char)); |
int mpfr_add_one_ulp _PROTO ((mpfr_ptr, mp_rnd_t)); |
int mpfr_zeta _PROTO ((mpfr_ptr, mpfr_srcptr, unsigned char)); |
int mpfr_sub _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
void mpfr_mul_ui _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long, unsigned char)); |
int mpfr_ui_sub _PROTO ((mpfr_ptr, unsigned long, mpfr_srcptr, mp_rnd_t)); |
void mpfr_set_machine_rnd_mode _PROTO ((unsigned char)); |
void mpfr_reldiff _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
int mpfr_cmp3 _PROTO ((mpfr_srcptr, mpfr_srcptr, long int)); |
void mpfr_const_pi _PROTO ((mpfr_ptr, mp_rnd_t)); |
|
void mpfr_const_log2 _PROTO ((mpfr_ptr, mp_rnd_t)); |
|
int mpfr_const_euler _PROTO ((mpfr_ptr, mp_rnd_t)); |
|
int mpfr_log _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_exp _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_exp2 _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_sin _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_sin_cos _PROTO ((mpfr_ptr, mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_cos _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_tan _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_mul_ui _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
|
void mpfr_set_machine_rnd_mode _PROTO ((mp_rnd_t)); |
int mpfr_cmp_ui_2exp _PROTO ((mpfr_srcptr, unsigned long int, int)); |
int mpfr_cmp_ui_2exp _PROTO ((mpfr_srcptr, unsigned long int, int)); |
int mpfr_cmp_si_2exp _PROTO ((mpfr_srcptr, long int, int)); |
int mpfr_cmp_si_2exp _PROTO ((mpfr_srcptr, long int, int)); |
int mpfr_cmp2 _PROTO ((mpfr_srcptr, mpfr_srcptr)); |
int mpfr_mul_2exp _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
void mpfr_mul_2exp _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int,unsigned char)); |
int mpfr_div_2exp _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
void mpfr_div_2exp _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int,unsigned char)); |
int mpfr_mul_2ui _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
void mpfr_set_prec _PROTO((mpfr_ptr, unsigned long int)); |
int mpfr_div_2ui _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
void mpfr_set_default_prec _PROTO((unsigned long int)); |
int mpfr_mul_2si _PROTO((mpfr_ptr, mpfr_srcptr, long int, mp_rnd_t)); |
extern mp_size_t __gmp_default_fp_bit_precision; |
int mpfr_div_2si _PROTO((mpfr_ptr, mpfr_srcptr, long int, mp_rnd_t)); |
extern char __gmp_default_rounding_mode; |
int mpfr_set_prec _PROTO((mpfr_ptr, mp_prec_t)); |
char * mpfr_print_rnd_mode _PROTO((unsigned char)); |
void mpfr_set_prec_raw _PROTO((mpfr_ptr, mp_prec_t)); |
void mpfr_neg _PROTO((mpfr_ptr, mpfr_srcptr, unsigned char)); |
void mpfr_set_default_prec _PROTO((mp_prec_t)); |
int mpfr_sub_one_ulp _PROTO((mpfr_ptr x)); |
mp_prec_t mpfr_get_default_prec _PROTO((void)); |
int mpfr_div_ui _PROTO((mpfr_ptr y, mpfr_srcptr x, unsigned long u, unsigned char rnd_mode)); |
extern mp_prec_t __mpfr_default_fp_bit_precision; |
unsigned long int mpfr_get_prec _PROTO((mpfr_t x)); |
extern mp_rnd_t __gmp_default_rounding_mode; |
|
char * mpfr_print_rnd_mode _PROTO((mp_rnd_t)); |
|
int mpfr_neg _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_sub_one_ulp _PROTO((mpfr_ptr, mp_rnd_t)); |
|
int mpfr_div_ui _PROTO((mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t)); |
|
int mpfr_ui_div _PROTO((mpfr_ptr, unsigned long int, mpfr_srcptr, mp_rnd_t)); |
|
mp_prec_t mpfr_get_prec _PROTO((mpfr_srcptr)); |
|
void mpfr_set_default_rounding_mode _PROTO((mp_rnd_t)); |
|
int mpfr_eq _PROTO((mpfr_srcptr, mpfr_srcptr, unsigned long)); |
|
int mpfr_rint _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_round _PROTO((mpfr_ptr, mpfr_srcptr)); |
|
int mpfr_trunc _PROTO((mpfr_ptr, mpfr_srcptr)); |
|
int mpfr_ceil _PROTO((mpfr_ptr, mpfr_srcptr)); |
|
int mpfr_floor _PROTO((mpfr_ptr, mpfr_srcptr)); |
|
void mpfr_extract _PROTO((mpz_ptr, mpfr_srcptr, unsigned int)); |
|
void mpfr_swap _PROTO((mpfr_ptr, mpfr_ptr)); |
|
void mpfr_dump _PROTO((mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_set4 _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t, int)); |
|
int mpfr_cmp3 _PROTO ((mpfr_srcptr, mpfr_srcptr, int)); |
|
int mpfr_nan_p _PROTO((mpfr_srcptr)); |
|
int mpfr_inf_p _PROTO((mpfr_srcptr)); |
|
int mpfr_number_p _PROTO((mpfr_srcptr)); |
|
int mpfr_acos _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_asin _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_atan _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
|
#define mpfr_init(x) mpfr_init2(x, __gmp_default_fp_bit_precision) |
int mpfr_sinh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define mpfr_cmp_ui(b,i) mpfr_cmp_ui_2exp(b,i,0) |
int mpfr_tanh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define mpfr_cmp_si(b,i) mpfr_cmp_si_2exp(b,i,0) |
int mpfr_factorial _PROTO ((mpfr_ptr, unsigned long int, mp_rnd_t)); |
#define mpfr_set(a,b,r) mpfr_set4(a,b,r,SIGN(b)) |
int mpfr_ui_pow _PROTO ((mpfr_ptr, unsigned long int, mpfr_srcptr, mp_rnd_t)); |
#define mpfr_cmp(b,c) mpfr_cmp3(b,c,1) |
|
|
|
#if (BITS_PER_MP_LIMB==32) |
int mpfr_atanh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define MPFR_LIMBS_PER_DOUBLE 2 |
int mpfr_acosh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#elif (BITS_PER_MP_LIMB==64) |
int mpfr_asinh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define MPFR_LIMBS_PER_DOUBLE 1 |
|
#endif |
|
|
|
/* gmp-2.0.2 had only one threshold for both multiplication and squaring */ |
int mpfr_cosh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#ifndef KARATSUBA_MUL_THRESHOLD |
int mpfr_sinh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#ifdef KARATSUBA_THRESHOLD |
int mpfr_tanh _PROTO((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define KARATSUBA_MUL_THRESHOLD KARATSUBA_THRESHOLD |
int mpfr_asin _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#else |
int mpfr_atan _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
#define KARATSUBA_MUL_THRESHOLD 16 |
int mpfr_fac_ui _PROTO ((mpfr_ptr, unsigned long int, mp_rnd_t)); |
#endif |
int mpfr_fma _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
#endif |
int mpfr_hypot _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_pow _PROTO ((mpfr_ptr, mpfr_srcptr,mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_pow_si _PROTO ((mpfr_ptr, mpfr_srcptr, long int, mp_rnd_t)); |
|
int mpfr_isinteger _PROTO ((mpfr_srcptr)); |
|
int mpfr_log2 _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_log10 _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_log1p _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_expm1 _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
int mpfr_cbrt _PROTO ((mpfr_ptr, mpfr_srcptr, mp_rnd_t)); |
|
|
#define mpfr_init_set_si(x, i, p, rnd) \ |
int mpfr_min _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
mpfr_init2((x), (p)); mpfr_set_si((x), (i), (rnd)); |
int mpfr_max _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
#define mpfr_init_set_ui(x, i, p, rnd) \ |
int mpfr_dim _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
mpfr_init2((x), (p)); mpfr_set_ui((x), (i), (rnd)); |
int mpfr_copysign _PROTO ((mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); |
#define mpfr_init_set_d(x, d, p, rnd) \ |
|
mpfr_init2((x), (p)); mpfr_set_d((x), (d), (rnd)); |
|
#define mpfr_init_set(x, y, p, rnd) \ |
|
mpfr_init2((x), (p)); mpfr_set((x), (y), (rnd)); |
|
#define mpfr_init_set_f(x, y, p, rnd) \ |
|
mpfr_init2((x), (p)); mpfr_set_f((x), (y), (rnd)); |
|
#define mpfr_init_set_str(x, y, p, rnd) \ |
|
mpfr_init2((x), (p)); mpfr_set_str((x), (y), (rnd)); |
|
#define mpfr_init_set_str_raw(x, y, p, rnd) \ |
|
mpfr_init2((x), (p)); mpfr_set_str_raw((x), (y), (rnd)); |
|
|
|
|
int mpfr_mul_z _PROTO ((mpfr_ptr, mpfr_srcptr, mpz_srcptr, mp_rnd_t)); |
|
int mpfr_div_z _PROTO ((mpfr_ptr, mpfr_srcptr, mpz_srcptr, mp_rnd_t)); |
|
int mpfr_add_z _PROTO ((mpfr_ptr, mpfr_srcptr, mpz_srcptr, mp_rnd_t)); |
|
int mpfr_sub_z _PROTO ((mpfr_ptr, mpfr_srcptr, mpz_srcptr, mp_rnd_t)); |
|
|
|
int mpfr_mul_q _PROTO ((mpfr_ptr, mpfr_srcptr, mpq_srcptr, mp_rnd_t)); |
|
int mpfr_div_q _PROTO ((mpfr_ptr, mpfr_srcptr, mpq_srcptr, mp_rnd_t)); |
|
int mpfr_add_q _PROTO ((mpfr_ptr, mpfr_srcptr, mpq_srcptr, mp_rnd_t)); |
|
int mpfr_sub_q _PROTO ((mpfr_ptr, mpfr_srcptr, mpq_srcptr, mp_rnd_t)); |
|
|
|
#if defined (__cplusplus) |
|
} |
|
#endif |
|
|
|
/* prevent from using mpfr_get_e{min,max} as lvalues */ |
|
#define mpfr_get_emin() (__mpfr_emin + 0) |
|
#define mpfr_get_emax() (__mpfr_emax + 0) |
|
|
|
#define mpfr_clear_flags() \ |
|
((void) (__mpfr_flags = 0)) |
|
#define mpfr_clear_underflow() \ |
|
((void) (__mpfr_flags &= MPFR_FLAGS_ALL ^ MPFR_FLAGS_UNDERFLOW)) |
|
#define mpfr_clear_overflow() \ |
|
((void) (__mpfr_flags &= MPFR_FLAGS_ALL ^ MPFR_FLAGS_OVERFLOW)) |
|
#define mpfr_clear_nanflag() \ |
|
((void) (__mpfr_flags &= MPFR_FLAGS_ALL ^ MPFR_FLAGS_NAN)) |
|
#define mpfr_clear_inexflag() \ |
|
((void) (__mpfr_flags &= MPFR_FLAGS_ALL ^ MPFR_FLAGS_INEXACT)) |
|
#define mpfr_underflow_p() \ |
|
((int) (__mpfr_flags & MPFR_FLAGS_UNDERFLOW)) |
|
#define mpfr_overflow_p() \ |
|
((int) (__mpfr_flags & MPFR_FLAGS_OVERFLOW)) |
|
#define mpfr_nanflag_p() \ |
|
((int) (__mpfr_flags & MPFR_FLAGS_NAN)) |
|
#define mpfr_inexflag_p() \ |
|
((int) (__mpfr_flags & MPFR_FLAGS_INEXACT)) |
|
|
|
#define mpfr_round(a,b) mpfr_rint((a), (b), GMP_RNDN) |
|
#define mpfr_trunc(a,b) mpfr_rint((a), (b), GMP_RNDZ) |
|
#define mpfr_ceil(a,b) mpfr_rint((a), (b), GMP_RNDU) |
|
#define mpfr_floor(a,b) mpfr_rint((a), (b), GMP_RNDD) |
|
|
|
#define mpfr_cmp_ui(b,i) mpfr_cmp_ui_2exp((b),(i),0) |
|
#define mpfr_cmp_si(b,i) mpfr_cmp_si_2exp((b),(i),0) |
|
#define mpfr_set(a,b,r) mpfr_set4(a,b,r,MPFR_SIGN(b)) |
|
#define mpfr_abs(a,b,r) mpfr_set4(a,b,r,1) |
|
#define mpfr_cmp(b, c) mpfr_cmp3(b, c, 1) |
|
#define mpfr_sgn(x) mpfr_cmp_ui(x,0) |
|
#define mpfr_mul_2exp(y,x,n,r) mpfr_mul_2ui((y),(x),(n),(r)) |
|
#define mpfr_div_2exp(y,x,n,r) mpfr_div_2ui((y),(x),(n),(r)) |
|
|
|
#define mpfr_init_set_si(x, i, rnd) \ |
|
( mpfr_init(x), mpfr_set_si((x), (i), (rnd)) ) |
|
#define mpfr_init_set_ui(x, i, rnd) \ |
|
( mpfr_init(x), mpfr_set_ui((x), (i), (rnd)) ) |
|
#define mpfr_init_set_d(x, d, rnd) \ |
|
( mpfr_init(x), mpfr_set_d((x), (d), (rnd)) ) |
|
#define mpfr_init_set_z(x, i, rnd) \ |
|
( mpfr_init(x), mpfr_set_z((x), (i), (rnd)) ) |
|
#define mpfr_init_set_q(x, i, rnd) \ |
|
( mpfr_init(x), mpfr_set_q((x), (i), (rnd)) ) |
|
#define mpfr_init_set(x, y, rnd) \ |
|
( mpfr_init(x), mpfr_set((x), (y), (rnd)) ) |
|
#define mpfr_init_set_f(x, y, rnd) \ |
|
( mpfr_init(x), mpfr_set_f((x), (y), (rnd)) ) |
|
|
|
#endif |