X-Git-Url: https://mattmccutchen.net/bigint/bigint.git/blobdiff_plain/e257a1b25b880dc6246189e7ede1d0ea3db6337d..be1bdfe2b1863ad12b104fadb6bbbb4524724146:/BigInteger.cc diff --git a/BigInteger.cc b/BigInteger.cc index 471d056..f70b021 100644 --- a/BigInteger.cc +++ b/BigInteger.cc @@ -1,6 +1,5 @@ /* * Matt McCutchen's Big Integer Library -* http://mysite.verizon.net/mccutchen/bigint/ */ #include "BigInteger.hh" @@ -67,7 +66,7 @@ BigInteger::BigInteger(unsigned long x) { sign = zero; // NumberlikeArray did the rest else { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); @@ -77,13 +76,13 @@ BigInteger::BigInteger(unsigned long x) { BigInteger::BigInteger(long x) { if (x > 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); } else if (x < 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = negative; len = 1; blk[0] = Blk(-x); @@ -96,7 +95,7 @@ BigInteger::BigInteger(unsigned int x) { sign = zero; else { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); @@ -106,13 +105,13 @@ BigInteger::BigInteger(unsigned int x) { BigInteger::BigInteger(int x) { if (x > 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); } else if (x < 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = negative; len = 1; blk[0] = Blk(-x); @@ -125,7 +124,7 @@ BigInteger::BigInteger(unsigned short x) { sign = zero; else { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); @@ -135,13 +134,13 @@ BigInteger::BigInteger(unsigned short x) { BigInteger::BigInteger(short x) { if (x > 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = positive; len = 1; blk[0] = Blk(x); } else if (x < 0) { cap = 1; - blk2 = new Blk[1]; + blk = new Blk[1]; sign = negative; len = 1; blk[0] = Blk(-x); @@ -358,9 +357,11 @@ void BigInteger::subtract(const BigInteger &a, const BigInteger &b) { // If a is zero, copy b and flip its sign. If b is zero, copy a. if (a.sign == zero) { BigUnsigned::operator =(b); - sign = Sign(-sign); + // Take the negative of _b_'s, sign, not ours. + // Bug pointed out by Sam Larkin on 2005.03.30. + sign = Sign(-b.sign); } else if (b.sign == zero) - operator =(a); + operator =(a); // If their signs differ, take a.sign and add the magnitudes. else if (a.sign != b.sign) { sign = a.sign;