template<> void SET_INTOBJ(Z_NR<mpz_t> &v, Obj z) { if (IS_INTOBJ(z)) v = INT_INTOBJ(z); else #ifdef FPLLL_VERSION { mpz_t zz; mpz_init(zz); mpz_set(zz, mpz_MPZ(MPZ_LONGINT(z))); v = zz; mpz_clear(zz); } #else mpz_set(v.getData(), mpz_MPZ(MPZ_LONGINT(z))); #endif }
static Obj MPD_INT(Obj self, Obj i) { Obj g; if (IS_INTOBJ(i)) { g = NEW_MPD(8*sizeof(long)); mpd_set_si(MPD_OBJ(g), INT_INTOBJ(i), MPD_RNDNN); } else { Obj f = MPZ_LONGINT(i); g = NEW_MPD(8*sizeof(mp_limb_t)*SIZE_INT(i)); mpfr_set_z(MPD_OBJ(g)->re, mpz_MPZ(f), GMP_RNDN); mpfr_set_ui(MPD_OBJ(g)->im, 0, GMP_RNDN); } return g; }
static Obj MPD_INTPREC(Obj self, Obj i, Obj prec) { Obj g; TEST_IS_INTOBJ("MPD_INTPREC",prec); if (IS_INTOBJ(i)) { g = NEW_MPD(INT_INTOBJ(prec)); mpd_set_si(MPD_OBJ(g), INT_INTOBJ(i), MPD_RNDNN); } else { Obj f = MPZ_LONGINT(i); g = NEW_MPD(INT_INTOBJ(prec)); mpfr_set_z(MPD_OBJ(g)->re, mpz_MPZ(f), GMP_RNDN); mpfr_set_ui(MPD_OBJ(g)->im, 0, GMP_RNDN); } return g; }
template<> void SET_INTOBJ(Z_NR<double> &v, Obj z) { if (IS_INTOBJ(z)) v = INT_INTOBJ(z); else v = mpz_get_d(mpz_MPZ(MPZ_LONGINT(z))); }
template<> void SET_INTOBJ(Z_NR<mpz_t> &v, Obj z) { if (IS_INTOBJ(z)) v = INT_INTOBJ(z); else mpz_set(v.getData(), mpz_MPZ(MPZ_LONGINT(z))); }