Old snapshot `bigint-2006.05.03'; see the ChangeLog file.
[bigint/bigint.git] / BigInteger.cc
index 471d056..f70b021 100644 (file)
@@ -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;