Matt McCutchen's Web Site
/
bigint
/
bigint.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Old snapshot `bigint-2006.05.03'; see the ChangeLog file.
[bigint/bigint.git]
/
BigInteger.cc
diff --git
a/BigInteger.cc
b/BigInteger.cc
index
471d056
..
f70b021
100644
(file)
--- a/
BigInteger.cc
+++ b/
BigInteger.cc
@@
-1,6
+1,5
@@
/*
* Matt McCutchen's Big Integer Library
/*
* Matt McCutchen's Big Integer Library
-* http://mysite.verizon.net/mccutchen/bigint/
*/
#include "BigInteger.hh"
*/
#include "BigInteger.hh"
@@
-67,7
+66,7
@@
BigInteger::BigInteger(unsigned long x) {
sign = zero; // NumberlikeArray did the rest
else {
cap = 1;
sign = zero; // NumberlikeArray did the rest
else {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
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;
BigInteger::BigInteger(long x) {
if (x > 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = negative;
len = 1;
blk[0] = Blk(-x);
sign = negative;
len = 1;
blk[0] = Blk(-x);
@@
-96,7
+95,7
@@
BigInteger::BigInteger(unsigned int x) {
sign = zero;
else {
cap = 1;
sign = zero;
else {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
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;
BigInteger::BigInteger(int x) {
if (x > 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = negative;
len = 1;
blk[0] = Blk(-x);
sign = negative;
len = 1;
blk[0] = Blk(-x);
@@
-125,7
+124,7
@@
BigInteger::BigInteger(unsigned short x) {
sign = zero;
else {
cap = 1;
sign = zero;
else {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
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;
BigInteger::BigInteger(short x) {
if (x > 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
sign = positive;
len = 1;
blk[0] = Blk(x);
} else if (x < 0) {
cap = 1;
- blk
2
= new Blk[1];
+ blk = new Blk[1];
sign = negative;
len = 1;
blk[0] = Blk(-x);
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);
// 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)
} 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;
// If their signs differ, take a.sign and add the magnitudes.
else if (a.sign != b.sign) {
sign = a.sign;