mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-12-30 06:53:27 +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.
174 lines
6 KiB
Text
174 lines
6 KiB
Text
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:10:13
|
|
|
|
|
LL | let _ = x.log(2f32);
|
|
| ^^^^^^^^^^^ help: consider using: `x.log2()`
|
|
|
|
|
= note: `-D clippy::suboptimal-flops` implied by `-D warnings`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:11:13
|
|
|
|
|
LL | let _ = x.log(10f32);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.log10()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:12:13
|
|
|
|
|
LL | let _ = x.log(std::f32::consts::E);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.ln()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:13:13
|
|
|
|
|
LL | let _ = x.log(TWO);
|
|
| ^^^^^^^^^^ help: consider using: `x.log2()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:14:13
|
|
|
|
|
LL | let _ = x.log(E);
|
|
| ^^^^^^^^ help: consider using: `x.ln()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:17:13
|
|
|
|
|
LL | let _ = x.log(2f64);
|
|
| ^^^^^^^^^^^ help: consider using: `x.log2()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:18:13
|
|
|
|
|
LL | let _ = x.log(10f64);
|
|
| ^^^^^^^^^^^^ help: consider using: `x.log10()`
|
|
|
|
error: logarithm for bases 2, 10 and e can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:19:13
|
|
|
|
|
LL | let _ = x.log(std::f64::consts::E);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.ln()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:24:13
|
|
|
|
|
LL | let _ = (1f32 + 2.).ln();
|
|
| ^^^^^^^^^^^^^^^^ help: consider using: `2.0f32.ln_1p()`
|
|
|
|
|
= note: `-D clippy::imprecise-flops` implied by `-D warnings`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:25:13
|
|
|
|
|
LL | let _ = (1f32 + 2.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `2.0f32.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:26:13
|
|
|
|
|
LL | let _ = (1.0 + x).ln();
|
|
| ^^^^^^^^^^^^^^ help: consider using: `x.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:27:13
|
|
|
|
|
LL | let _ = (1.0 + x / 2.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x / 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:28:13
|
|
|
|
|
LL | let _ = (1.0 + x.powi(2)).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(2).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:29:13
|
|
|
|
|
LL | let _ = (1.0 + x.powi(2) / 2.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x.powi(2) / 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:30:13
|
|
|
|
|
LL | let _ = (1.0 + (std::f32::consts::E - 1.0)).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `((std::f32::consts::E - 1.0)).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:31:13
|
|
|
|
|
LL | let _ = (x + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^ help: consider using: `x.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:32:13
|
|
|
|
|
LL | let _ = (x.powi(2) + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(2).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:33:13
|
|
|
|
|
LL | let _ = (x + 2.0 + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x + 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:34:13
|
|
|
|
|
LL | let _ = (x / 2.0 + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x / 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:42:13
|
|
|
|
|
LL | let _ = (1f64 + 2.).ln();
|
|
| ^^^^^^^^^^^^^^^^ help: consider using: `2.0f64.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:43:13
|
|
|
|
|
LL | let _ = (1f64 + 2.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^ help: consider using: `2.0f64.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:44:13
|
|
|
|
|
LL | let _ = (1.0 + x).ln();
|
|
| ^^^^^^^^^^^^^^ help: consider using: `x.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:45:13
|
|
|
|
|
LL | let _ = (1.0 + x / 2.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x / 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:46:13
|
|
|
|
|
LL | let _ = (1.0 + x.powi(2)).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(2).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:47:13
|
|
|
|
|
LL | let _ = (x + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^ help: consider using: `x.ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:48:13
|
|
|
|
|
LL | let _ = (x.powi(2) + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `x.powi(2).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:49:13
|
|
|
|
|
LL | let _ = (x + 2.0 + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x + 2.0).ln_1p()`
|
|
|
|
error: ln(1 + x) can be computed more accurately
|
|
--> $DIR/floating_point_log.rs:50:13
|
|
|
|
|
LL | let _ = (x / 2.0 + 1.0).ln();
|
|
| ^^^^^^^^^^^^^^^^^^^^ help: consider using: `(x / 2.0).ln_1p()`
|
|
|
|
error: aborting due to 28 previous errors
|
|
|