in commons-math-legacy-core/src/main/java/org/apache/commons/math4/legacy/core/dfp/Dfp.java [936:987]
private static int compare(final Dfp a, final Dfp b) {
// Ignore the sign of zero
if (a.mant[a.mant.length - 1] == 0 && b.mant[b.mant.length - 1] == 0 &&
a.nans == FINITE && b.nans == FINITE) {
return 0;
}
if (a.sign != b.sign) {
if (a.sign == -1) {
return -1;
} else {
return 1;
}
}
// deal with the infinities
if (a.nans == INFINITE && b.nans == FINITE) {
return a.sign;
}
if (a.nans == FINITE && b.nans == INFINITE) {
return -b.sign;
}
if (a.nans == INFINITE && b.nans == INFINITE) {
return 0;
}
// Handle special case when a or b is zero, by ignoring the exponents
if (b.mant[b.mant.length - 1] != 0 && a.mant[b.mant.length - 1] != 0) {
if (a.exp < b.exp) {
return -a.sign;
}
if (a.exp > b.exp) {
return a.sign;
}
}
// compare the mantissas
for (int i = a.mant.length - 1; i >= 0; i--) {
if (a.mant[i] > b.mant[i]) {
return a.sign;
}
if (a.mant[i] < b.mant[i]) {
return -a.sign;
}
}
return 0;
}