(* * LANGUAGE : Forth * PROJECT : iForth mpfr binding * DESCRIPTION : Interface for libmpfr * CATEGORY : Multiple precision * AUTHOR : David N. Williams * STARTED : 2011-04-21 * REVISED : 2020-01-08 * LICENSE : LGPL 3 *) NEEDS -dynlibs REVISION -libmpfr "--- MPFR 4.0.x interface Version 0.9.1 ---" DARWIN? [IF] Library: libmpfr.dylib Library: libmpfr_iforth.dylib [THEN] LINUX? [IF] Library: libmpfr.so Library: libmpfr_iforth.so [THEN] (* We don't know yet how to make libmpfr_iforth.dll for Windows. WINDOWS? [IF] Library: libmpfr.dll Library: libmpfr_iforth.dll [THEN] *) (* Functions in lines marked "NI" are currently not implemented in the bindings. Functions in lines marked "SPECIAL" require special handling, either for libmpfr macros, or for int returns that need to be 64 bits. See the section SPECIAL BINDINGS near the end of this file. *) [UNDEFINED] BITS/CELL [IF] s" ADDRESS-UNIT-BITS" environment? 0= [IF] cr .( ***Can't determine BITS/CELL) ABORT [THEN] 1 cells * constant BITS/CELL [THEN] BITS/CELL 64 <> [IF] cr .( ***BITS/CELL must be 64) ABORT [THEN] \ libmpfr 4.0.x functions \ 5.1 Initialization Extern: void mpfr_init (a) ; Extern: void mpfr_init2 (a, n); Extern: void mpfr_clear (a); Extern: void mpfr_set_default_prec (n); Extern: sxint mpfr_get_default_prec (void); Extern: void mpfr_set_prec (a, n); \ SPECIAL: mpfr_get_prec \ 5.2 Assignment \ SPECIAL: mpfr_set Extern: sxint mpfr_set_ui (a, n, n); Extern: sxint mpfr_set_si (a, n, n); AliasedExtern: mpfr_set_uj sxint __gmpfr_set_uj (a, n, n); AliasedExtern: mpfr_set_sj sxint __gmpfr_set_sj (a, n, n); Extern: sxint mpfr_set_flt (a, double op, n); Extern: sxint mpfr_set_d (a, double op, n); \ NI: mpfr_set_ld Extern: sxint mpfr_set_z (a, a, n); Extern: sxint mpfr_set_q (a, a, n); Extern: sxint mpfr_set_f (a, a, n); Extern: sxint mpfr_set_ui_2exp (a, n, n, n); Extern: sxint mpfr_set_si_2exp (a, n, n, n); AliasedExtern: mpfr_set_uj_2exp sxint __gmpfr_set_uj_2exp (a, n, n, n); AliasedExtern: mpfr_set_sj_2exp sxint __gmpfr_set_sj_2exp (a, n, n, n); Extern: sxint mpfr_set_z_2exp (a, a, n, n); Extern: sxint mpfr_set_str (a, a, n, n); Extern: sxint mpfr_strtofr (a, a, a, n, n); Extern: void mpfr_set_nan (a); Extern: void mpfr_set_inf (a, n); Extern: void mpfr_set_zero (a, n); Extern: void mpfr_swap (a, a); \ 5.3 Combined initialization and assignment 0 [IF] \ SPECIAL mpfr macros Extern: sxint mpfr_init_set (a, a, n); Extern: sxint mpfr_init_set_ui (a, n, n); Extern: sxint mpfr_init_set_si (a, n, n); Extern: sxint mpfr_init_set_d (a, double op, n); \ NI: mpfr_init_set_ld Extern: sxint mpfr_init_set_z (a, a, n); Extern: sxint mpfr_init_set_q (a, a, n); Extern: sxint mpfr_init_set_f (a, a, n); [THEN] Extern: sxint mpfr_init_set_str (a, a, n, n); \ 5.4 Conversion Extern: double mpfr_get_flt (a, n); Extern: double mpfr_get_d (a, n); \ NI: mpfr_get_ld Extern: int mpfr_get_si (a, n); Extern: int mpfr_get_ui (a, n); Extern: int __gmpfr_mpfr_get_sj (a, n); Extern: int __gmpfr_mpfr_get_uj (a, n); Extern: double mpfr_get_d_2exp (a, a, n); \ NI: mpfr_get_ld_2exp Extern: sxint mpfr_get_z_2exp (a, a); Extern: sxint mpfr_get_z (a, a, n); Extern: sxint mpfr_get_f (a, a, n); Extern: void* mpfr_get_str (a, a, n, n, a, n); Extern: void mpfr_free_str (a); Extern: sxint mpfr_fits_ulong_p (a, n); Extern: sxint mpfr_fits_slong_p (a, n); Extern: sxint mpfr_fits_uint_p (a, n); Extern: sxint mpfr_fits_sint_p (a, n); Extern: sxint mpfr_fits_ushort_p (a, n); Extern: sxint mpfr_fits_sshort_p (a, n); Extern: sxint mpfr_fits_uintmax_p (a, n); Extern: sxint mpfr_fits_intmax_p (a, n); \ 5.5 Basic Arithmetic Extern: sxint mpfr_add (a, a, a, n); Extern: sxint mpfr_add_ui (a, a, n, n); Extern: sxint mpfr_add_si (a, a, n, n); Extern: sxint mpfr_add_d (a, a, double op, n); Extern: sxint mpfr_add_z (a, a, a, n); Extern: sxint mpfr_add_q (a, a, a, n); Extern: sxint mpfr_sub (a, a, a, n); Extern: sxint mpfr_ui_sub (a, n, a, n); Extern: sxint mpfr_sub_ui (a, a, n, n); Extern: sxint mpfr_si_sub (a, n, a, n); Extern: sxint mpfr_sub_si (a, a, n, n); Extern: sxint mpfr_d_sub (a, double op, a, n); Extern: sxint mpfr_sub_d (a, a, double op, n); Extern: sxint mpfr_sub_z (a, a, a, n); Extern: sxint mpfr_sub_q (a, a, a, n); Extern: sxint mpfr_mul (a, a, a, n); Extern: sxint mpfr_mul_ui (a, a, n, n); Extern: sxint mpfr_mul_si (a, a, n, n); Extern: sxint mpfr_mul_d (a, a, double op, n); Extern: sxint mpfr_mul_z (a, a, a, n); Extern: sxint mpfr_mul_q (a, a, a, n); Extern: sxint mpfr_sqr (a, a, n); Extern: sxint mpfr_div (a, a, a, n); Extern: sxint mpfr_ui_div (a, n, a, n); Extern: sxint mpfr_div_ui (a, a, n, n); Extern: sxint mpfr_si_div (a, n, a, n); Extern: sxint mpfr_div_si (a, a, n, n); Extern: sxint mpfr_d_div (a, double op, a, n); Extern: sxint mpfr_div_d (a, a, double op, n); Extern: sxint mpfr_div_z (a, a, a, n); Extern: sxint mpfr_div_q (a, a, a, n); Extern: sxint mpfr_sqrt (a, a, n); Extern: sxint mpfr_sqrt_ui (a, n, n); Extern: sxint mpfr_rec_sqrt (a, a, n); Extern: sxint mpfr_cbrt (a, a, n); Extern: sxint mpfr_rootn_ui (a, a, n, n); Extern: sxint mpfr_pow (a, a, a, n); Extern: sxint mpfr_pow_ui (a, a, n, n); Extern: sxint mpfr_pow_si (a, a, n, n); Extern: sxint mpfr_pow_z (a, a, a, n); Extern: sxint mpfr_ui_pow_ui (a, n, n, n); Extern: sxint mpfr_ui_pow (a, n, a, n); Extern: sxint mpfr_neg (a, a, n); Extern: sxint mpfr_abs (a, a, n); Extern: sxint mpfr_dim (a, a, a, n); Extern: sxint mpfr_mul_2ui (a, a, n, n); Extern: sxint mpfr_mul_2si (a, a, n, n); Extern: sxint mpfr_div_2ui (a, a, n, n); Extern: sxint mpfr_div_2si (a, a, n, n); \ 5.6 Comparison Extern: sxint mpfr_cmp (a, a); Extern: sxint mpfr_cmp_ui (a, n); Extern: sxint mpfr_cmp_si (a, n); Extern: sxint mpfr_cmp_d (a, double op); \ NI: mpfr_cmp_ld Extern: sxint mpfr_cmp_z (a, a); Extern: sxint mpfr_cmp_q (a, a); Extern: sxint mpfr_cmp_f (a, a); Extern: sxint mpfr_cmp_ui_2exp (a, n, n); Extern: sxint mpfr_cmp_si_2exp (a, n, n); Extern: sxint mpfr_cmpabs (a, a); Extern: sxint mpfr_nan_p (a); Extern: sxint mpfr_inf_p (a); Extern: sxint mpfr_number_p (a); Extern: sxint mpfr_zero_p (a); Extern: sxint mpfr_regular_p (a); Extern: sxint mpfr_sgn (a); Extern: sxint mpfr_greater_p (a, a); Extern: sxint mpfr_greaterequal_p (a, a); Extern: sxint mpfr_less_p (a, a); Extern: sxint mpfr_lessequal_p (a, a); Extern: sxint mpfr_equal_p (a, a); Extern: sxint mpfr_lessgreater_p (a, a); Extern: sxint mpfr_unordered_p (a, a); \ 5.7 Special Functions Extern: sxint mpfr_log (a, a, n); Extern: sxint mpfr_log2 (a, a, n); Extern: sxint mpfr_log10 (a, a, n); Extern: sxint mpfr_exp (a, a, n); Extern: sxint mpfr_exp2 (a, a, n); Extern: sxint mpfr_exp10 (a, a, n); Extern: sxint mpfr_cos (a, a, n); Extern: sxint mpfr_sin (a, a, n); Extern: sxint mpfr_tan (a, a, n); Extern: sxint mpfr_sin_cos (a, a, a, n); Extern: sxint mpfr_sec (a, a, n); Extern: sxint mpfr_csc (a, a, n); Extern: sxint mpfr_cot (a, a, n); Extern: sxint mpfr_acos (a, a, n); Extern: sxint mpfr_asin (a, a, n); Extern: sxint mpfr_atan (a, a, n); Extern: sxint mpfr_atan2 (a, a, a, n); Extern: sxint mpfr_cosh (a, a, n); Extern: sxint mpfr_sinh (a, a, n); Extern: sxint mpfr_tanh (a, a, n); Extern: sxint mpfr_sinh_cosh (a, a, a, n); Extern: sxint mpfr_sech (a, a, n); Extern: sxint mpfr_csch (a, a, n); Extern: sxint mpfr_coth (a, a, n); Extern: sxint mpfr_acosh (a, a, n); Extern: sxint mpfr_asinh (a, a, n); Extern: sxint mpfr_atanh (a, a, n); Extern: sxint mpfr_fac_ui (a, n, n); Extern: sxint mpfr_log1p (a, a, n); Extern: sxint mpfr_expm1 (a, a, n); Extern: sxint mpfr_eint (a, a, n); Extern: sxint mpfr_li2 (a, a, n); Extern: sxint mpfr_gamma (a, a, n); Extern: sxint mpfr_lngamma (a, a, n); \ SPECIAL: mpfr_lgamma Extern: sxint mpfr_digamma (a, a, n); Extern: sxint mpfr_zeta (a, a, n); Extern: sxint mpfr_zeta_ui (a, n, n); Extern: sxint mpfr_erf (a, a, n); Extern: sxint mpfr_erfc (a, a, n); Extern: sxint mpfr_j0 (a, a, n); Extern: sxint mpfr_j1 (a, a, n); Extern: sxint mpfr_jn (a, n, a, n); Extern: sxint mpfr_y0 (a, a, n); Extern: sxint mpfr_y1 (a, a, n); Extern: sxint mpfr_yn (a, n, a, n); Extern: sxint mpfr_fma (a, a, a, a, n); Extern: sxint mpfr_fms (a, a, a, a, n); Extern: sxint mpfr_agm (a, a, a, n); Extern: sxint mpfr_hypot (a, a, a, n); Extern: sxint mpfr_ai (a, a, n); Extern: sxint mpfr_const_log2 (a, n); Extern: sxint mpfr_const_pi (a, n); Extern: sxint mpfr_const_euler (a, n); Extern: sxint mpfr_const_catalan (a, n); Extern: void mpfr_free_cache (void); Extern: sxint mpfr_sum (a, a, n, n); \ 5.8 Input and output AliasedExtern: sxint __gmpfr_out_str (a, n, n, a, n); AliasedExtern: sxint __gmpfr_inp_str (a, a, n, n); \ 5.9 Formatted Output 0 [IF] \ NI mpfr_fprintf mpfr_vfprintf mpfr_sprintf mpfr_vsprintf mpfr_sprintf mpfr_vsprintf mpfr_snprintf mpfr_vsnprintf mpfr_asprintf mpfr_vasprintf [THEN] \ 5.10 Integer and Remainder Related Functions Extern: sxint mpfr_rint (a, a, n); Extern: sxint mpfr_ceil (a, a); Extern: sxint mpfr_floor (a, a); Extern: sxint mpfr_round (a, a); Extern: sxint mpfr_trunc (a, a); Extern: sxint mpfr_rint_ceil (a, a, n); Extern: sxint mpfr_rint_floor (a, a, n); \ Extern: sxint mpfr_rsxint_round (a, a, n); Extern: sxint mpfr_rint_round (a, a, n); Extern: sxint mpfr_rint_trunc (a, a, n); Extern: sxint mpfr_frac (a, a, n); Extern: sxint mpfr_modf (a, a, a, n); Extern: sxint mpfr_fmod (a, a, a, n); Extern: sxint mpfr_remainder (a, a, a, n); Extern: sxint mpfr_remquo (a, a, a, a, n); Extern: sxint mpfr_integer_p (a); \ 5.11 Rounding Related Functions Extern: void mpfr_set_default_rounding_mode (n); Extern: sxint mpfr_get_default_rounding_mode (void); Extern: sxint mpfr_prec_round (a, n, n); Extern: sxint mpfr_can_round (a, n, n, n, n); Extern: sxint mpfr_min_prec (a); Extern: void * mpfr_print_rnd_mode (n); \ 5.12 Miscellaneous Functions Extern: void mpfr_nexttoward (a, a); Extern: void mpfr_nextabove (a); Extern: void mpfr_nextbelow (a); Extern: sxint mpfr_min (a, a, a, n); Extern: sxint mpfr_max (a, a, a, n); Extern: sxint mpfr_urandomb (a, a); Extern: sxint mpfr_urandom (a, a, n); \ SPECIAL: mpfr_get_exp Extern: sxint mpfr_set_exp (a, n); \ SPECIAL: mpfr_signbit Extern: sxint mpfr_setsign (a, a, n, n); \ SPECIAL: mpfr_copysign Extern: void * mpfr_get_version (void); \ 5.13 Exception Related Functions Extern: sxint mpfr_get_emin (void); Extern: sxint mpfr_get_emax (void); Extern: int mpfr_set_emin (mpfr_exp_t exp); Extern: int mpfr_set_emax (mpfr_exp_t exp); Extern: sxint mpfr_get_emin_min (void); Extern: sxint mpfr_get_emin_max (void); Extern: sxint mpfr_get_emax_min (void); Extern: sxint mpfr_get_emax_max (void); Extern: sxint mpfr_check_range (a, n, n); Extern: sxint mpfr_subnormalize (a, n, n); Extern: void mpfr_clear_underflow (void); Extern: void mpfr_clear_overflow (void); Extern: void mpfr_clear_nanflag (void); Extern: void mpfr_clear_inexflag (void); Extern: void mpfr_clear_erangeflag (void); Extern: void mpfr_set_underflow (void); Extern: void mpfr_set_overflow (void); Extern: void mpfr_set_nanflag (void); Extern: void mpfr_set_inexflag (void); Extern: void mpfr_set_erangeflag (void); Extern: void mpfr_clear_flags (void); Extern: sxint mpfr_underflow_p (void); Extern: sxint mpfr_overflow_p (void); Extern: sxint mpfr_nanflag_p (void); Extern: sxint mpfr_inexflag_p (void); Extern: sxint mpfr_erangeflag_p (void); \ 5.14 Compatibility With MPF Extern: void mpfr_reldiff (a, a, a, n); \ 5.15 Custom Interface \ NI \ SPECIAL BINDINGS (* These bindings use wrappers in the iForth auxiliary C library libmpfr-iforth.c. They take care of special cases where direct binding to an mpfr function doesn't work. Many involve C macros. Others supply special casts where the sign extension of int to long is not properly handled by generic bindings, especially for 64-bit ABI's. *) \ These are mpfr macros. AliasedExtern: mpfr_init_set sxint mpfr_init_set_macro (a, a, n); AliasedExtern: mpfr_init_set_ui sxint mpfr_init_set_ui_macro (a, n, n); AliasedExtern: mpfr_init_set_si sxint mpfr_init_set_si_macro (a, n, n); AliasedExtern: mpfr_init_set_d sxint mpfr_init_set_d_macro (a, double op, n); AliasedExtern: mpfr_init_set_z sxint mpfr_init_set_z_macro (a, a, n); AliasedExtern: mpfr_init_set_q sxint mpfr_init_set_q_macro (a, a, n); AliasedExtern: mpfr_init_set_f sxint mpfr_init_set_f_macro (a, a, n); \ AliasedExtern: mpfr_get_prec sxint mpfr_get_prec_macro (a); AliasedExtern: mpfr_get_exp sxint mpfr_get_exp_macro (a); \ AliasedExtern: mpfr_set sxint mpfr_set_macro (a, a, n); AliasedExtern: mpfr_copysign sxint mpfr_copysign_macro (a, a, a, n); AliasedExtern: mpfr_signbit sxint mpfr_signbit_macro (a); AliasedExtern: mpfr_lgamma sxint mpfr_lgamma_lsgn (a, a, a, n); AliasedExtern: /MPFR sxint sizeof_mpfr (void); AliasedExtern: MPFR_VERSION_MAJOR int MPFR_VERSION_MAJOR_macro (void); AliasedExtern: MPFR_VERSION_MINOR int MPFR_VERSION_MINOR_macro (void); AliasedExtern: MPFR_VERSION_PATCHLEVEL int MPFR_VERSION_PATCHLEVEL_macro (void); AliasedExtern: MPFR_PREC_MIN sxint MPFR_PREC_MIN_macro (void); AliasedExtern: MPFR_PREC_MAX sxint MPFR_PREC_MAX_macro (void); AliasedExtern: MPFR_EMAX_DEFAULT sxint MPFR_EMAX_DEFAULT_macro (void); AliasedExtern: MPFR_EMIN_DEFAULT sxint MPFR_EMIN_DEFAULT_macro (void); AliasedExtern: MPFR_RNDN sxint MPFR_RNDN_macro (void); AliasedExtern: MPFR_RNDZ sxint MPFR_RNDZ_macro (void); AliasedExtern: MPFR_RNDU sxint MPFR_RNDU_macro (void); AliasedExtern: MPFR_RNDD sxint MPFR_RNDD_macro (void); AliasedExtern: MPFR_RNDA sxint MPFR_RNDA_macro (void); AliasedExtern: MPFR_RNDF sxint MPFR_RNDF_macro (void); AliasedExtern: MPFR_RNDNA sxint MPFR_RNDNA_macro (void);