diff --git a/src/engine/qofmath128.c b/src/engine/qofmath128.c index 9538089809..8f01244f3e 100644 --- a/src/engine/qofmath128.c +++ b/src/engine/qofmath128.c @@ -231,6 +231,28 @@ equal128 (qofint128 a, qofint128 b) return 1; } +/** Return returns 1 if a>b, -1 if b>a, 0 if a == b */ +inline int +cmp128 (qofint128 a, qofint128 b) +{ + if ((0 == a.isneg) && b.isneg) return 1; + if (a.isneg && (0 == b.isneg)) return -1; + if (0 == a.isneg) + { + if (a.hi > b.hi) return 1; + if (a.hi < b.hi) return -1; + if (a.lo > b.lo) return 1; + if (a.lo < b.lo) return -1; + return 0; + } + + if (a.hi > b.hi) return -1; + if (a.hi < b.hi) return 1; + if (a.lo > b.lo) return -1; + if (a.lo < b.lo) return 1; + return 0; +} + /** Return the greatest common factor of two 64-bit numbers */ inline guint64 gcf64(guint64 num, guint64 denom) diff --git a/src/engine/qofmath128.h b/src/engine/qofmath128.h index 140addd64f..b7e68b59d7 100644 --- a/src/engine/qofmath128.h +++ b/src/engine/qofmath128.h @@ -42,6 +42,9 @@ typedef struct { /** Return true of two numbers are equal */ inline gboolean equal128 (qofint128 a, qofint128 b); +/** Return returns 1 if a>b, -1 if b>a, 0 if a == b */ +inline int cmp128 (qofint128 a, qofint128 b); + /** Shift right by one bit (i.e. divide by two) */ inline qofint128 shift128 (qofint128 x);