use horner_eval::horner;
use num_traits::{MulAdd, Zero};
use std::env;
fn main() {
let y = 5.5;
let z = 6.6;
let w = 2.718;
let mut args = env::args();
args.next();
let x2: f64 = match args.next() {
Some(arg) => arg.trim().parse().unwrap_or_else(|_| 2.0),
None => 2.0,
};
println!("{}", evalpoly(x2 + 7.777771908, y, z, w, 7.7, 8.8, 9.9, 11.1));
}
#[inline(never)]
pub fn evalpoly<T: MulAdd + MulAdd<Output = T> + Copy>(x: T, a0: T, a1: T, a2: T, a3: T, a4: T, a5: T, a6: T) -> T {
horner!(x, a0, a1, a2, a3, a4, a5, a6)
}