]> Repositorios git - scryer-prolog.git/commitdiff
correct modulus bug (#2118, #2119)
authorMark <[email protected]>
Tue, 24 Oct 2023 20:20:26 +0000 (14:20 -0600)
committerMark <[email protected]>
Tue, 24 Oct 2023 20:20:26 +0000 (14:20 -0600)
src/machine/arithmetic_ops.rs

index d1f764d6043caf1a331245e6c2ace9930f7f99b2..92e9c5996c567215e57d9f8ec845e664ceabae0d 100644 (file)
@@ -850,15 +850,9 @@ pub(crate) fn modulus(x: Number, y: Number, arena: &mut Arena) -> Result<Number,
     };
 
     fn ibig_rem_floor(n1: &Integer, n2: &Integer) -> Integer {
-        if n1 > &Integer::ZERO && n2 < &Integer::ZERO {
-            ((n1 - Integer::ONE) / n2) - Integer::ONE
-        } else if n1 < &Integer::ZERO && n2 > &Integer::ZERO {
-            ((n1 + Integer::ONE) / n2) - Integer::ONE
-        } else {
-            let ring = ConstDivisor::new(n2.unsigned_abs());
-            let n1 = n1.clone();
-            IBig::from(ring.reduce(n1).residue())
-        }
+        let ring = ConstDivisor::new(n2.unsigned_abs());
+        let n1 = n1.clone();
+        IBig::from(ring.reduce(n1).residue())
     }
 
     match (x, y) {