int promoteToMPZNumber(number *n) { switch(n->type) { case V_INTEGER: mpz_init_set_si64(n->value.mpz, n->value.i); n->type = V_MPZ; break; case V_MPZ: break; case V_MPQ: { mpz_t mpz; mpz_init(mpz); mpz_tdiv_q(mpz, mpq_numref(n->value.mpq), mpq_denref(n->value.mpq)); clearNumber(n); n->type = V_MPZ; n->value.mpz[0] = mpz[0]; break; } case V_FLOAT: mpz_init_set_d(n->value.mpz, n->value.f); n->type = V_MPZ; break; } return TRUE; }
void initGMP(void) { if ( !GD->gmp.initialised ) { GD->gmp.initialised = TRUE; mpz_init_set_si64(MPZ_MIN_TAGGED, PLMINTAGGEDINT); mpz_init_set_si64(MPZ_MAX_TAGGED, PLMAXTAGGEDINT); mpz_init_set_si64(MPZ_MIN_PLINT, PLMININT); mpz_init_set_si64(MPZ_MAX_PLINT, PLMAXINT); mpz_init_max_uint(MPZ_MAX_UINT64, 64); #if SIZEOF_LONG < SIZEOF_VOIDP mpz_init_set_si64(MPZ_MIN_LONG, LONG_MIN); mpz_init_set_si64(MPZ_MAX_LONG, LONG_MAX); #endif #ifdef O_MY_GMP_ALLOC if ( !GD->gmp.keep_alloc_functions ) mp_set_memory_functions(mp_alloc, mp_realloc, mp_free); #endif #if __GNU_MP__ > 3 && __GNU_MP__ < 6 PL_license("lgplv3", "libgmp"); #else PL_license("lgplv2+", "libgmp"); #endif } }
void initGMP() { if ( !GD->gmp.initialised ) { GD->gmp.initialised = TRUE; mpz_init_set_si64(MPZ_MIN_TAGGED, PLMINTAGGEDINT); mpz_init_set_si64(MPZ_MAX_TAGGED, PLMAXTAGGEDINT); mpz_init_set_si64(MPZ_MIN_PLINT, PLMININT); mpz_init_set_si64(MPZ_MAX_PLINT, PLMAXINT); #if SIZEOF_LONG < SIZEOF_VOIDP mpz_init_set_si64(MPZ_MIN_LONG, LONG_MIN); mpz_init_set_si64(MPZ_MAX_LONG, LONG_MAX); #endif #ifdef O_MY_GMP_ALLOC if ( !GD->gmp.keep_alloc_functions ) mp_set_memory_functions(mp_alloc, mp_realloc, mp_free); #endif } }