[perl #81400] Fix bmodinv() part of RT 63237
authorPeter John Acklam <pjacklam@online.no>
Sun, 2 Jan 2011 21:13:31 +0000 (13:13 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 2 Jan 2011 22:31:23 +0000 (14:31 -0800)
commit487de07a0a3bad1b47206a54968c2b33bde81618
treedf8b241f66864ec64a490dc0e14095db7515c252
parent4b24804c085ea7ddbc20fa745c8d326ab5e21f36
[perl #81400] Fix bmodinv() part of RT 63237

The following standard definition is used: z is the modular inverse of
x (mod y) if and only if x*z (mod y) = 1 (mod y).

- dist/Math-BigInt/lib/Math/BigInt.pm: Fix the code in bmodinv() so it can
  handle negative arguments. The code can be optimized further for speed,
  but correctnes first.

- dist/Math-BigInt/t/bigintpm.inc: Fix the test case for modinv(-3, -5).
  The output should be -3, since -3 * -3 (mod -5) = -9 (mod -5) = -4, and
  1 (mod -5) = -4.

- dist/Math-BigRat/t/bigratpm.inc: Fix same test case as above.
  Math::BigRat::bmodinv() only handles integers, and is essentially just a
  front-end to Math::BigInt::bmodinv().
dist/Math-BigInt/lib/Math/BigInt.pm
dist/Math-BigInt/t/bigintpm.inc
dist/Math-BigRat/t/bigratpm.inc