GMP¶
Usage
use GMP;
or
import GMP;
Warning
The ‘GMP’ module is unstable
Support for GNU Multiple Precision Arithmetic.
This module provides a low-level interface to a substantial fraction of the GMP library (the GNU Multiple Precision arithmetic library). This support includes the C types for GMP integers, floating point numbers, and random numbers, and nearly every operation on those types. These types and functions enable efficient multi-precision computation within a single locale. See the GMP homepage for more information on this library.
The module BigInteger
leverages this interface to define the
record bigint
. The methods on the record
bigint
are locale aware so that Chapel programs
can, for example, create a distributed array of GMP integers. That
record also provides operator overloads for the standard arithmetic
and assignment operators which tend to enable a more natural
expression of some algorithms. Please see the documentation in
BigInteger
for details.
Using the GMP Module¶
- Step 1:
Build Chapel with GMP
# To use the already-installed GMP export CHPL_GMP=system # To use the distributed GMP export CHPL_GMP=gmp # From $CHPL_HOME make clean; make
- Step 2:
Have your Chapel program
use
the standard GMP moduleuse GMP; // put this statement in your Chapel program
- Step 3:
Start using the supported subset of GMP types and routines defined in this module or the bigint record (see
BigInteger
).
Calling GMP functions directly¶
The low-level option for Chapel programs using multi-precision numbers is to the GMP functions directly. For a full reference to GMP capabilities, please refer to the GMP website and the GMP documentation.
At present, Chapel’s GMP module supports the following GMP types:
And all mpz_t
GMP routines, as well as the following routines:
- proc chpl_gmp_alloc(size: c_size_t) : c_ptr(void)¶
- proc chpl_gmp_realloc(ptr: c_ptr(void), old_size: c_size_t, new_size: c_size_t) : c_ptr(void)¶
- proc chpl_gmp_free(ptr: c_ptr(void), old_size: c_size_t)¶
- proc chpl_gmp_init()¶
- type mp_bitcnt_t = c_ulong¶
The GMP
mp_bitcnt_t
type
- type mp_size_t = c_long¶
The GMP
mp_size_t
type
- type mp_limb_t¶
This is normally uint(64) but can depend on configuration.
- const mp_bits_per_limb : c_int¶
The GMP mp_bits_per_limb` constant
- type mpz_t = 1*(__mpz_struct)¶
The GMP
mpz_t
type
- type mpf_t = 1*(__mpf_struct)¶
The GMP
mpf_t
type
- type gmp_randstate_t = 1*(__gmp_randstate_struct)¶
The GMP
gmp_randstate_t
type
- type mp_exp_t = c_long¶
GMP doesn’t specify what type of integer
mp_exp_t
will be, but Chapel needs to know. In current GMP headers, it is usually ac_long
, so we declare it as such here, and use an initialization-time check to catch cases where this is inaccurate.
- proc mpz_init(ref x: mpz_t)¶
- proc mpz_init2(ref x: mpz_t, n: mp_bitcnt_t)¶
- proc mpz_clear(ref x: mpz_t)¶
- proc _mpz_realloc(ref x: mpz_t, new_alloc: mp_size_t)¶
- proc mpz_realloc2(ref x: mpz_t, n: mp_bitcnt_t)¶
- proc mpz_set(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_set_ui(ref rop: mpz_t, op: c_ulong)¶
- proc mpz_set_si(ref rop: mpz_t, op: c_long)¶
- proc mpz_set_d(ref rop: mpz_t, op: c_double)¶
- proc mpz_set_str(ref rop: mpz_t, str: c_ptrConst(c_char), base: c_int)¶
- proc mpz_swap(ref rop1: mpz_t, ref rop2: mpz_t)¶
- proc mpz_init_set(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_init_set_ui(ref rop: mpz_t, op: c_ulong)¶
- proc mpz_init_set_si(ref rop: mpz_t, op: c_long)¶
- proc mpz_init_set_d(ref rop: mpz_t, op: c_double)¶
- proc mpz_init_set_str(ref rop: mpz_t, str: c_ptrConst(c_char), base: c_int) : c_int¶
- proc mpz_get_ui(const ref op: mpz_t) : c_ulong¶
- proc mpz_get_si(const ref op: mpz_t) : c_long¶
- proc mpz_get_d(const ref op: mpz_t) : c_double¶
- proc mpz_get_d_2exp(ref exp: c_long, const ref op: mpz_t) : c_double¶
- proc mpz_get_str(str: c_ptrConst(c_char), base: c_int, const ref op: mpz_t) : c_ptrConst(c_char)¶
- proc mpz_add(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_add_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_sub(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_sub_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_ui_sub(ref rop: mpz_t, op1: c_ulong, const ref op2: mpz_t)¶
- proc mpz_mul(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_mul_si(ref rop: mpz_t, const ref op1: mpz_t, op2: c_long)¶
- proc mpz_mul_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_addmul(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_addmul_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_submul(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_submul_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_mul_2exp(ref rop: mpz_t, const ref op1: mpz_t, op2: mp_bitcnt_t)¶
- proc mpz_neg(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_abs(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_cdiv_q(ref q: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_cdiv_r(ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_cdiv_qr(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_cdiv_q_ui(ref q: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_cdiv_r_ui(ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_cdiv_qr_ui(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_cdiv_ui(const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_cdiv_q_2exp(ref q: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_cdiv_r_2exp(ref r: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_fdiv_q(ref q: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_fdiv_r(ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_fdiv_qr(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_fdiv_q_ui(ref q: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_fdiv_r_ui(ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_fdiv_qr_ui(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_fdiv_ui(const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_fdiv_q_2exp(ref q: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_fdiv_r_2exp(ref r: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_tdiv_q(ref q: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_tdiv_r(ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_tdiv_qr(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_tdiv_q_ui(ref q: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_tdiv_r_ui(ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_tdiv_qr_ui(ref q: mpz_t, ref r: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_tdiv_ui(const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_tdiv_q_2exp(ref q: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_tdiv_r_2exp(ref r: mpz_t, const ref n: mpz_t, b: mp_bitcnt_t)¶
- proc mpz_mod(ref rop: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_mod_ui(ref rop: mpz_t, const ref n: mpz_t, d: c_ulong) : c_ulong¶
- proc mpz_divexact(ref q: mpz_t, const ref n: mpz_t, const ref d: mpz_t)¶
- proc mpz_divexact_ui(ref q: mpz_t, const ref n: mpz_t, d: c_ulong)¶
- proc mpz_divisible_p(const ref n: mpz_t, const ref d: mpz_t) : c_int¶
- proc mpz_divisible_ui_p(const ref n: mpz_t, d: c_ulong) : c_int¶
- proc mpz_divisible_2exp_p(const ref n: mpz_t, b: mp_bitcnt_t) : c_int¶
- proc mpz_congruent_p(const ref n: mpz_t, const ref c: mpz_t, const ref d: mpz_t) : c_int¶
- proc mpz_congruent_ui_p(const ref n: mpz_t, c: c_ulong, d: c_ulong) : c_int¶
- proc mpz_congruent_2exp_p(const ref n: mpz_t, const ref c: mpz_t, b: mp_bitcnt_t) : c_int¶
- proc mpz_powm(ref rop: mpz_t, const ref base: mpz_t, const ref exp: mpz_t, const ref mod: mpz_t)¶
- proc mpz_powm_ui(ref rop: mpz_t, const ref base: mpz_t, exp: c_ulong, const ref mod: mpz_t)¶
- proc mpz_powm_sec(ref rop: mpz_t, const ref base: mpz_t, const ref exp: mpz_t, const ref mod: mpz_t)¶
- proc mpz_pow_ui(ref rop: mpz_t, const ref base: mpz_t, exp: c_ulong)¶
- proc mpz_ui_pow_ui(ref rop: mpz_t, base: c_ulong, exp: c_ulong)¶
- proc mpz_root(ref rop: mpz_t, const ref op: mpz_t, n: c_ulong) : c_int¶
- proc mpz_rootrem(ref root: mpz_t, ref rem: mpz_t, const ref u: mpz_t, n: c_ulong)¶
- proc mpz_sqrt(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_sqrtrem(ref rop1: mpz_t, ref rop2: mpz_t, const ref op: mpz_t)¶
- proc mpz_perfect_power_p(const ref op: mpz_t) : c_int¶
- proc mpz_perfect_square_p(const ref op: mpz_t) : c_int¶
- proc mpz_probab_prime_p(ref n: mpz_t, reps: c_int) : c_int¶
- proc mpz_nextprime(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_gcd(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_gcd_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_gcdext(ref g: mpz_t, ref s: mpz_t, ref t: mpz_t, const ref a: mpz_t, const ref b: mpz_t)¶
- proc mpz_lcm(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_lcm_ui(ref rop: mpz_t, const ref op1: mpz_t, op2: c_ulong)¶
- proc mpz_invert(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t) : c_int¶
- proc mpz_jacobi(const ref a: mpz_t, const ref b: mpz_t) : c_int¶
- proc mpz_legendre(const ref a: mpz_t, const ref p: mpz_t) : c_int¶
- proc mpz_kronecker(const ref a: mpz_t, const ref b: mpz_t) : c_int¶
- proc mpz_kronecker_si(const ref a: mpz_t, b: c_long) : c_int¶
- proc mpz_kronecker_ui(const ref a: mpz_t, b: c_ulong) : c_int¶
- proc mpz_si_kronecker(a: c_long, const ref b: mpz_t) : c_int¶
- proc mpz_ui_kronecker(a: c_ulong, const ref b: mpz_t) : c_int¶
- proc mpz_remove(ref rop: mpz_t, const ref op: mpz_t, const ref f: mpz_t) : c_ulong¶
- proc mpz_fac_ui(ref rop: mpz_t, n: c_ulong)¶
- proc mpz_2fac_ui(ref rop: mpz_t, n: c_ulong)¶
- proc mpz_mfac_uiui(ref rop: mpz_t, n: c_ulong, m: c_ulong)¶
- proc mpz_primorial_ui(ref rop: mpz_t, n: c_ulong)¶
- proc mpz_bin_ui(ref rop: mpz_t, const ref n: mpz_t, k: c_ulong)¶
- proc mpz_bin_uiui(ref rop: mpz_t, n: c_ulong, k: c_ulong)¶
- proc mpz_fib_ui(ref fn: mpz_t, n: c_ulong)¶
- proc mpz_fib2_ui(ref fn: mpz_t, ref fnsub1: mpz_t, n: c_ulong)¶
- proc mpz_lucnum_ui(ref ln: mpz_t, n: c_ulong)¶
- proc mpz_lucnum2_ui(ref ln: mpz_t, ref lnsub1: mpz_t, n: c_ulong)¶
- proc mpz_cmp(const ref op1: mpz_t, const ref op2: mpz_t) : c_int¶
- proc mpz_cmp_d(const ref op1: mpz_t, op2: c_double) : c_int¶
- proc mpz_cmp_si(const ref op1: mpz_t, op2: c_long) : c_int¶
- proc mpz_cmp_ui(const ref op1: mpz_t, op2: c_ulong) : c_int¶
- proc mpz_cmpabs(const ref op1: mpz_t, const ref op2: mpz_t) : c_int¶
- proc mpz_cmpabs_d(const ref op1: mpz_t, op2: c_double) : c_int¶
- proc mpz_cmpabs_ui(const ref op1: mpz_t, op2: c_ulong) : c_int¶
- proc mpz_sgn(const ref op: mpz_t) : c_int¶
- proc mpz_and(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_ior(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_xor(ref rop: mpz_t, const ref op1: mpz_t, const ref op2: mpz_t)¶
- proc mpz_com(ref rop: mpz_t, const ref op: mpz_t)¶
- proc mpz_popcount(const ref op: mpz_t) : c_ulong¶
- proc mpz_hamdist(const ref op1: mpz_t, const ref op2: mpz_t) : c_ulong¶
- proc mpz_scan0(const ref op: mpz_t, starting_bit: mp_bitcnt_t) : c_ulong¶
- proc mpz_scan1(const ref op: mpz_t, starting_bit: mp_bitcnt_t) : c_ulong¶
- proc mpz_setbit(ref rop: mpz_t, bit_index: mp_bitcnt_t)¶
- proc mpz_clrbit(ref rop: mpz_t, bit_index: mp_bitcnt_t)¶
- proc mpz_combit(ref rop: mpz_t, bit_index: mp_bitcnt_t)¶
- proc mpz_tstbit(const ref op: mpz_t, bit_index: mp_bitcnt_t) : c_int¶
- proc mpz_urandomb(ref rop: mpz_t, ref state: gmp_randstate_t, n: mp_bitcnt_t)¶
- proc mpz_urandomm(ref rop: mpz_t, ref state: gmp_randstate_t, const ref n: mpz_t)¶
- proc mpz_rrandomb(ref rop: mpz_t, ref state: gmp_randstate_t, n: mp_bitcnt_t)¶
- proc mpz_random(ref rop: mpz_t, max_size: mp_size_t)¶
- proc mpz_random2(ref rop: mpz_t, max_size: mp_size_t)¶
- proc mpz_fits_ulong_p(const ref op: mpz_t) : c_int¶
- proc mpz_fits_slong_p(const ref op: mpz_t) : c_int¶
- proc mpz_fits_uint_p(const ref op: mpz_t) : c_int¶
- proc mpz_fits_sint_p(const ref op: mpz_t) : c_int¶
- proc mpz_fits_ushort_p(const ref op: mpz_t) : c_int¶
- proc mpz_fits_sshort_p(const ref op: mpz_t) : c_int¶
- proc mpz_odd_p(const ref op: mpz_t) : c_int¶
- proc mpz_even_p(const ref op: mpz_t) : c_int¶
- proc mpz_sizeinbase(const ref op: mpz_t, base: c_int) : c_size_t¶
- proc mpz_size(const ref x: mpz_t) : c_size_t¶
- proc mpz_limbs_write(ref x: mpz_t, n: mp_size_t) : c_ptr(mp_limb_t)¶
- proc mpz_limbs_finish(ref x: mpz_t, s: mp_size_t)¶
- proc mpf_set_default_prec(prec: mp_bitcnt_t)¶
- proc mpf_get_default_prec() : mp_bitcnt_t¶
- proc mpf_init(ref x: mpf_t)¶
- proc mpf_init2(ref x: mpf_t, prec: mp_bitcnt_t)¶
- proc mpf_clear(ref x: mpf_t)¶
- proc mpf_get_prec(const ref op: mpf_t) : mp_bitcnt_t¶
- proc mpf_set_prec(ref rop: mpf_t, prec: mp_bitcnt_t)¶
- proc mpf_set_prec_raw(ref rop: mpf_t, prec: mp_bitcnt_t)¶
- proc mpf_set(ref rop: mpf_t, const ref op: mpz_t)¶
- proc mpf_set_ui(ref rop: mpf_t, op: c_ulong)¶
- proc mpf_set_si(ref rop: mpf_t, op: c_long)¶
- proc mpf_set_d(ref rop: mpf_t, op: c_double)¶
- proc mpf_set_z(ref rop: mpf_t, const ref op: mpz_t)¶
- proc mpf_set_q(ref rop: mpf_t, const ref op: mpz_t)¶
- proc mpf_set_str(ref rop: mpz_t, str: c_ptrConst(c_char), base: c_int)¶
- proc mpf_swap(ref rop1: mpf_t, ref rop2: mpz_t)¶
- proc mpf_init_set(ref rop: mpf_t, const ref op: mpz_t)¶
- proc mpf_init_set_ui(ref rop: mpf_t, op: c_ulong)¶
- proc mpf_init_set_si(ref rop: mpf_t, op: c_long)¶
- proc mpf_init_set_d(ref rop: mpf_t, op: c_double)¶
- proc mpf_get_d(const ref op: mpf_t) : c_double¶
- proc mpf_get_d_2exp(ref exp: c_long, const ref op: mpz_t) : c_double¶
- proc mpf_get_si(const ref op: mpf_t) : c_long¶
- proc mpf_get_ui(const ref op: mpf_t) : c_ulong¶
- proc mpf_get_str(str: c_ptr(c_char), out expptr: mp_exp_t, base: c_int, n_digits: c_size_t, const in op: mpf_t) : c_ptr(c_char)¶
- proc mpf_add(ref rop: mpf_t, const ref op1: mpf_t, const ref op2: mpf_t)¶
- proc mpf_add_ui(ref rop: mpf_t, const ref op1: mpf_t, op2: c_ulong)¶
- proc mpf_sub(ref rop: mpf_t, const ref op1: mpf_t, const ref op2: mpf_t)¶
- proc mpf_ui_sub(ref rop: mpf_t, op1: c_ulong, const ref op2: mpf_t)¶
- proc mpf_sub_ui(ref rop: mpf_t, const ref op1: mpf_t, op2: c_ulong)¶
- proc mpf_mul(ref rop: mpf_t, const ref op1: mpf_t, const ref op2: mpf_t)¶
- proc mpf_mul_ui(ref rop: mpf_t, const ref op1: mpf_t, op2: c_ulong)¶
- proc mpf_div(ref rop: mpf_t, const ref op1: mpf_t, const ref op2: mpf_t)¶
- proc mpf_ui_div(ref rop: mpf_t, op1: c_ulong, const ref op2: mpf_t)¶
- proc mpf_div_ui(ref rop: mpf_t, const ref op1: mpf_t, op2: c_ulong)¶
- proc mpf_sqrt(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_sqrt_ui(ref rop: mpf_t, op: c_ulong)¶
- proc mpf_pow_ui(ref rop: mpf_t, const ref op1: mpf_t, op2: c_ulong)¶
- proc mpf_neg(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_abs(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_mul_2exp(ref rop: mpf_t, const ref op1: mpf_t, op2: mp_bitcnt_t)¶
- proc mpf_div_2exp(ref rop: mpf_t, const ref op1: mpf_t, op2: mp_bitcnt_t)¶
- proc mpf_cmp(const ref op1: mpf_t, const ref op2: mpf_t) : c_int¶
- proc mpf_cmp_z(const ref op1: mpf_t, const ref op2: mpf_t) : c_int¶
- proc mpf_cmp_d(const ref op1: mpf_t, op2: c_double) : c_int¶
- proc mpf_cmp_ui(const ref op1: mpf_t, op2: c_ulong) : c_int¶
- proc mpf_cmp_si(const ref op1: mpf_t, op2: c_long) : c_int¶
- proc mpf_eq(const ref op1: mpf_t, const ref op2: mpf_t, op3: mp_bitcnt_t) : c_int¶
- proc mpf_reldiff(const ref rop: mpf_t, const ref op1: mpf_t, const ref op2: mpf_t)¶
- proc mpf_sgn(const ref op: mpf_t)¶
- proc mpf_out_str(stream: c_ptr(c_FILE), base: c_int, n_digits: c_size_t, const ref op: mpf_t)¶
- proc mpf_inp_str(ref rop: mpf_t, stream: c_ptr(c_FILE), base: c_int)¶
- proc mpf_ceil(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_floor(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_trunc(ref rop: mpf_t, const ref op: mpf_t)¶
- proc mpf_integer_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_ulong_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_slong_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_uint_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_sint_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_ushort_p(const ref op: mpf_t) : c_int¶
- proc mpf_fits_sshort_p(const ref op: mpf_t) : c_int¶
- proc mpf_urandomb(ref rop: mpf_t, ref state: gmp_randstate_t, nbits: mp_bitcnt_t)¶
- proc gmp_randinit_default(ref state: gmp_randstate_t)¶
- proc gmp_randinit_mt(ref state: gmp_randstate_t)¶
- proc gmp_randinit_lc_2exp(ref state: gmp_randstate_t, const ref a: mpz_t, c: c_ulong, m2exp: mp_bitcnt_t)¶
- proc gmp_randinit_lc_2exp_size(ref state: gmp_randstate_t, size: mp_bitcnt_t)¶
- proc gmp_randinit_set(ref rop: gmp_randstate_t, ref op: gmp_randstate_t)¶
- proc gmp_randclear(ref state: gmp_randstate_t)¶
- proc gmp_randseed(ref state: gmp_randstate_t, const ref seed: mpz_t)¶
- proc gmp_randseed_ui(ref state: gmp_randstate_t, seed: c_ulong)¶
- proc gmp_urandomb_ui(ref state: gmp_randstate_t, n: c_ulong) : c_ulong¶
- proc gmp_urandomm_ui(ref state: gmp_randstate_t, n: c_ulong) : c_ulong¶
- proc gmp_printf(fmt: c_ptrConst(c_char), in arg ...)¶
- proc gmp_fprintf(fp: c_ptr(c_FILE), fmt: c_ptrConst(c_char), in arg ...)¶
- proc gmp_asprintf(ref ret: c_ptr(c_uchar), fmt: c_ptrConst(c_char), in arg ...)¶
- proc chpl_gmp_get_mpz(ref ret: mpz_t, src_locale: int, in from: __mpz_struct, copy_allocated: bool = false)¶
Get an MPZ value stored on another locale
- proc chpl_gmp_mpz_nlimbs(const ref from: mpz_t) : uint(64)¶
Return the number of limbs used in the number
- proc chpl_gmp_mpz_getlimbn(const ref from: mpz_t, n: integral) : uint(64)¶
Return the i’th limb used in the number (counting from 0)
- proc chpl_gmp_mpz_get_str(base: c_int, const ref x: mpz_t) : c_ptrConst(c_char)¶
Get an mpz_t as a string
- class GMPRandom¶
- var state : gmp_randstate_t¶
- proc init()¶
- proc init(twister: bool)
- proc init(a: bigint, c: uint, m2exp: uint)
- proc init(size: uint)
- proc seed(seed: bigint)¶
- proc seed(seed: uint)
- proc urandomb(nbits: uint) : uint¶
- proc urandomm(n: uint) : uint¶
- proc urandomb_ui(nbits: uint) : uint¶
- proc urandomm_ui(n: uint) : uint¶
- proc urandomb(ref r: bigint, nbits: uint)
- proc urandomm(ref r: bigint, n: bigint)
- proc rrandomb(ref r: bigint, nbits: uint)¶