1#![crate_type = "lib"]
27
28#[cfg(test)]
42macro_rules! assert_float_eq(
43 ($precision:expr, $given:expr , $expected:expr) => ({
44 match (&($precision), &($given), &($expected)) {
45 (precision_val, given_val, expected_val) => {
46 let diff = given_val-expected_val;
47 if diff.abs() > precision_val.abs() {
48 panic!("floats are not the same: (`{}`: `{:.15e}`, expected: `{:.15e}`, precision: `{:.15e}`, delta: `{:.15e}`)", stringify!($given), *given_val, *expected_val, *precision_val, diff )
49 }
50 }
51 }
52 })
53);
54
55#[cfg(test)]
56macro_rules! assert_float_array_eq(
57 ($precision:expr, $given:expr , $expected:expr) => ({
58 match (&($precision), &($given), &($expected)) {
59 (precision_val, given_val, expected_val) => {
60 assert_eq!(given_val.len(),expected_val.len());
61 for i in 0..given_val.len() {
62 assert_float_eq!(precision_val,given_val[i],expected_val[i]);
63 }
64 }
65 }
66 })
67);
68
69mod analytical;
70mod float;
71mod numerical;
72
73pub use self::float::FloatType;
74
75pub use self::analytical::biquadratic::find_roots_biquadratic;
76pub use self::analytical::cubic::find_roots_cubic;
77pub use self::analytical::cubic_depressed::find_roots_cubic_depressed;
78pub use self::analytical::cubic_normalized::find_roots_cubic_normalized;
79pub use self::analytical::linear::find_roots_linear;
80pub use self::analytical::quadratic::find_roots_quadratic;
81pub use self::analytical::quartic::find_roots_quartic;
82pub use self::analytical::quartic_depressed::find_roots_quartic_depressed;
83pub use self::analytical::roots::Roots;
84
85pub use self::numerical::brent::find_root_brent;
86pub use self::numerical::debug_convergency::DebugConvergency;
87pub use self::numerical::eigen::find_roots_eigen;
88pub use self::numerical::inverse_quadratic::find_root_inverse_quadratic;
89pub use self::numerical::inverse_quadratic::Parabola;
90pub use self::numerical::newton_raphson::find_root_newton_raphson;
91pub use self::numerical::polynom::find_roots_sturm;
92pub use self::numerical::regula_falsi::find_root_regula_falsi;
93pub use self::numerical::secant::find_root_secant;
94pub use self::numerical::simple_convergency::SimpleConvergency;
95pub use self::numerical::Convergency;
96pub use self::numerical::Interval;
97pub use self::numerical::Sample;
98pub use self::numerical::SearchError;