Ciao, Il Gio, 6 Febbraio 2014 9:56 am, Niels ha scritto: > What do you think?
> void > mpz_set_d (mpz_ptr r, double d) > { > int negative; > ! mp_limb_t tp[MPN_SET_D_SIZE]; > ! mpz_t t = MPZ_ROINIT_N (tp, MPN_SET_D_SIZE); Uhm, in tests/mpz/t-limbs.c we test MPZ_ROINIT_N only #if __STDC_VERSION__ >= 199901 Should we use it unconditionally in the library? I'd suggest: void mpz_set_d (mpz_ptr r, double d) { int negative; long exp; DOUBLE_NAN_INF_ACTION (d, __gmp_invalid_operation (), __gmp_invalid_operation ()); negative = d < 0; d = ABS (d); if (d < 1.0) { SIZ(r) = 0; return; } exp = mpn_set_d (mpz_limbs_write (r, MPN_SET_D_SIZE), d); if (exp >= 0) mpz_mul_2exp (r, r, exp); else mpz_fdiv_q_2exp (r, r, -exp); if (negative) SIZ (r) = -SIZ (r); } Regards, m -- http://bodrato.it/software/ _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org https://gmplib.org/mailman/listinfo/gmp-devel