On Sun, 10 Nov 2024 09:45:41 +0000
Jonathan Wakely <[email protected]> wrote:
> Does clang only have a special case for 0.0, or for any literal value?
>
It looks like clang can detect which floating point literals can be
represented exactly and does not generate any warnings for those.
$ cat test.c
#include <stdio.h>
int main(void)
{
double value = 0.0;
if (value == 0.0)
{
printf("value == 0.0\n");
}
if (value == 1.0)
{
printf("value == 1.0\n");
}
if (value == 1.1)
{
printf("value == 1.1\n");
}
}
$ clang -Wfloat-equal test.c
test.c:17:12: warning: comparing floating point with == or != is unsafe
[-Wfloat-equal]
if (value == 1.1)
~~~~~ ^ ~~~
1 warning generated.
As suggested by Andrew, I used GCC pragmas to silence the warnings for
specific lines of code. So I get the benefit of -Wfloat-equal checks
without the spurious cases.
Thanks.