mpz reuse test takes too much time
Niels Möller
nisse at lysator.liu.se
Sat Dec 3 08:32:33 UTC 2016
"Marco Bodrato" <bodrato at mail.dm.unipi.it> writes:
>> ! #define GCDEXT_CHECK2(i1, i2) do { \
>> ! mpz_gcdext (res1, res2, NULL, i1, i2); \
>> ! MPZ_CHECK_FORMAT (res1); \
>> ! MPZ_CHECK_FORMAT (res2); \
>> ! if (mpz_cmp (ref1, res1) != 0 || mpz_cmp (ref2, res2) != 0) \
>> ! FAIL2 (mpz_gcdext, i1, i2, NULL); \
>> ! } while (0)
>
> Should we check both mpz_gcdext (res1, res2, NULL, i1, i2); and mpz_gcdext
> (res1, NULL, res2, i2, i1) in this macro?
Hmm, you changed the code to not only allow G to be NULL, but allow NULL
S too?
I think that's unnecessary. As you say, mpz_gcdext(G, NULL, NULL, A, B)
is better done as mpz_gcd(G, A, B), and mpz_gcdext(*, NULL, T, A, B) is
equivalent to mpz_gcdext(*, T, NULL, B, A). (Maybe in the latter case,
return value can differ in some corner case, so I'm not sure it's 100%
equivalent, but in general swapping the inputs A and B implies swapping
of the S and T outputs).
So allowing NULL S adds more cases to implement and test, with no gain
in functionality.
> Since we currently support NULL also for the first argument, should we
> check also the cases
> mpz_gcdext (NULL, x, y, x, y);
> mpz_gcdext (NULL, y, x, x, y);
> mpz_gcdext (NULL, s, y, x, y); mpz_gcdext (NULL, y, t, y, x);
> mpz_gcdext (NULL, s, x, x, y); mpz_gcdext (NULL, x, t, y, x);
> mpz_gcdext (NULL, NULL, y, x, y); mpz_gcdext (NULL, x, NULL, x, y);
^
> mpz_gcdext (NULL, NULL, x, x, y); mpz_gcdext (NULL, y, NULL, x, y); ?
^
Maybe, except for the above two.
Regards,
/Niels
--
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.
More information about the gmp-devel
mailing list