diff options
author | tege <tege@gmplib.org> | 1999-02-22 23:17:55 +0100 |
---|---|---|
committer | tege <tege@gmplib.org> | 1999-02-22 23:17:55 +0100 |
commit | a521b267a6797f9a37ebcc65d99abeb9ff86743b (patch) | |
tree | 6e4192450bc0117d98112069e7f1acdc4161bf71 /mpz | |
parent | 89fcd6cd234b7b4aebc5275ebddbd536442b866b (diff) | |
download | gmp-a521b267a6797f9a37ebcc65d99abeb9ff86743b.tar.gz |
Defer writing to parameter `invert' until end.
Diffstat (limited to 'mpz')
-rw-r--r-- | mpz/invert.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/mpz/invert.c b/mpz/invert.c index 4c3b0f386..9de39faba 100644 --- a/mpz/invert.c +++ b/mpz/invert.c @@ -33,7 +33,7 @@ mpz_invert (inverse, x, n) mpz_srcptr x, n; #endif { - mpz_t gcd; + mpz_t gcd, tmp; mp_size_t xsize, nsize, size; xsize = SIZ (x); @@ -48,19 +48,23 @@ mpz_invert (inverse, x, n) return 0; MPZ_TMP_INIT (gcd, size); - mpz_gcdext (gcd, inverse, (mpz_ptr) 0, x, n); + MPZ_TMP_INIT (tmp, size); + mpz_gcdext (gcd, tmp, (mpz_ptr) 0, x, n); /* If no inverse existed, return with an indication of that. */ if (gcd->_mp_size != 1 || (gcd->_mp_d)[0] != 1) return 0; /* Make sure we return a positive inverse. */ - if (SIZ (inverse) < 0) + if (SIZ (tmp) < 0) { if (SIZ (n) < 0) - mpz_sub (inverse, inverse, n); + mpz_sub (inverse, tmp, n); else - mpz_add (inverse, inverse, n); + mpz_add (inverse, tmp, n); } + else + mpz_set (inverse, tmp); + return 1; } |