mpq_cmp_z

Torbjörn Granlund tg at gmplib.org
Mon Aug 24 16:24:40 UTC 2015


"Marco Bodrato" <bodrato at mail.dm.unipi.it> writes:

  On Fri, August 21, 2015 10:36 pm, Marco Bodrato wrote:
  > Maybe changing the prototype of mpq_cmp_maybe_z to
  > int mpq_cmp_maybe_z (mpq_srcptr op1, const void *op2, int op2_is_mpz)
  
  ... no, void * is a nonsense ...
  
  Maybe the attached version is better, it uses the cast (mpz_srcptr) op2
  when the numerator is needed, and a plain DEN(op2) to access the
  denominator if it is available.
  
(Being busy, therefore slow to read code.)

An alternative to messing with void * would be an interface like this:

static int
cmp_helper (mpq_srcptr op1, mpz_srcptr op2num, mpz_srcptr op2den)
  ...

Then have mpq_cmp simply split its op2 arg before dropping into the
helper function, and mpz_cmp_z pass its 2nd arg as op2num, and then ether
pass a global static op2den which is compile-time initialised to 1, or
perhaps pass NULL.

That'd allow tail calls for most machines, and should not need many
pesky branches.

-- 
Torbjörn
Please encrypt, key id 0xC8601622


More information about the gmp-devel mailing list