这需要像 Visual C# 语言之中的检查类似,对于无效的 Double 双精度浮点数都应认为是 NaN。
bool IsNaN(double d) noexcept {
if (isnan(d)) {
return true;
}
// NegativeInfinity
if (d == std::numeric_limits<double>::infinity()) {
return true;
}
if (d == std::numeric_limits<double>::epsilon()) {
return true;
}
if (d == std::numeric_limits<double>::quiet_NaN()) {
return true;
}
if (d == std::numeric_limits<double>::signaling_NaN()) {
return true;
}
return false;
}