我喜欢的项目使用-nostdlib
,所以我不能使用任何C库,但我可以包括他们的常数。
下面是我的代码。如果我在gcc或clang上使用gcc -Wfloat-equal -nostdlib -O2 -c a.c
编译,它会给予我下面的错误。我很好奇是否有一种方法可以检查而不触发这个警告。我怀疑我不能,除非我调用我不编译的代码
警告:将浮点数与“==”或“!=”进行比较是不安全的[-Wfloat-equal]
#include <math.h>
int IsInfinity(double d) {
return d != (double)INFINITY && (float)d == INFINITY;
}
2条答案
按热度按时间hkmswyz61#
您可以使用
return d < INFINITY && (float) d >= INFINITY;
。如果您要对称地分类负值,另一个选项是
return isfinite(d) && isinf((float) d);
。(这些是在math.h
中定义的宏。)mnowg1ta2#
代码看起来像是在尝试测试
d
是否在有限范围内,以及作为float
是否大于FLT_MAX
。是否有办法在不触发警告的情况下进行检查。
候补:
通过最大值检查:
有代码使用了下面的一些
double
,只是比FLT_MAX
函数大,与上面的不同。这种行为可能是OP首选的。