我有一个应用程序,其中代码区域生成NAN值.我必须比较相等的值,并基于执行其余代码.如何比较C++中的两个NAN值是否相等?
Jos*_*eld 22
假设IEEE 754浮点表示,您无法比较两个NaN值的相等性.NaN不等于任何值,包括它自身.但是,您可以std::isnan通过<cmath>标题测试它们是否都是NaN :
if (std::isnan(x) && std::isnan(y)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于C++ 11.在C++ 11之前,Boost Math Toolkit提供了一些浮点分类器.或者,您可以通过将值与自身进行比较来检查值是否为NaN:
if (x != x && y != y) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
因为NaN是唯一不等于自身的值.在过去,某些编译器搞砸了,但我现在还不确定它的状态(它似乎与GCC一起正常工作).
MSVC提供_isnan功能.
最后的选择是假设您知道表示是IEEE 754并进行一些检查.显然这不是最便携的选择.
| 归档时间: |
|
| 查看次数: |
6826 次 |
| 最近记录: |