public int CompareTo(object obj) {
BigInteger bi = (BigInteger)obj;
AssertValid();
bi.AssertValid();
if (length > bi.length) {
return 1;
} else if (length < bi.length) {
return -1;
} else if (0 == length) {
return 0;
}
int idx;
for (idx = length - 1; digits[idx] == bi.digits[idx]; idx--) {
if (0 == idx) {
return 0;
}
}
Debug.Assert(idx >= 0 && idx < length);
Debug.Assert(digits[idx] != bi.digits[idx]);
return (digits[idx] > bi.digits[idx]) ? 1 : -1;
}