#![forbid(unsafe_code)]
pub const PI: f64 = std::f64::consts::PI;
pub const TAU: f64 = std::f64::consts::TAU;
pub const E: f64 = std::f64::consts::E;
pub const PHI: f64 = 1.618_033_988_749_895_f64;
pub const SQRT_2: f64 = std::f64::consts::SQRT_2;
pub const SQRT_3: f64 = 1.732_050_807_568_877_2_f64;
pub const LN_2: f64 = std::f64::consts::LN_2;
pub const LN_10: f64 = std::f64::consts::LN_10;
pub const LOG2_E: f64 = std::f64::consts::LOG2_E;
pub const LOG10_E: f64 = std::f64::consts::LOG10_E;
pub const FRAC_1_PI: f64 = std::f64::consts::FRAC_1_PI;
pub const FRAC_2_PI: f64 = std::f64::consts::FRAC_2_PI;
pub const FRAC_PI_2: f64 = std::f64::consts::FRAC_PI_2;
pub const FRAC_PI_3: f64 = std::f64::consts::FRAC_PI_3;
pub const FRAC_PI_4: f64 = std::f64::consts::FRAC_PI_4;
pub const FRAC_PI_6: f64 = std::f64::consts::FRAC_PI_6;
pub const FRAC_PI_8: f64 = std::f64::consts::FRAC_PI_8;
#[cfg(test)]
mod tests {
use super::{FRAC_PI_4, PHI, PI, TAU};
fn approx_eq(left: f64, right: f64, relative_tolerance: f64) {
let scale = left.abs().max(right.abs()).max(1.0);
let delta = (left - right).abs();
assert!(
delta <= relative_tolerance * scale,
"left={left:e} right={right:e} delta={delta:e} rel_tol={relative_tolerance:e}"
);
}
#[test]
fn tau_matches_twice_pi() {
assert_eq!(TAU, 2.0 * PI);
}
#[test]
fn phi_matches_its_defining_quadratic() {
approx_eq(PHI * PHI, PHI + 1.0, 1.0e-12);
}
#[test]
fn quarter_turns_reconstruct_pi() {
assert_eq!(FRAC_PI_4 * 4.0, PI);
}
}