【发布时间】:2016-09-15 06:39:30
【问题描述】:
C 中的默认浮点比较(例如,3.0 false。但是,编译器和处理器也有无序比较。例如,在 LLVM IR 中,fcmp instruction 都有有序和无序的变体。 C99 有一些函数可以测试 NaN。但是,除此之外我没有找到其他无序比较操作。是否有任何提供无序浮点比较的 GNU 扩展(或其他标准库函数)?
到目前为止,我只能通过检查相反的条件来实现它们。例如,为了实现无序的a >= b 比较,我改为编写有序的!(a < b),LLVM 最终将其简化为无序的比较fcmp uge double %1, %2。
【问题讨论】:
-
hm?
-
您对这里的术语有些混淆。这不是比较的“有序”或“无序”版本的问题。
fcmpuge之类的关键字表示“无序 or 大于或等于”,而不是“无序”大于或等于比较。将其称为 >= 的“无序”版本就像将 >= 称为 > 的“相等”版本。 -
C99 也有
isunordered(x, y)
标签: c floating-point llvm llvm-ir comparison-operators