NoS*_*tAl 4 c++ optimization stl visual-c++
尽管 Microsoft 博客声称std::isnan在我的代码中使用其他方式仍然会生成对 c++ 运行时而不是 inlined 的调用ucomiss。现在我用x!=xcheck解决了这个问题(因为在这段代码中性能对我很重要),但这让我想知道......如果x!=x是一种检查 NaNess 的方法,这不是一种简单的实现方法std::isnan吗?
但据我所知,gcc/clang 使用内在函数(并且 msvc 正在尝试)。如果它可以作为正常功能有效实现,他们为什么要打扰?
所以我有点困惑,因为SO 上的一个答案声称这是自我比较可以返回错误的唯一方法。
C++ 标准委员会(终于?)在这个问题上听取了数字学家的意见。在 C++11 之前,习语
x != x
Run Code Online (Sandbox Code Playgroud)
确实用于检查 NaN-ness。没有其他类型的浮点数值适用于该习语。但它从来没有坐得特别好。首先,一些 NaN 可以引发异常。它也容易受到错误重构的影响。您还可以假设一些浮点标准,例如常见的 IEEE754。
从 C++11 开始,使用std::isnan是更受欢迎的。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |