public static BigInteger Subtract (BigInteger big, BigInteger small)
{
BigInteger result = new BigInteger (Sign.Positive, big.length);
uint [] r = result.data, b = big.data, s = small.data;
uint i = 0, c = 0;
do {
uint x = s [i];
if (((x += c) < c) | ((r [i] = b [i] - x) > ~x))
c = 1;
else
c = 0;
} while (++i < small.length);
if (i == big.length) goto fixup;
if (c == 1) {
do
r [i] = b [i] - 1;
while (b [i++] == 0 && i < big.length);
if (i == big.length) goto fixup;
}
do
r [i] = b [i];
while (++i < big.length);
fixup:
result.Normalize ();
return result;
}