在GCC内置描述中,它说:
GCC提供了内置版本的ISO C99浮点比较宏,避免引发无序操作数的异常。它们具有与标准宏相同的名称( isgreater、isgreaterequal、isless、islessequal、isless和isunordered),并以_builtin作为前缀。我们希望库实现者能够简单地将每个标准宏定义为其内建的等效宏。GCC也以同样的方式提供了fpclassify,isfinite,isinf_sign,isnormal和signbit内置的_builtin前缀。isinf和isnan内置函数同时出现在_builtin前缀和不带前缀的情况下。
所以,我不能很好地分析这个。什么时候浮点比较应该产生例外?他们执行C标准任务吗?命令他们不这么做?没有什么命令吗?__builtin_isnan()的行为是否与isnan()不同?
发布于 2021-06-28 13:26:22
除了这里,GCC的文档是指IEEE 754浮点异常。如果你做这样的事
a < b其中一个操作数是NaN,将引发FP异常(无效)。这意味着FPU中的一点将保持设置,直到程序员显式清除为止。通过使用isgreater/isless/etc,程序员可以避免触发FP异常。
https://stackoverflow.com/questions/68163793
复制相似问题