【发布时间】:2021-01-14 17:28:14
【问题描述】:
虽然 Microsoft 博客 claim 否则在我的代码中使用 std::isnan 仍然会生成对 c++ 运行时的调用,而不是内联 ucomiss。
现在我用x!=x检查解决了这个问题(因为在这段代码中性能对我很重要),但这让我想知道......如果x!=x是一种检查NaNess的方法,那不是一个简单的方法实现std::isnan?
但据我所知 gcc/clang 使用内在函数(并且 msvc 正在尝试)。如果它可以作为正常功能有效地实现,他们为什么要打扰?
所以我有点困惑,因为 SO 上的 answers 之一声称这是 selfcomparison 可以返回 false 的唯一方法。
【问题讨论】:
-
比较时信号 NaN 不会提高吗?
-
我认为它是作为内在实现的:godbolt.org/z/7M6cK5
-
@AlexGuteniev 在某些情况下有效,在某些情况下无效...我无法将我的真实示例简化为在 Godbolt 上无效的内容...
标签: c++ optimization visual-c++ stl