croot 0.3.3

A crate for finding real and complex roots
Documentation
use alloc::vec::Vec;

use num_complex::Complex64;

/// Rounds item to specified precision
pub trait Approx {
    fn approx(&self, precision: usize) -> Self;
}

impl Approx for Complex64 {
    fn approx(&self, precision: usize) -> Self {
        let scale_factor = 10.0_f64.powi(precision as i32);

        Complex64::new(
            (self.re * scale_factor).round() / scale_factor,
            (self.im * scale_factor).round() / scale_factor,
        )
    }
}

impl Approx for Vec<Complex64> {
    fn approx(&self, precision: usize) -> Self {
        self.iter().map(|c| c.approx(precision)).collect()
    }
}

#[cfg(test)]
mod tests {
    use core::assert_eq;

    use crate::prelude::root;

    use super::Approx;

    #[test]
    fn approx_test() {
        let original = root(81.0, 4).get(1).copied().unwrap();

        let rounded = original.approx(10);

        assert_eq!(rounded.re, 0.0);
    }
}