correct modulus bug (#2118, #2119)

This commit is contained in:
Mark
2023-10-24 14:20:26 -06:00
parent 773d3f81fd
commit 63cbeb9a3c

View File

@@ -850,16 +850,10 @@ 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())
}
}
match (x, y) {
(Number::Fixnum(n1), Number::Fixnum(n2)) => {