diff --git a/src/common/min_max.rs b/src/common/min_max.rs
index 9ff3b79f2ec51e7627bd9efccd178a63ba2b7d2e..0de66c540fbd4c56991395583498b3b5db82f00c 100644
--- a/src/common/min_max.rs
+++ b/src/common/min_max.rs
@@ -466,8 +466,7 @@ impl MinMax {
     }
 
     pub fn rank_0(&self, index: u64) -> Result<u64, NodeError> {
-        let result = (index - self.rank_1(index).unwrap()) as i64;
-        if result < 0 {
+        if index >= self.bits.len() {
             return Err(NodeError::NotANodeError);
         }
         Ok(index - self.rank_1(index).unwrap() + 1)
@@ -731,6 +730,7 @@ mod tests {
         let min_max = MinMax::new(bits, 4);
         assert_eq!(min_max.rank_1(11).unwrap(), 7);
         assert_eq!(min_max.rank_1(21).unwrap(), 11);
+        assert_eq!(min_max.rank_1(22).unwrap_err(), NodeError::NotANodeError);
     }
 
     #[test]
@@ -743,6 +743,7 @@ mod tests {
         assert_eq!(min_max.rank_0(12).unwrap(), 6);
         assert_eq!(min_max.rank_0(17).unwrap(), 7);
         assert_eq!(min_max.rank_0(21).unwrap(), 11);
+        assert_eq!(min_max.rank_0(22).unwrap_err(), NodeError::NotANodeError);
     }
 
     #[test]