use_math_constants/
lib.rs1#![forbid(unsafe_code)]
2
3pub const PI: f64 = std::f64::consts::PI;
7
8pub const TAU: f64 = std::f64::consts::TAU;
10
11pub const E: f64 = std::f64::consts::E;
13
14pub const PHI: f64 = 1.618_033_988_749_895_f64;
16
17pub const SQRT_2: f64 = std::f64::consts::SQRT_2;
19
20pub const SQRT_3: f64 = 1.732_050_807_568_877_2_f64;
22
23pub const LN_2: f64 = std::f64::consts::LN_2;
25
26pub const LN_10: f64 = std::f64::consts::LN_10;
28
29pub const LOG2_E: f64 = std::f64::consts::LOG2_E;
31
32pub const LOG10_E: f64 = std::f64::consts::LOG10_E;
34
35pub const FRAC_1_PI: f64 = std::f64::consts::FRAC_1_PI;
37
38pub const FRAC_2_PI: f64 = std::f64::consts::FRAC_2_PI;
40
41pub const FRAC_PI_2: f64 = std::f64::consts::FRAC_PI_2;
43
44pub const FRAC_PI_3: f64 = std::f64::consts::FRAC_PI_3;
46
47pub const FRAC_PI_4: f64 = std::f64::consts::FRAC_PI_4;
49
50pub const FRAC_PI_6: f64 = std::f64::consts::FRAC_PI_6;
52
53pub const FRAC_PI_8: f64 = std::f64::consts::FRAC_PI_8;
55
56#[cfg(test)]
57mod tests {
58 use super::{FRAC_PI_4, PHI, PI, TAU};
59
60 fn approx_eq(left: f64, right: f64, relative_tolerance: f64) {
61 let scale = left.abs().max(right.abs()).max(1.0);
62 let delta = (left - right).abs();
63
64 assert!(
65 delta <= relative_tolerance * scale,
66 "left={left:e} right={right:e} delta={delta:e} rel_tol={relative_tolerance:e}"
67 );
68 }
69
70 #[test]
71 fn tau_matches_twice_pi() {
72 assert_eq!(TAU, 2.0 * PI);
73 }
74
75 #[test]
76 fn phi_matches_its_defining_quadratic() {
77 approx_eq(PHI * PHI, PHI + 1.0, 1.0e-12);
78 }
79
80 #[test]
81 fn quarter_turns_reconstruct_pi() {
82 assert_eq!(FRAC_PI_4 * 4.0, PI);
83 }
84}