mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 15:11:30 +00:00
ff0d44e45a
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.
150 lines
5.5 KiB
Text
150 lines
5.5 KiB
Text
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:6:13
|
|
|
|
|
LL | let _ = 2f32.powf(x);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.exp2()`
|
|
|
|
|
= note: `-D clippy::suboptimal-flops` implied by `-D warnings`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:7:13
|
|
|
|
|
LL | let _ = 2f32.powf(3.1);
|
|
| ^^^^^^^^^^^^^^ help: consider using: `3.1f32.exp2()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:8:13
|
|
|
|
|
LL | let _ = 2f32.powf(-3.1);
|
|
| ^^^^^^^^^^^^^^^ help: consider using: `(-3.1f32).exp2()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:9:13
|
|
|
|
|
LL | let _ = std::f32::consts::E.powf(x);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.exp()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:10:13
|
|
|
|
|
LL | let _ = std::f32::consts::E.powf(3.1);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `3.1f32.exp()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:11:13
|
|
|
|
|
LL | let _ = std::f32::consts::E.powf(-3.1);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(-3.1f32).exp()`
|
|
|
|
error: square-root of a number can be computed more efficiently and accurately
|
|
--> $DIR/floating_point_powf.rs:12:13
|
|
|
|
|
LL | let _ = x.powf(1.0 / 2.0);
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `x.sqrt()`
|
|
|
|
error: cube-root of a number can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:13:13
|
|
|
|
|
LL | let _ = x.powf(1.0 / 3.0);
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `x.cbrt()`
|
|
|
|
|
= note: `-D clippy::imprecise-flops` implied by `-D warnings`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:14:13
|
|
|
|
|
LL | let _ = x.powf(2.0);
|
|
| ^^^^^^^^^^^ help: consider using: `x.powi(2)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:15:13
|
|
|
|
|
LL | let _ = x.powf(-2.0);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.powi(-2)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:16:13
|
|
|
|
|
LL | let _ = x.powf(16_777_215.0);
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(16_777_215)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:17:13
|
|
|
|
|
LL | let _ = x.powf(-16_777_215.0);
|
|
| ^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(-16_777_215)`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:25:13
|
|
|
|
|
LL | let _ = 2f64.powf(x);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.exp2()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:26:13
|
|
|
|
|
LL | let _ = 2f64.powf(3.1);
|
|
| ^^^^^^^^^^^^^^ help: consider using: `3.1f64.exp2()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:27:13
|
|
|
|
|
LL | let _ = 2f64.powf(-3.1);
|
|
| ^^^^^^^^^^^^^^^ help: consider using: `(-3.1f64).exp2()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:28:13
|
|
|
|
|
LL | let _ = std::f64::consts::E.powf(x);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.exp()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:29:13
|
|
|
|
|
LL | let _ = std::f64::consts::E.powf(3.1);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `3.1f64.exp()`
|
|
|
|
error: exponent for bases 2 and e can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:30:13
|
|
|
|
|
LL | let _ = std::f64::consts::E.powf(-3.1);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(-3.1f64).exp()`
|
|
|
|
error: square-root of a number can be computed more efficiently and accurately
|
|
--> $DIR/floating_point_powf.rs:31:13
|
|
|
|
|
LL | let _ = x.powf(1.0 / 2.0);
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `x.sqrt()`
|
|
|
|
error: cube-root of a number can be computed more accurately
|
|
--> $DIR/floating_point_powf.rs:32:13
|
|
|
|
|
LL | let _ = x.powf(1.0 / 3.0);
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `x.cbrt()`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:33:13
|
|
|
|
|
LL | let _ = x.powf(2.0);
|
|
| ^^^^^^^^^^^ help: consider using: `x.powi(2)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:34:13
|
|
|
|
|
LL | let _ = x.powf(-2.0);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.powi(-2)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:35:13
|
|
|
|
|
LL | let _ = x.powf(-2_147_483_648.0);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(-2_147_483_648)`
|
|
|
|
error: exponentiation with integer powers can be computed more efficiently
|
|
--> $DIR/floating_point_powf.rs:36:13
|
|
|
|
|
LL | let _ = x.powf(2_147_483_647.0);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(2_147_483_647)`
|
|
|
|
error: aborting due to 24 previous errors
|
|
|