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.
175 lines
6.0 KiB
Plaintext
175 lines
6.0 KiB
Plaintext
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
|
|
|