diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
index a72cdb1..1e60668 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
@@ -953,9 +953,9 @@
         if (lhsSigNum == 0) {
             return 0;
         }
-        // Compare magnitude
-        final BigInteger nOd = numerator.multiply(other.denominator);
-        final BigInteger dOn = denominator.multiply(other.numerator);
+        // Compare absolute magnitude
+        final BigInteger nOd = numerator.abs().multiply(other.denominator.abs());
+        final BigInteger dOn = denominator.abs().multiply(other.numerator.abs());
         return nOd.compareTo(dOn);
     }
 
diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
index 99151f5..5154eff 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/Fraction.java
@@ -696,15 +696,27 @@
      */
     @Override
     public int compareTo(Fraction other) {
-        final int lhsSigNum = signum();
-        final int rhsSigNum = other.signum();
+        // Compute the sign of each part
+        final int lns = Integer.signum(numerator);
+        final int lds = Integer.signum(denominator);
+        final int rns = Integer.signum(other.numerator);
+        final int rds = Integer.signum(other.denominator);
+
+        final int lhsSigNum = lns * lds;
+        final int rhsSigNum = rns * rds;
 
         if (lhsSigNum != rhsSigNum) {
             return (lhsSigNum > rhsSigNum) ? 1 : -1;
         }
-        // Same sign: compare magnitude
-        final long nOd = ((long) numerator) * other.denominator;
-        final long dOn = ((long) denominator) * other.numerator;
+        // Same sign.
+        // Avoid a multiply if both fractions are zero
+        if (lhsSigNum == 0) {
+            return 0;
+        }
+        // Compare absolute magnitude.
+        // Multiplication by the signum is equal to the absolute.
+        final long nOd = ((long) numerator) * lns * other.denominator * rds;
+        final long dOn = ((long) denominator) * lds * other.numerator * rns;
         return Long.compare(nOd, dOn);
     }
 
diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
index 777d0a9..bdc8003 100644
--- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
+++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/BigFractionTest.java
@@ -211,9 +211,9 @@
         Assertions.assertEquals(0, f.compareTo(a));
         Assertions.assertEquals(1, f.compareTo(e));
         Assertions.assertEquals(-1, e.compareTo(f));
-//        Assertions.assertEquals(-1, g.compareTo(a));
+        Assertions.assertEquals(-1, g.compareTo(a));
         Assertions.assertEquals(-1, g.compareTo(f));
-//        Assertions.assertEquals(1, a.compareTo(g));
+        Assertions.assertEquals(1, a.compareTo(g));
         Assertions.assertEquals(-1, d.compareTo(g));
 
         Assertions.assertEquals(0, BigFraction.of(0, 3).compareTo(BigFraction.of(0, -2)));
diff --git a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
index 82fe803..7205c6b 100644
--- a/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
+++ b/commons-numbers-fraction/src/test/java/org/apache/commons/numbers/fraction/FractionTest.java
@@ -170,9 +170,9 @@
         Assertions.assertEquals(0, f.compareTo(a));
         Assertions.assertEquals(1, f.compareTo(e));
         Assertions.assertEquals(-1, e.compareTo(f));
-//        Assertions.assertEquals(-1, g.compareTo(a));
+        Assertions.assertEquals(-1, g.compareTo(a));
         Assertions.assertEquals(-1, g.compareTo(f));
-//        Assertions.assertEquals(1, a.compareTo(g));
+        Assertions.assertEquals(1, a.compareTo(g));
         Assertions.assertEquals(-1, d.compareTo(g));
 
         Assertions.assertEquals(0, Fraction.of(0, 3).compareTo(Fraction.of(0, -2)));
