1use super::data::PI_HALF;
2use super::sin::sin;
3use crate::float::F;
4use crate::utils::f;
5
6pub fn cos(x: F) -> F {
26 sin(x + f(PI_HALF))
27}
28
29#[cfg(test)]
30mod tests {
31 use crate::test::error_bounds;
32 use nikisas_test::prelude::*;
33
34 #[test]
35 fn cos() {
36 assert_eq!(super::cos(0.0), 1.0);
37 assert_eq!(super::cos(core::f32::consts::PI * 0.5), 0.0);
38 assert_eq!(super::cos(core::f32::consts::PI), -1.0);
39 assert_eq!(super::cos(core::f32::consts::PI * 1.5), 0.0);
40
41 UniformSample::with_count(-core::f32::consts::PI, core::f32::consts::PI, 100000)
42 .assert(error_bounds(), |x| (super::cos(x), x.cos()));
43
44 UniformSample::with_count(-2.1e+9, 2.1e+9, 10000)
45 .assert(error_bounds(), |x| (super::cos(x), x.cos()));
46 }
47}