summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/float_cmp_const.txt
blob: 9208feaacd81011198713479d3f80d72b33a2c41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### What it does
Checks for (in-)equality comparisons on floating-point
value and constant, except in functions called `*eq*` (which probably
implement equality for a type involving floats).

### Why is this bad?
Floating point calculations are usually imprecise, so
asking if two values are *exactly* equal is asking for trouble. For a good
guide on what to do, see [the floating point
guide](http://www.floating-point-gui.de/errors/comparison).

### Example
```
let x: f64 = 1.0;
const ONE: f64 = 1.00;

if x == ONE { } // where both are floats
```

Use instead:
```
let error_margin = f64::EPSILON; // Use an epsilon for comparison
// Or, if Rust <= 1.42, use `std::f64::EPSILON` constant instead.
// let error_margin = std::f64::EPSILON;
if (x - ONE).abs() < error_margin { }
```