C 标准库有:isgreater、isgreaterequal、isless、islessequal、islessgreater、isunordered。 为什么C标准库没有equal?应该很容易实现这样:
bool isequal(float x, float y)
{
return !isunordered(x, y) && isgreaterequal(x, y) && !isgreater(x, y);
}
C99 基本原理 V5.10 解释说,将这些宏添加到语言中的唯一目的是安全,并且不会引发浮点异常,就像它们相应的运算符可能会做的那样:
关系运算符 (
、<
、<=
、>=
),但不包括相等运算符 (>
) 和==
),当其中一个操作数是!=
时,可能会引发浮点异常(作为在不考虑 NaN 的情况下编写的程序的错误指示器)。需要保证比较不会引发任何浮点异常;这也是 IEC-60559 的要求 [原文如此]。这就是为什么NaN
、isgreater
、isgreaterequal
、isless
、islessequal
和islessgreater
类函数宏被发明。isunordered