use crate::rational_polynomial::RationalPolynomial;
use malachite_base::num::arithmetic::traits::{DivExact, Gcd};
use malachite_base::num::logic::traits::SignificantBits;
impl SignificantBits for &RationalPolynomial {
fn significant_bits(self) -> u64 {
let d = &self.denominator;
let d_bits = d.significant_bits();
self.numerator
.coefficients_asc()
.iter()
.map(|n| {
let n = n.unsigned_abs_ref();
let g = n.gcd(d);
if g == 1u32 {
n.significant_bits() + d_bits
} else {
n.div_exact(&g).significant_bits() + d.div_exact(&g).significant_bits()
}
})
.sum()
}
}