On Mon, 11 Nov 2024 21:14:43 +0000 (UTC)
Joseph Myers <josmy...@redhat.com> wrote:

> I don't think this has anything to do with whether one operand of the 
> comparison is a constant.  It's still the case when comparing with 0.0 
> that it's OK if your algorithm is designed such that the other operand is 
> exact, and questionable if it is an approximation.

Division by 0.0 is somewhat undefined, so should be avoided. One way of
checking it is with the equality operator. So whether one of the
operands is exact or approximation is irrelevant, since we may only be
interested in preventing division by 0.0.

So having -Wfloat-equal is desirable for catching other cases, but the
assumption of "if (divisor == 0.0) else ..." always being unsafe is a
bit pedantic. In this context, the if statement reads: "I don't care
what approximation divisor contains, as long as it is not exactly 0.0
which would cause division to produce Inf or NaN.

Maybe there are other tricks to perform this check without the equality
operator, but it seems to be the most efficient.

Reply via email to