Marc Glisse <marc.gli...@inria.fr> writes: > On Tue, 21 Jan 2014, Niels Möller wrote: > >> When does this situation arise? > > __GMPXX_TMPZ_D, for instance.
>From a quick look in gmpxx.h, it appears we could *almost* use MPZ_ROINIT_N. For the target call, the temp variable always used as an mpz_t *input* only (from a quick look at gmpxx.h). But the initialization calls mpz_set_d. Ideal would be something like mp_limb_t limbs[__GMPZ_DBL_LIMBS]; mpz_t temp = MPZ_ROINIT_N(limbs, mpn_set_d(limbs, d)); This assumes that C++ allows initializers with arbitrary non-constant expressions (does it?), and that we implement mpn_set_d. Then, mpz_set_d could be reimplemented as void mpz_set_d (mpz_t r, double d) { rn = ... needed space for d ... mp_ptr rp = MPZ_REALLOC (r, rn); SIZ(r) = mpn_set_d (rp, d)); } In the current code, there's a related function __gmp_extract_double. I haven't really tried to understant how mpz_set_d works. Regards, /Niels -- Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26. Internet email is subject to wholesale government surveillance. _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org https://gmplib.org/mailman/listinfo/gmp-devel