为什么C标准库没有isequal?

问题描述 投票:0回答:1

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);
}
c floating-point compare
1个回答
0
投票

C99 基本原理 V5.10 解释说,将这些宏添加到语言中的唯一目的是安全,并且不会引发浮点异常,就像它们相应的运算符可能会做的那样:

关系运算符 (

<
<=
>=
>
),但不包括相等运算符 (
==
) 和
!=
),当其中一个操作数是
NaN
时,可能会引发浮点异常(作为在不考虑 NaN 的情况下编写的程序的错误指示器)。需要保证比较不会引发任何浮点异常;这也是 IEC-60559 的要求 [原文如此]。这就是为什么
isgreater
isgreaterequal
isless
islessequal
islessgreater
isunordered
类函数宏被发明。

© www.soinside.com 2019 - 2024. All rights reserved.