use super::{F32Like, LikeF32};
use crate::double::SemiDouble;
const FRAC_1_6_HI: u32 = 0x3E2AA000; const FRAC_1_6_LO: u32 = 0x382AAAAB;
impl<F: F32Like> crate::generic::SinCos<LikeF32> for F {
#[inline]
fn frac_1_6_ex() -> SemiDouble<Self> {
SemiDouble::with_parts(Self::from_raw(FRAC_1_6_HI), Self::from_raw(FRAC_1_6_LO))
}
#[inline]
fn sin_poly(x2: Self, x5: Self) -> (Self, Self) {
const K3: u32 = 0xBE2AAAA3; const K5: u32 = 0x3C0883AC; const K7: u32 = 0xB94CA607;
let k3 = Self::from_raw(K3);
let k5 = Self::from_raw(K5);
let k7 = Self::from_raw(K7);
let r = horner!(x5, x2, [k5, k7]);
(r, k3)
}
#[inline]
fn sin_poly_ex(x2: Self, x5: Self) -> Self {
const K5: u32 = 0x3C088602; const K7: u32 = 0xB94D49A3;
let k5 = Self::from_raw(K5);
let k7 = Self::from_raw(K7);
horner!(x5, x2, [k5, k7])
}
#[inline]
fn cos_poly(x2: Self, x4: Self) -> Self {
const K4: u32 = 0x3D2AAAA5; const K6: u32 = 0xBAB60642; const K8: u32 = 0x37CCFFFD;
let k4 = Self::from_raw(K4);
let k6 = Self::from_raw(K6);
let k8 = Self::from_raw(K8);
horner!(x4, x2, [k4, k6, k8])
}
}