diff --git a/src/rational.h b/src/rational.h
index c9263e263b27bc0885ef486332017a2b884bed32..bab02e12130ae0e51730b2c2387a30c5efa3f55a 100644
--- a/src/rational.h
+++ b/src/rational.h
@@ -125,8 +125,8 @@ public:
     bool operator!= (const rational& r) const { return num_ * r.den_ != den_ * r.num_; }
 
     // Comparison with integers
-    bool operator< (I i) const { return num_ < i * den_; }
-    bool operator> (I i) const { return num_ > i * den_; }
+    bool operator< (I i) const { return den_ < 0 ? (num_ > i * den_) : (num_ < i * den_); }
+    bool operator> (I i) const { return den_ < 0 ? (num_ < i * den_) : (num_ > i * den_); }
     bool operator== (I i) const { return num_ == i * den_; }
     bool operator!= (I i) const { return num_ != i * den_; }
 private: