Add lint to detect floating point operations that can be computed more accurately at the cost of performance. `cbrt`, `ln_1p` and `exp_m1` library functions call their equivalent cmath implementations which is slower but more accurate so moving checks for these under this new lint.
42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
// run-rustfix
|
|
#![warn(clippy::suboptimal_flops, clippy::imprecise_flops)]
|
|
|
|
fn main() {
|
|
let x = 3f32;
|
|
let _ = x.exp2();
|
|
let _ = 3.1f32.exp2();
|
|
let _ = (-3.1f32).exp2();
|
|
let _ = x.exp();
|
|
let _ = 3.1f32.exp();
|
|
let _ = (-3.1f32).exp();
|
|
let _ = x.sqrt();
|
|
let _ = x.cbrt();
|
|
let _ = x.powi(2);
|
|
let _ = x.powi(-2);
|
|
let _ = x.powi(16_777_215);
|
|
let _ = x.powi(-16_777_215);
|
|
// Cases where the lint shouldn't be applied
|
|
let _ = x.powf(2.1);
|
|
let _ = x.powf(-2.1);
|
|
let _ = x.powf(16_777_216.0);
|
|
let _ = x.powf(-16_777_216.0);
|
|
|
|
let x = 3f64;
|
|
let _ = x.exp2();
|
|
let _ = 3.1f64.exp2();
|
|
let _ = (-3.1f64).exp2();
|
|
let _ = x.exp();
|
|
let _ = 3.1f64.exp();
|
|
let _ = (-3.1f64).exp();
|
|
let _ = x.sqrt();
|
|
let _ = x.cbrt();
|
|
let _ = x.powi(2);
|
|
let _ = x.powi(-2);
|
|
let _ = x.powi(-2_147_483_648);
|
|
let _ = x.powi(2_147_483_647);
|
|
// Cases where the lint shouldn't be applied
|
|
let _ = x.powf(2.1);
|
|
let _ = x.powf(-2.1);
|
|
let _ = x.powf(-2_147_483_649.0);
|
|
let _ = x.powf(2_147_483_648.0);
|
|
}
|