Ciao, Il Mer, 26 Agosto 2015 6:26 pm, Torbjörn Granlund ha scritto: > ni...@lysator.liu.se (Niels Möller) writes: > > (SIZ(den) | PTR(den)[0]) == 1 > > I think it is correct, assuming that at this point in the code it is > known that SIZ(den) != 0 (and that den is normalized, so that SIZ(den)
At any point in mpq code (we check in the _init functions, and we ASSERT elsewhere) we assume denominator is strictly positive and mpz's are normalised. > Indeed a clever condition, helping Marco's quest against branches, a > condition which also depends on that we always allocate a limb at > PTR(mpz). It depends only on being able to _read_ PTR(mpz)[0]. If we change (I'd agree) mpz_init into void mpz_init (mpz_ptr x) { ALLOC (x) = 0; /* ZERO, any MPZ_REALLOC will allocate */ PTR (x) = & static_const_limb_shared_by_all_instances; SIZ (x) = 0; } (consequently we will have to change all functions that write a single limb, pre-pending an MPZ_REALLOC(var,1) ) That condition will keep on being valid. The same holds for #define mpz_odd_p(z) (((z)->_mp_size!=0)&__GMP_CAST(int,(z)->_mp_d[0])) that we wrote a dozen years ago in gmp-h.in . Regards, m -- http://bodrato.it/ _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org https://gmplib.org/mailman/listinfo/gmp-devel