use super::{F64Like, LikeF64};
use crate::double::NormDouble;
const FRAC_PI_2_HI: u64 = 0x3FF921FB54442D18; const FRAC_PI_2_LO: u64 = 0x3C91A62633145C07;
impl<F: F64Like> crate::generic::AsinAcos<LikeF64> for F {
#[inline]
fn frac_pi_2_ex() -> NormDouble<Self> {
NormDouble::with_parts(Self::from_raw(FRAC_PI_2_HI), Self::from_raw(FRAC_PI_2_LO))
}
#[inline]
fn asin_poly(x2: Self) -> Self {
const K0: u64 = 0x3FC55555555555D2; const K2: u64 = 0x3FB3333333324C2E; const K4: u64 = 0x3FA6DB6DB77D26B9; const K6: u64 = 0x3F9F1C718B74D800; const K8: u64 = 0x3F96E8C0DAD01AA8; const K10: u64 = 0x3F91C46F55A2C90D; const K12: u64 = 0x3F8CA61564004848; const K14: u64 = 0x3F873909EF7CF228; const K16: u64 = 0x3F86B8816A8DD57F; const K18: u64 = 0x3F652E98FB7458AB; const K20: u64 = 0x3F98E2317EB55DFA; const K22: u64 = 0xBF9917F6F770485D; const K24: u64 = 0x3FA1C880C9A9ACF3;
let k0 = Self::from_raw(K0);
let k2 = Self::from_raw(K2);
let k4 = Self::from_raw(K4);
let k6 = Self::from_raw(K6);
let k8 = Self::from_raw(K8);
let k10 = Self::from_raw(K10);
let k12 = Self::from_raw(K12);
let k14 = Self::from_raw(K14);
let k16 = Self::from_raw(K16);
let k18 = Self::from_raw(K18);
let k20 = Self::from_raw(K20);
let k22 = Self::from_raw(K22);
let k24 = Self::from_raw(K24);
k0 + horner!(
x2,
x2,
[k2, k4, k6, k8, k10, k12, k14, k16, k18, k20, k22, k24]
)
}
}