use core::ops::{Add, Div, Mul, Sub};
use super::taylor::taylor_series;
pub(super) fn sin<T>(value: T, zero: T, one: T) -> T
where
T: Copy + Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T>,
{
let neg_x2 = zero.sub(value.mul(value));
let two = one.add(one);
let three = two.add(one);
taylor_series(value, neg_x2, two, three, two, two)
}
pub(super) fn cos<T>(value: T, zero: T, one: T) -> T
where
T: Copy + Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T>,
{
let neg_x2 = zero.sub(value.mul(value));
let two = one.add(one);
taylor_series(one, neg_x2, one, two, two, two)
}