a067cd24ac
Using `f32::EPSILON` or `f64::EPSILON` as the floating-point equality comparison error margin is incorrect, yet `float_cmp` has until now recommended this be done. This change fixes the given guidance (both in docs and compiler hints) to not reference these unsuitable constants. Instead, the guidance now clarifies that the scenarios in which an absolute error margin is usable, provides a reference implementation of using a user-defined absolute error margin (as an absolute error margin can only be used-defined and may be different for different comparisons) and references the floating point guide for a reference implementation of relative error based equaltiy comparison for when absolute error margin cannot be used. changelog: Fix guidance of [`float_cmp`] and [`float_cmp_const`] to not incorrectly recommend `f64::EPSILON` as the error margin. Fixes #6816
42 lines
1.5 KiB
Plaintext
42 lines
1.5 KiB
Plaintext
error: strict comparison of `f32` or `f64`
|
|
--> tests/ui/float_cmp.rs:72:5
|
|
|
|
|
LL | ONE as f64 != 2.0;
|
|
| ^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(ONE as f64 - 2.0).abs() > error_margin`
|
|
|
|
|
= note: `-D clippy::float-cmp` implied by `-D warnings`
|
|
= help: to override `-D warnings` add `#[allow(clippy::float_cmp)]`
|
|
|
|
error: strict comparison of `f32` or `f64`
|
|
--> tests/ui/float_cmp.rs:78:5
|
|
|
|
|
LL | x == 1.0;
|
|
| ^^^^^^^^ help: consider comparing them within some margin of error: `(x - 1.0).abs() < error_margin`
|
|
|
|
error: strict comparison of `f32` or `f64`
|
|
--> tests/ui/float_cmp.rs:82:5
|
|
|
|
|
LL | twice(x) != twice(ONE as f64);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(twice(x) - twice(ONE as f64)).abs() > error_margin`
|
|
|
|
error: strict comparison of `f32` or `f64`
|
|
--> tests/ui/float_cmp.rs:103:5
|
|
|
|
|
LL | NON_ZERO_ARRAY[i] == NON_ZERO_ARRAY[j];
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(NON_ZERO_ARRAY[i] - NON_ZERO_ARRAY[j]).abs() < error_margin`
|
|
|
|
error: strict comparison of `f32` or `f64` arrays
|
|
--> tests/ui/float_cmp.rs:109:5
|
|
|
|
|
LL | a1 == a2;
|
|
| ^^^^^^^^
|
|
|
|
error: strict comparison of `f32` or `f64`
|
|
--> tests/ui/float_cmp.rs:111:5
|
|
|
|
|
LL | a1[0] == a2[0];
|
|
| ^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(a1[0] - a2[0]).abs() < error_margin`
|
|
|
|
error: aborting due to 6 previous errors
|
|
|