/*
* Matt McCutchen's Big Integer Library
-* http://mysite.verizon.net/mccutchen/bigint/
*/
#include "BigUnsigned.hh"
* Since 2005.01.06, NumberlikeArray uses `NULL' rather
* than a real array if one of zero length is needed.
* These constructors implicitly call NumberlikeArray's
-* default constructor, which sets `blk2 = NULL, cap = len = 0'.
+* default constructor, which sets `blk = NULL, cap = len = 0'.
* So if the input number is zero, they can just return.
* See remarks in `NumberlikeArray.hh'.
*/
; // NumberlikeArray already did all the work
else {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
}
;
else if (x > 0) {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
} else
;
else {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
}
;
else if (x > 0) {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
} else
;
else {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
}
;
else if (x > 0) {
cap = 1;
- blk2 = new Blk[1];
+ blk = new Blk[1];
len = 1;
blk[0] = Blk(x);
} else
for (i = 0; i < a.len; i++) {
// For each 1-bit of that block...
for (i2 = 0; i2 < N; i2++) {
- if ((a.blk[i] & (1 << i2)) == 0)
+ if ((a.blk[i] & (Blk(1) << i2)) == 0)
continue;
/*
* Add b to this, shifted left i blocks and i2 bits.
* amusing story of this section of code.
*/
Index origLen = len; // Save real length.
+ // 2006.05.03: Copy the number and then change the length!
+ allocateAndCopy(len + 1); // Get the space.
len++; // Increase the length.
- allocateAndCopy(len); // Get the space.
blk[origLen] = 0; // Zero the extra block.
// work2 holds part of the result of a subtraction; see above.
* the region of work2 we copy is just [i, k).
*/
if (!borrowIn) {
- q.blk[i] |= (1 << i2);
+ q.blk[i] |= (Blk(1) << i2);
while (k > i) {
k--;
blk[k] = work2[k];
}
if (carry) {
// Matt fixed a bug 2004.12.24: next 2 lines used to say allocateAndCopy(len + 1)
+ // Matt fixed another bug 2006.04.24:
+ // old number only has len blocks, so copy before increasing length
+ allocateAndCopy(len + 1);
len++;
- allocateAndCopy(len);
blk[i] = 1;
}
}