|
80 | 80 | } |
81 | 81 | } |
82 | 82 |
|
| 83 | +pub trait RealConsts<T: Copy> { |
| 84 | + #[cfg(has_assoc_const)] |
| 85 | + const LN_2: T; |
| 86 | + #[cfg(has_assoc_const)] |
| 87 | + const FRAC_LN_2: T; |
| 88 | + #[cfg(has_assoc_const)] |
| 89 | + const FRAC_LN_10: T; |
| 90 | + |
| 91 | + fn ln_2() -> T; |
| 92 | + fn frac_ln_2() -> T; |
| 93 | + fn frac_ln_10() -> T; |
| 94 | +} |
| 95 | + |
| 96 | +impl RealConsts<f32> for f32 { |
| 97 | + #[cfg(has_assoc_const)] |
| 98 | + const LN_2: f32 = 0.693147180559945309417232121458176568_f32; |
| 99 | + #[cfg(has_assoc_const)] |
| 100 | + const FRAC_LN_2: f32 = 1.442695040888963407359924681001892137_f32; |
| 101 | + #[cfg(has_assoc_const)] |
| 102 | + const FRAC_LN_10: f32 = 0.434294481903251827651128918916605082_f32; |
| 103 | + |
| 104 | + fn ln_2() -> f32 { |
| 105 | + 0.693147180559945309417232121458176568_f32 |
| 106 | + } |
| 107 | + fn frac_ln_2() -> f32 { |
| 108 | + 1.442695040888963407359924681001892137_f32 |
| 109 | + } |
| 110 | + fn frac_ln_10() -> f32 { |
| 111 | + 0.434294481903251827651128918916605082_f32 |
| 112 | + } |
| 113 | +} |
| 114 | + |
| 115 | +impl RealConsts<f64> for f64 { |
| 116 | + #[cfg(has_assoc_const)] |
| 117 | + const LN_2: f64 = 0.693147180559945309417232121458176568_f64; |
| 118 | + #[cfg(has_assoc_const)] |
| 119 | + const FRAC_LN_2: f64 = 1.442695040888963407359924681001892137_f64; |
| 120 | + #[cfg(has_assoc_const)] |
| 121 | + const FRAC_LN_10: f64 = 0.434294481903251827651128918916605082_f64; |
| 122 | + |
| 123 | + fn ln_2() -> f64 { |
| 124 | + 0.693147180559945309417232121458176568_f64 |
| 125 | + } |
| 126 | + fn frac_ln_2() -> f64 { |
| 127 | + 1.442695040888963407359924681001892137_f64 |
| 128 | + } |
| 129 | + fn frac_ln_10() -> f64 { |
| 130 | + 0.434294481903251827651128918916605082_f64 |
| 131 | + } |
| 132 | +} |
| 133 | + |
83 | 134 | #[cfg(test)] |
84 | 135 | mod test { |
85 | 136 | use super::*; |
|
0 commit comments