mpz_{eq,lt,gt}_{ui,si}_p macros?

bodrato at mail.dm.unipi.it bodrato at mail.dm.unipi.it
Sun Feb 10 20:22:38 CET 2013


Ciao!

I played with gmpxx.h for a while, because Torbjorn said something about
possible functions for comparison with shortcuts to detect specific
conditions (>, =, or <)...

After some tests with C++ I moved my experiments to plain C.

The current status of the experiments is shown by the attached patch. The
proposal is: let's introduce new macros like mpz_lt_ui_p, with default
definition like the following:
#define mpz_lt_ui_p(Z,UI) (_mpz_cmp_ui (Z,UI) < 0)
but possibly handling special cases with faster code...

Do you think it can make sense?

The attached patch is able to sensibly speed-up the execution of the
simple C++ loop I'm testing:

#include "gmpxx.h"

#define BIGN 123456789
#define BIGS 987654321

int main (void)
{
  mpz_class z(BIGN);
  unsigned r = 0;

  for (z*=BIGS; z>r; z-=BIGS)
    ++r;

  printf ("%u",r);
}

If you like the idea, then please read carefully the lt_si and gt_si
variants, I'm not sure I'm handling correctly the negative constants.

Best regards,
m

-- 
http://bodrato.it/papers/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cmp.diff
Type: text/x-patch
Size: 5265 bytes
Desc: not available
URL: <http://gmplib.org/list-archives/gmp-devel/attachments/20130210/0b0f3a15/attachment.bin>


More information about the gmp-devel mailing list