On Sun, 10 Nov 2024, 11:13 Alexander Monakov, <amona...@ispras.ru> wrote:
> > On Sun, 10 Nov 2024, Jonathan Wakely via Gcc wrote: > > > But 1 - (10 * 0.1) won't, and so the warning is pointing out that any > exact > > equality comparisons can be affected by this kind of problem. If you > don't > > like the warning, don't enable it. > > I think OP's questions are in good faith and your last statement is > unnecesarily > passive-aggressive. If we respond to queries like that, it just reflects > badly > on us, because the implication is that we are not interested in criticisms > for > diagnostics or clarifying their behavior. > That's fair, I apologise for my tone. My point is that the warning is not enabled by -Wall and is behaving as documented in the manual, so if the warning isn't useful to you, there's no need to enable it. > Our warning is extremely simplistic, it warns even for 'x != x', and even > the > wording of the warning is bad: it says '... is unsafe' but there are no > safety > concerns here. > Agreed on both points. > I can see situations where warning for floating-point comparison makes > sense > even by default: > > float x; > ... > if (x != 0.1) // not 0.1f > > since 0.1f != 0.1 this could yield something like > > warning: comparison is always true > > but warning on every comparison is indefensible. > > > Does clang only have a special case for 0.0, or for any literal value? > > Their behavior is not documented, and it is not completely straightforward > to me > looking at the source, but they do not issue the warning if the value is > exactly > representable in the format (but they warn if it was implicitly cast from > an > integer, like in 'x == 0', which is probably a bug). They also suppress the > warning in some other cases, e.g. for 'x == x'. > > Alexander >