(* * LANGUAGE : Forth * PROJECT : iForth gmp binding * DESCRIPTION : Interface for libgmp * CATEGORY : Multiple precision * AUTHOR : David N. Williams * STARTED : 2011-02-20 * REVISED : 2020-01-08 * LICENSE : LGPL 3 *) NEEDS -dynlibs REVISION -libgmp "--- GMP 6.1.x interface Version 0.9.1 ---" DARWIN? [IF] Library: libgmp.dylib Library: libgmp_iforth.dylib [THEN] LINUX? [IF] Library: libgmp.so Library: libgmp_iforth.so [THEN] (* We don't know yet how to make libgmp_iforth.dll for Windows. WINDOWS? [IF] Library: libgmp.dll Library: libgmp_iforth.dll [THEN] *) \ libgmp 6.1.x functions (* Functions in lines marked "NI" are currently not implemented in the bindings. Functions in lines marked "SPECIAL" require special handling, either for libgmp 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] \ 3.8 Useful Macros and Constants AliasedExtern: GMP_VERSION_MAJOR int GMP_VERSION_MAJOR_macro (void); AliasedExtern: GMP_VERSION_MINOR int GMP_VERSION_MINOR_macro (void); AliasedExtern: GMP_VERSION_PATCHLEVEL int GMP_VERSION_PATCHLEVEL_macro (void); \ 5.1 Initialization AliasedExtern: mpz_init void __gmpz_init (mpz_ptr x); AliasedExtern: mpz_init2 void __gmpz_init2 (mpz_ptr x, mp_bitcnt_t n); AliasedExtern: mpz_clear void __gmpz_clear (mpz_ptr x); \ NI: mpz_clears AliasedExtern: mpz_realloc2 void __gmpz_realloc2 (mpz_ptr x, mp_bitcnt_t n); \ 5.2 Assignment AliasedExtern: mpz_set void __gmpz_set (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_set_ui void __gmpz_set_ui (mpz_ptr rop, ulong op); AliasedExtern: mpz_set_si void __gmpz_set_si (mpz_ptr rop, slong op); AliasedExtern: mpz_set_d void __gmpz_set_d (mpz_ptr rop, double op); AliasedExtern: mpz_set_q void __gmpz_set_q (mpz_ptr rop, mpq_ptr op); AliasedExtern: mpz_set_f void __gmpz_set_f (mpz_ptr rop, mpf_ptr op); AliasedExtern: mpz_set_str int __gmpz_set_str (mpz_ptr rop, char *str, int base); AliasedExtern: mpz_swap void __gmpz_swap (mpz_ptr rop1, mpz_ptr rop2); \ 5.3 Combined initialization and assignment AliasedExtern: mpz_init_set void __gmpz_init_set (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_init_set_ui void __gmpz_init_set_ui (mpz_ptr rop, ulong op); AliasedExtern: mpz_init_set_si void __gmpz_init_set_si (mpz_ptr rop, slong op); AliasedExtern: mpz_init_set_d void __gmpz_init_set_d (mpz_ptr rop, double op); AliasedExtern: mpz_init_set_str int __gmpz_init_set_str (mpz_ptr rop, char *str, int base); \ 5.4 Conversion AliasedExtern: mpz_get_ui int __gmpz_get_ui (mpz_ptr op); AliasedExtern: mpz_get_si int __gmpz_get_si (mpz_ptr op); AliasedExtern: mpz_get_d double __gmpz_get_d (mpz_ptr op); AliasedExtern: mpz_get_d_2exp double __gmpz_get_d_2exp (slong *exp, mpz_ptr op); AliasedExtern: mpz_get_str int __gmpz_get_str (char *str, int base, mpz_ptr op); \ 5.5 Arithmetic AliasedExtern: mpz_add void __gmpz_add (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_add_ui void __gmpz_add_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_sub void __gmpz_sub (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_sub_ui void __gmpz_sub_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_ui_sub void __gmpz_ui_sub (mpz_ptr rop, ulong op1, mpz_ptr op2); AliasedExtern: mpz_mul void __gmpz_mul (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_mul_si void __gmpz_mul_si (mpz_ptr rop, mpz_ptr op1, int op2); AliasedExtern: mpz_mul_ui void __gmpz_mul_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_addmul void __gmpz_addmul (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_addmul_ui void __gmpz_addmul_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_submul void __gmpz_submul (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_submul_ui void __gmpz_submul_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_mul_2exp void __gmpz_mul_2exp (mpz_ptr rop, mpz_ptr op1, mp_bitcnt_t op2); AliasedExtern: mpz_neg void __gmpz_neg (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_abs void __gmpz_abs (mpz_ptr rop, mpz_ptr op); \ 5.6 Division AliasedExtern: mpz_cdiv_q void __gmpz_cdiv_q (mpz_ptr q, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_cdiv_r void __gmpz_cdiv_r (mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_cdiv_qr void __gmpz_cdiv_qr (mpz_ptr q, mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_cdiv_q_ui ulong __gmpz_cdiv_q_ui (mpz_ptr q, mpz_ptr n, ulong d); AliasedExtern: mpz_cdiv_r_ui ulong __gmpz_cdiv_r_ui (mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_cdiv_qr_ui ulong __gmpz_cdiv_qr_ui (mpz_ptr q, mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_cdiv_ui ulong __gmpz_cdiv_ui (mpz_ptr n, ulong d); AliasedExtern: mpz_cdiv_q_2exp void __gmpz_cdiv_q_2exp (mpz_ptr q, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_cdiv_r_2exp void __gmpz_cdiv_r_2exp (mpz_ptr r, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_fdiv_q void __gmpz_fdiv_q (mpz_ptr q, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_fdiv_r void __gmpz_fdiv_r (mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_fdiv_qr void __gmpz_fdiv_qr (mpz_ptr q, mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_fdiv_q_ui ulong __gmpz_fdiv_q_ui (mpz_ptr q, mpz_ptr n, ulong d); AliasedExtern: mpz_fdiv_r_ui ulong __gmpz_fdiv_r_ui (mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_fdiv_qr_ui ulong __gmpz_fdiv_qr_ui (mpz_ptr q, mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_fdiv_ui ulong __gmpz_fdiv_ui (mpz_ptr n, ulong d); AliasedExtern: mpz_fdiv_q_2exp void __gmpz_fdiv_q_2exp (mpz_ptr q, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_fdiv_r_2exp void __gmpz_fdiv_r_2exp (mpz_ptr r, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_tdiv_q void __gmpz_tdiv_q (mpz_ptr q, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_tdiv_r void __gmpz_tdiv_r (mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_tdiv_qr void __gmpz_tdiv_qr (mpz_ptr q, mpz_ptr r, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_tdiv_q_ui ulong __gmpz_tdiv_q_ui (mpz_ptr q, mpz_ptr n, ulong d); AliasedExtern: mpz_tdiv_r_ui ulong __gmpz_tdiv_r_ui (mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_tdiv_qr_ui ulong __gmpz_tdiv_qr_ui (mpz_ptr q, mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_tdiv_ui ulong __gmpz_tdiv_ui (mpz_ptr n, ulong d); AliasedExtern: mpz_tdiv_q_2exp void __gmpz_tdiv_q_2exp (mpz_ptr q, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_tdiv_r_2exp void __gmpz_tdiv_r_2exp (mpz_ptr r, mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_mod void __gmpz_mod (mpz_ptr r, mpz_ptr n, mpz_ptr d); \ AliasedExtern: mpz_mod_ui ulong __gmpz_mod_ui (mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_mod_ui ulong __gmpz_fdiv_r_ui (mpz_ptr r, mpz_ptr n, ulong d); AliasedExtern: mpz_divexact void __gmpz_divexact (mpz_ptr q, mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_divexact_ui void __gmpz_divexact_ui (mpz_ptr q, mpz_ptr n, int d); AliasedExtern: mpz_divisible_p int __gmpz_divisible_p (mpz_ptr n, mpz_ptr d); AliasedExtern: mpz_divisible_ui_p int __gmpz_divisible_ui_p (mpz_ptr n, ulong d); AliasedExtern: mpz_divisible_2exp_p int __gmpz_divisible_2exp_p (mpz_ptr n, mp_bitcnt_t b); AliasedExtern: mpz_congruent_p int __gmpz_congruent_p (mpz_ptr n, mpz_ptr c, mpz_ptr d); AliasedExtern: mpz_congruent_ui_p int __gmpz_congruent_ui_p (mpz_ptr n, ulong c, ulong d); AliasedExtern: mpz_congruent_2exp_p int __gmpz_congruent_2exp_p (mpz_ptr n, mpz_ptr c, mp_bitcnt_t b); \ 5.7 Exponentiation AliasedExtern: mpz_powm void __gmpz_powm (mpz_ptr rop, mpz_ptr base, mpz_ptr exp, mpz_ptr mod); AliasedExtern: mpz_powm_ui void __gmpz_powm_ui (mpz_ptr rop, mpz_ptr base, ulong exp, mpz_ptr mod); AliasedExtern: mpz_powm_sec void __gmpz_powm_sec (mpz_ptr rop, mpz_ptr base, mpz_ptr exp, mpz_ptr mod); AliasedExtern: mpz_pow_ui void __gmpz_pow_ui (mpz_ptr rop, mpz_ptr base, ulong exp); AliasedExtern: mpz_ui_pow_ui void __gmpz_ui_pow_ui (mpz_ptr rop, ulong base, ulong exp); \ 5.8 Root extraction AliasedExtern: mpz_root int __gmpz_root (mpz_ptr rop, mpz_ptr op, ulong n); AliasedExtern: mpz_rootrem void __gmpz_rootrem (mpz_ptr root, mpz_ptr rem, mpz_ptr u, ulong n); AliasedExtern: mpz_sqrt void __gmpz_sqrt (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_sqrtrem void __gmpz_sqrtrem (mpz_ptr rop1, mpz_ptr rop2, mpz_ptr op); AliasedExtern: mpz_perfect_power_p int __gmpz_perfect_power_p (mpz_ptr op); AliasedExtern: mpz_perfect_square_p int __gmpz_perfect_square_p (mpz_ptr op); \ 5.9 Number theoretics AliasedExtern: mpz_probab_prime_p int __gmpz_probab_prime_p (mpz_ptr n, int reps); AliasedExtern: mpz_nextprime void __gmpz_nextprime (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_gcd void __gmpz_gcd (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_gcd_ui ulong __gmpz_gcd_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_gcdext void __gmpz_gcdext (mpz_ptr g, mpz_ptr s, mpz_ptr t, mpz_ptr a, mpz_ptr b); AliasedExtern: mpz_lcm void __gmpz_lcm (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_lcm_ui void __gmpz_lcm_ui (mpz_ptr rop, mpz_ptr op1, ulong op2); AliasedExtern: mpz_invert int __gmpz_invert (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_jacobi sxint __gmpz_jacobi (mpz_ptr a, mpz_ptr b) AliasedExtern: mpz_legendre sxint __gmpz_legendre (mpz_ptr a, mpz_ptr b) AliasedExtern: mpz_kronecker sxint __gmpz_jacobi (mpz_ptr a, mpz_ptr b) AliasedExtern: mpz_kronecker_si sxint __gmpz_kronecker_si (mpz_ptr a, slong b) AliasedExtern: mpz_kronecker_ui sxint __gmpz_kronecker_ui (mpz_ptr a, ulong b) AliasedExtern: mpz_si_kronecker sxint __gmpz_si_kronecker (slong a, mpz_ptr b) AliasedExtern: mpz_ui_kronecker sxint __gmpz_ui_kronecker (ulong a, mpz_ptr b) AliasedExtern: mpz_remove mp_bitcnt_t __gmpz_remove (mpz_ptr rop, mpz_ptr op, mpz_ptr f); AliasedExtern: mpz_fac_ui void __gmpz_fac_ui (mpz_ptr rop, ulong op); AliasedExtern: mpz_bin_ui void __gmpz_bin_ui (mpz_ptr rop, mpz_ptr n, ulong k); AliasedExtern: mpz_bin_uiui void __gmpz_bin_uiui (mpz_ptr rop, ulong n, ulong k); AliasedExtern: mpz_fib_ui void __gmpz_fib_ui (mpz_ptr fn, ulong n); AliasedExtern: mpz_fib2_ui void __gmpz_fib2_ui (mpz_ptr fn, mpz_ptr fnsub1, ulong n); AliasedExtern: mpz_lucnum_ui void __gmpz_lucnum_ui (mpz_ptr ln, ulong n); AliasedExtern: mpz_lucnum2_ui void __gmpz_lucnum2_ui (mpz_ptr ln, mpz_ptr lnsub1, ulong n); \ 5.10 Comparison AliasedExtern: mpz_cmp sxint __gmpz_cmp (mpz_ptr op1, mpz_ptr op2) AliasedExtern: mpz_cmp_d sxint __gmpz_cmp_d (mpz_ptr op1, double op2) \ AliasedExtern: mpz_cmp_si MACRO \ AliasedExtern: mpz_cmp_ui MACRO AliasedExtern: mpz_cmpabs sxint __gmpz_cmpabs (mpz_ptr op1, mpz_ptr op2) AliasedExtern: mpz_cmpabs_d sxint __gmpz_cmpabs_d (mpz_ptr op1, double op2) AliasedExtern: mpz_cmpabs_ui sxint __gmpz_cmpabs_ui (mpz_ptr op1, ulong op2) \ AliasedExtern: mpz_sgn MACRO \ 5.11 Logic and bit manipulation AliasedExtern: mpz_and void __gmpz_and (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_ior void __gmpz_ior (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_xor void __gmpz_xor (mpz_ptr rop, mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_com void __gmpz_com (mpz_ptr rop, mpz_ptr op); AliasedExtern: mpz_popcount mp_bitcnt_t __gmpz_popcount (mpz_ptr op); AliasedExtern: mpz_hamdist mp_bitcnt_t __gmpz_hamdist (mpz_ptr op1, mpz_ptr op2); AliasedExtern: mpz_scan0 mp_bitcnt_t __gmpz_scan0 (mpz_ptr op, mp_bitcnt_t starting_bit); AliasedExtern: mpz_scan1 mp_bitcnt_t __gmpz_scan1 (mpz_ptr op, mp_bitcnt_t starting_bit); AliasedExtern: mpz_setbit void __gmpz_setbit (mpz_ptr rop, mp_bitcnt_t bit_index); AliasedExtern: mpz_clrbit void __gmpz_clrbit (mpz_ptr rop, mp_bitcnt_t bit_index); AliasedExtern: mpz_combit void __gmpz_combit (mpz_ptr rop, mp_bitcnt_t bit_index); AliasedExtern: mpz_tstbit int __gmpz_tstbit (mpz_ptr op, mp_bitcnt_t bit_index); \ 5.12 Input and output AliasedExtern: mpz_out_str size_t __gmpz_out_str (FILE *stream, int base, mpz_ptr op); AliasedExtern: mpz_inp_str size_t __gmpz_inp_str (mpz_ptr rop, FILE *stream, int base); AliasedExtern: mpz_out_raw size_t __gmpz_out_raw (FILE *stream, mpz_ptr op); AliasedExtern: mpz_inp_raw size_t __gmpz_inp_raw (mpz_ptr rop, FILE *stream); \ 5.13 Random numbers AliasedExtern: mpz_urandomb void __gmpz_urandomb (mpz_ptr rop, gmp_randstate_t state, mp_bitcnt_t n); AliasedExtern: mpz_urandomm void __gmpz_urandomm (mpz_ptr rop, gmp_randstate_t state, mpz_ptr n); AliasedExtern: mpz_rrandomb void __gmpz_rrandomb (mpz_ptr rop, gmp_randstate_t state, mp_bitcnt_t n); \ NI: mpz_random \ obsolete \ NI: mpz_random2 \ obsolete \ 5.14 Integer export and import AliasedExtern: mpz_import void __gmpz_import (mpz_ptr rop, size_t count, int order, size_t size, int endian, size_t nails, const void *op); \ AliasedExtern: mpz_export void * __gmpz_export (void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, mpz_ptr op); AliasedExtern: mpz_export int __gmpz_export (void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, mpz_ptr op); \ 5.15 Miscellaneous AliasedExtern: mpz_fits_ulong_p int __gmpz_fits_ulong_p (mpz_ptr op); AliasedExtern: mpz_fits_slong_p int __gmpz_fits_slong_p (mpz_ptr op); AliasedExtern: mpz_fits_uint_p int __gmpz_fits_uint_p (mpz_ptr op); AliasedExtern: mpz_fits_sint_p int __gmpz_fits_sint_p (mpz_ptr op); AliasedExtern: mpz_fits_ushort_p int __gmpz_fits_ushort_p (mpz_ptr op); AliasedExtern: mpz_fits_sshort_p int __gmpz_fits_sshort_p (mpz_ptr op); \ SPECIAL: mpz_odd_p \ SPECIAL: mpz_even_p AliasedExtern: mpz_sizeinbase size_t __gmpz_sizeinbase (mpz_ptr op, int base); \ 5.16 Special AliasedExtern: mpz_array_init void __gmpz_array_init (mpz_ptr integer_array, mp_size_t array_size, mp_size_t fixed_num_bits); \ AliasedExtern: _mpz_realloc void * __gmpz_realloc (mpz_ptr integer, mp_size_t new_alloc); AliasedExtern: _mpz_realloc int __gmpz_realloc (mpz_ptr integer, mp_size_t new_alloc); AliasedExtern: mpz_getlimbn mp_limb_t __gmpz_getlimbn (mpz_ptr op, mp_size_t n); AliasedExtern: mpz_size size_t __gmpz_size (mpz_ptr op); \ 6 Rationals AliasedExtern: mpq_canonicalize void __gmpq_canonicalize (mpq_ptr op); \ 6.1 Initialization and assignment AliasedExtern: mpq_init void __gmpq_init (mpq_ptr x); \ NI: mpq_inits AliasedExtern: mpq_clear void __gmpq_clear (mpq_ptr x); \ NI: mpq_clears AliasedExtern: mpq_set void __gmpq_set (mpq_ptr rop, mpq_ptr op); AliasedExtern: mpq_set_z void __gmpq_set_z (mpq_ptr rop, mpz_ptr op); AliasedExtern: mpq_set_ui void __gmpq_set_ui (mpq_ptr rop, ulong op1, ulong op2); AliasedExtern: mpq_set_si void __gmpq_set_si (mpq_ptr rop, slong op1, ulong op2); AliasedExtern: mpq_set_str int __gmpq_set_str (mpq_ptr rop, char *str, int base); AliasedExtern: mpq_swap void __gmpq_swap (mpq_ptr rop1, mpq_ptr rop2); \ 6.2 Conversion AliasedExtern: mpq_get_d double __gmpq_get_d (mpq_ptr op); AliasedExtern: mpq_set_d void __gmpq_set_d (mpq_ptr rop, double op); AliasedExtern: mpq_set_f void __gmpq_set_f (mpq_ptr rop, mpf_ptr op); \ AliasedExtern: mpq_get_str char * __gmpq_get_str (char *str, int base, mpq_ptr op); AliasedExtern: mpq_get_str int __gmpq_get_str (char *str, int base, mpq_ptr op); \ 6.3 Arithmetic AliasedExtern: mpq_add void __gmpq_add (mpq_ptr sum, mpq_ptr addend1, mpq_ptr addend2); AliasedExtern: mpq_sub void __gmpq_sub (mpq_ptr difference, mpq_ptr minuend, mpq_ptr subtrahend); AliasedExtern: mpq_mul void __gmpq_mul (mpq_ptr product, mpq_ptr multiplier, mpq_ptr multiplicand); AliasedExtern: mpq_mul_2exp void __gmpq_mul_2exp (mpq_ptr rop, mpq_ptr op1, mp_bitcnt_t op2); AliasedExtern: mpq_div void __gmpq_div (mpq_ptr quotient, mpq_ptr dividend, mpq_ptr divisor); AliasedExtern: mpq_div_2exp void __gmpq_div_2exp (mpq_ptr rop, mpq_ptr op1, mp_bitcnt_t op2); AliasedExtern: mpq_neg void __gmpq_neg (mpq_ptr negated_operand, mpq_ptr operand); AliasedExtern: mpq_abs void __gmpq_abs (mpq_ptr rop, mpq_ptr op); AliasedExtern: mpq_inv void __gmpq_inv (mpq_ptr inverted_number, mpq_ptr number); \ 6.4 Comparison AliasedExtern: mpq_cmp sxint __gmpq_cmp (mpq_ptr op1, mpq_ptr op2) \ AliasedExtern: mpq_cmp_ui MACRO \ AliasedExtern: mpq_cmp_si MACRO \ AliasedExtern: mpq_sgn MACRO AliasedExtern: mpq_equal int __gmpq_equal (mpq_ptr op1, mpq_ptr op2); \ 6.5 Integer functions \ SPECIAL mpq_numref MACRO \ SPECIAL mpq_denref MACRO AliasedExtern: mpq_get_num void __gmpq_get_num (mpz_ptr numerator, mpq_ptr rational); AliasedExtern: mpq_get_den void __gmpq_get_den (mpz_ptr denominator, mpq_ptr rational); AliasedExtern: mpq_set_num void __gmpq_set_num (mpq_ptr rational, mpz_ptr numerator); AliasedExtern: mpq_set_den void __gmpq_set_den (mpq_ptr rational, mpz_ptr denominator); \ 6.6 Input and output AliasedExtern: mpq_out_str size_t __gmpq_out_str (FILE *stream, int base, mpq_ptr op); AliasedExtern: mpq_inp_str size_t __gmpq_inp_str (mpq_ptr rop, FILE *stream, int base); \ 7 Floating point \ 7.1 Initialization AliasedExtern: mpf_set_default_prec void __gmpf_set_default_prec (mp_bitcnt_t prec); AliasedExtern: mpf_get_default_prec mp_bitcnt_t __gmpf_get_default_prec (void); AliasedExtern: mpf_init void __gmpf_init (mpf_ptr x); AliasedExtern: mpf_init2 void __gmpf_init2 (mpf_ptr x, mp_bitcnt_t prec); \ NI: mpf_inits AliasedExtern: mpf_clear void __gmpf_clear (mpf_ptr x); \ NI: mpf_clears AliasedExtern: mpf_get_prec mp_bitcnt_t __gmpf_get_prec (mpf_ptr op); AliasedExtern: mpf_set_prec void __gmpf_set_prec (mpf_ptr rop, mp_bitcnt_t prec); AliasedExtern: mpf_set_prec_raw void __gmpf_set_prec_raw (mpf_ptr rop, mp_bitcnt_t prec); \ 7.2 Assignment AliasedExtern: mpf_set void __gmpf_set (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_set_ui void __gmpf_set_ui (mpf_ptr rop, ulong op); AliasedExtern: mpf_set_si void __gmpf_set_si (mpf_ptr rop, slong op); AliasedExtern: mpf_set_d void __gmpf_set_d (mpf_ptr rop, double op); AliasedExtern: mpf_set_z void __gmpf_set_z (mpf_ptr rop, mpz_ptr op); AliasedExtern: mpf_set_q void __gmpf_set_q (mpf_ptr rop, mpq_ptr op); AliasedExtern: mpf_set_str int __gmpf_set_str (mpf_ptr rop, char *str, int base); AliasedExtern: mpf_swap void __gmpf_swap (mpf_ptr rop1, mpf_ptr rop2); \ 7.3 Combined initialization and assignment AliasedExtern: mpf_init_set void __gmpf_init_set (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_init_set_ui void __gmpf_init_set_ui (mpf_ptr rop, ulong op); AliasedExtern: mpf_init_set_si void __gmpf_init_set_si (mpf_ptr rop, slong op); AliasedExtern: mpf_init_set_d void __gmpf_init_set_d (mpf_ptr rop, double op); AliasedExtern: mpf_init_set_str int __gmpf_init_set_str (mpf_ptr rop, char *str, int base); \ 7.4 Conversion AliasedExtern: mpf_get_d double __gmpf_get_d (mpf_ptr op); AliasedExtern: mpf_get_d_2exp double __gmpf_get_d_2exp (slong *exp, mpf_ptr op); AliasedExtern: mpf_get_si slong __gmpf_get_si (mpf_ptr op); AliasedExtern: mpf_get_ui ulong __gmpf_get_ui (mpf_ptr op); \ AliasedExtern: mpf_get_str char * __gmpf_get_str (char *str, mp_exp_t *expptr, int base, size_t n_digits, mpf_ptr op); AliasedExtern: mpf_get_str int __gmpf_get_str (char *str, mp_exp_t *expptr, int base, size_t n_digits, mpf_ptr op); \ 7.5 Arithmetic AliasedExtern: mpf_add void __gmpf_add (mpf_ptr rop, mpf_ptr op1, mpf_ptr op2); AliasedExtern: mpf_add_ui void __gmpf_add_ui (mpf_ptr rop, mpf_ptr op1, ulong op2); AliasedExtern: mpf_sub void __gmpf_sub (mpf_ptr rop, mpf_ptr op1, mpf_ptr op2); AliasedExtern: mpf_ui_sub void __gmpf_ui_sub (mpf_ptr rop, ulong op1, mpf_ptr op2); AliasedExtern: mpf_sub_ui void __gmpf_sub_ui (mpf_ptr rop, mpf_ptr op1, ulong op2); AliasedExtern: mpf_mul void __gmpf_mul (mpf_ptr rop, mpf_ptr op1, mpf_ptr op2); AliasedExtern: mpf_mul_ui void __gmpf_mul_ui (mpf_ptr rop, mpf_ptr op1, ulong op2); AliasedExtern: mpf_div void __gmpf_div (mpf_ptr rop, mpf_ptr op1, mpf_ptr op2); AliasedExtern: mpf_ui_div void __gmpf_ui_div (mpf_ptr rop, ulong op1, mpf_ptr op2); AliasedExtern: mpf_div_ui void __gmpf_div_ui (mpf_ptr rop, mpf_ptr op1, ulong op2); AliasedExtern: mpf_sqrt void __gmpf_sqrt (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_sqrt_ui void __gmpf_sqrt_ui (mpf_ptr rop, ulong op); AliasedExtern: mpf_pow_ui void __gmpf_pow_ui (mpf_ptr rop, mpf_ptr op1, ulong op2); AliasedExtern: mpf_neg void __gmpf_neg (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_abs void __gmpf_abs (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_mul_2exp void __gmpf_mul_2exp (mpf_ptr rop, mpf_ptr op1, mp_bitcnt_t op2); AliasedExtern: mpf_div_2exp void __gmpf_div_2exp (mpf_ptr rop, mpf_ptr op1, mp_bitcnt_t op2); \ 7.6 Comparison AliasedExtern: mpf_cmp sxint __gmpf_cmp (mpf_ptr op1, mpf_ptr op2) AliasedExtern: mpf_cmp_d sxint __gmpf_cmp_d (mpf_ptr op1, double op2) AliasedExtern: mpf_cmp_ui sxint __gmpf_cmp_ui (mpf_ptr op1, ulong op2) AliasedExtern: mpf_cmp_si sxint __gmpf_cmp_si (mpf_ptr op1, slong op2) AliasedExtern: mpf_eq int __gmpf_eq (mpf_ptr op1, mpf_ptr op2, mp_bitcnt_t op3); AliasedExtern: mpf_reldiff void __gmpf_reldiff (mpf_ptr rop, mpf_ptr op1, mpf_ptr op2); \ SPECIAL: mpf_sgn \ 7.7 Input and output AliasedExtern: mpf_out_str size_t __gmpf_out_str (FILE *stream, int base, size_t n_digits, mpf_ptr op); AliasedExtern: mpf_inp_str size_t __gmpf_inp_str (mpf_ptr rop, FILE *stream, int base); \ 7.8 Miscellaneous AliasedExtern: mpf_ceil void __gmpf_ceil (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_floor void __gmpf_floor (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_trunc void __gmpf_trunc (mpf_ptr rop, mpf_ptr op); AliasedExtern: mpf_integer_p int __gmpf_integer_p (mpf_ptr op); AliasedExtern: mpf_fits_ulong_p int __gmpf_fits_ulong_p (mpf_ptr op); AliasedExtern: mpf_fits_slong_p int __gmpf_fits_slong_p (mpf_ptr op); AliasedExtern: mpf_fits_uint_p int __gmpf_fits_uint_p (mpf_ptr op); AliasedExtern: mpf_fits_sint_p int __gmpf_fits_sint_p (mpf_ptr op); AliasedExtern: mpf_fits_ushort_p int __gmpf_fits_ushort_p (mpf_ptr op); AliasedExtern: mpf_fits_sshort_p int __gmpf_fits_sshort_p (mpf_ptr op); AliasedExtern: mpf_urandomb void __gmpf_urandomb (mpf_ptr rop, gmp_randstate_t state, mp_bitcnt_t nbits); AliasedExtern: mpf_random2 void __gmpf_random2 (mpf_ptr rop, mp_size_t max_size, mp_exp_t exp); \ 8 Low level \ OMITTED \ 9 Random number state \ 9.1 Initialization AliasedExtern: gmp_randinit_default void __gmp_randinit_default (gmp_randstate_t state); AliasedExtern: gmp_randinit_mt void __gmp_randinit_mt (gmp_randstate_t state); AliasedExtern: gmp_randinit_lc_2exp void __gmp_randinit_lc_2exp (gmp_randstate_t state, mpz_ptr a, ulong c, mp_bitcnt_t m2exp); AliasedExtern: gmp_randinit_lc_2exp_size int __gmp_randinit_lc_2exp_size (gmp_randstate_t state, mp_bitcnt_t size); AliasedExtern: gmp_randinit_set void __gmp_randinit_set (gmp_randstate_t rop, gmp_randstate_t op); \ NI: gmp_randinit \ obsolete AliasedExtern: gmp_randclear void __gmp_randclear (gmp_randstate_t state); \ 9.2 Seeding AliasedExtern: gmp_randseed void __gmp_randseed (gmp_randstate_t state, mpz_ptr seed); AliasedExtern: gmp_randseed_ui void __gmp_randseed_ui (gmp_randstate_t state, ulong seed); \ 9.3 Miscellaneous AliasedExtern: gmp_urandomb_ui ulong __gmp_urandomb_ui (gmp_randstate_t state, ulong n); AliasedExtern: gmp_urandomm_ui ulong __gmp_urandomm_ui (gmp_randstate_t state, ulong n); \ 10 Formatted output \ 10.1 Format strings \ 10.2 Functions 0 [IF] \ NI int gmp_printf (const char *fmt, ... ); int gmp_vprintf (const char *fmt, va list ap); int gmp_fprintf (FILE *fp, const char *fmt, ... ); int gmp_vfprintf (FILE *fp, const char *fmt, va list ap); int gmp_sprintf (char *buf, const char *fmt, ... ); int gmp_vsprintf (char *buf, const char *fmt, va list ap); int gmp_snprintf (char *buf, size_t size, const char *fmt, ... ); int gmp_vsnprintf (char *buf, size_t size, const char *fmt, va list ap); int gmp_asprintf (char **pp, const char *fmt, ... ); int gmp_vasprintf (char **pp, const char *fmt, va list ap); int gmp_obstack_printf (struct obstack *ob, const char *fmt, ... ); int gmp_obstack_vprintf (struct obstack *ob, const char *fmt, va list ap); [THEN] \ 11 Formatted input \ 11.1 Format strings \ 11.2 Functions 0 [IF] \ NI int gmp_scanf (const char *fmt, ... ); int gmp_vscanf (const char *fmt, va list ap); int gmp_fscanf (FILE *fp, const char *fmt, ... ); int gmp_vfscanf (FILE *fp, const char *fmt, va list ap); int gmp_sscanf (const char *s, const char *fmt, ... ); int gmp_vsscanf (const char *s, const char *fmt, va list ap); [THEN] \ SPECIAL BINDINGS (* These bindings use wrappers in the iForth auxiliary C library libgmp-iforth.c. They take care of special cases where direct binding to a gmp 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. *) AliasedExtern: mpz_cmp_si int mpz_cmp_si_macro (mpz_ptr op1, slong op2); AliasedExtern: mpz_cmp_ui int mpz_cmp_ui_macro (mpz_ptr op1, ulong op2); AliasedExtern: mpz_sgn int mpz_sgn_macro (mpz_ptr op); AliasedExtern: mpz_odd_p int mpz_odd_p_macro (mpz_ptr op); AliasedExtern: mpz_even_p int mpz_even_p_macro (mpz_ptr op); AliasedExtern: mpq_cmp_ui int mpq_cmp_ui_macro (mpq_ptr op1, ulong num2, ulong den2); AliasedExtern: mpq_cmp_si int mpq_cmp_si_macro (mpq_ptr op1, slong num2, ulong den2); AliasedExtern: mpq_sgn int mpq_sgn_macro (mpq_ptr_macro op); AliasedExtern: mpq_numref mpz_ptr mpq_numref_macro (mpq_ptr op); AliasedExtern: mpq_denref mpz_ptr mpq_denref_macro (mpq_ptr op); AliasedExtern: mpf_sgn int mpf_sgn_macro (mpf_ptr op); AliasedExtern: /MPZ int sizeof_mpz (void); AliasedExtern: /MPQ int sizeof_mpq (void); AliasedExtern: /MPF int sizeof_mpf (void); AliasedExtern: mp_bits_per_limb int bits_per_mp_limb (void); AliasedExtern: gmp_version int gmp_version_const (void); AliasedExtern: /GMP-RANDSTATE int sizeof_gmp_randstate (void);