Files
poulpy/rns/src/num_bigint.rs
Jean-Philippe Bossuat c30f598776 added spqlios as submodule
2025-01-27 14:11:04 +01:00

32 lines
809 B
Rust

use num_bigint::BigInt;
use num_integer::Integer;
use num_traits::{One, Signed, Zero};
pub trait Div {
fn div_floor(&self, other: &Self) -> Self;
fn div_round(&self, other: &Self) -> Self;
}
impl Div for BigInt {
fn div_floor(&self, other: &Self) -> Self {
let quo: BigInt = self / other;
if self.sign() != other.sign() {
return quo - BigInt::one();
}
return quo;
}
fn div_round(&self, other: &Self) -> Self {
let (quo, mut rem) = self.div_rem(other);
rem <<= 1;
if rem != BigInt::zero() && &rem.abs() > other {
if self.sign() == other.sign() {
return quo + BigInt::one();
} else {
return quo - BigInt::one();
}
}
return quo;
}
}