c++ - 如何在 C++ 中检查无限和不确定的值?

标签 c++ visual-c++ floating-point nan infinity

在我的程序中,当一个值被零除时,通常会出现无穷大。当我将零除以零时,我变得不确定。如何在 C++ 中检查无限和不确定的值?

在 C++ 中,无穷大由 1.#INF 表示。不确定由 -1.#IND 表示。问题是如何测试一个变量是无限的还是不确定的。检查无穷大相对简单:您可以在特定的 C++ 中找到无穷大定义。对于我的情况(VS2003),它是 std::numeric_limits::infinity()。您必须包含“限制”才能使用它。您可以将此无限值分配给变量,然后将其与某个值进行比较,以检查该值是否为无限。

Indeterminate 有点棘手,因为您无法将不确定的值与其他值进行比较。任何比较都返回 false。您可以使用此属性通过将其与自身进行比较来检测不确定的值。假设您有一个名为 aVal 的双变量。在正常情况下,aVal != aVal 返回 false。但如果值不确定,aIndVal != aIndVal 返回真。无限值不存在这种奇怪的情况,即 aInfVal != aInfVal 总是返回 false。

这里有两个函数可用于检查不确定值和无限值:

#include "limits.h"
#include "math.h"

bool isIndeterminate(const double pV)
{
    return (pV != pV);
} 

bool isInfinite(const double pV)
{
    return (fabs(pV) == std::numeric_limits::infinity())
}

这些检查有没有更好的方法,我有什么遗漏吗?

最佳答案

对于 Visual Studio,我会使用 _isnan_finite , 或者 _fpclass .

但是,如果您可以访问支持 C++11 的标准库和编译器,则可以使用 std::isnanstd::isinf .

关于c++ - 如何在 C++ 中检查无限和不确定的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410853/

相关文章:

visual-c++ - Visual Studio 2005 Standard 中的 OpenMP

c# - "System.Math.Cos"可以返回一个(float)吗?

c# - 检查浮点值是否等于 0 是否安全?

c - sin(pi) 没有返回精确的零?

c++ - 在C++中使用std::thread和std::condition_variable进行自定义后台任务的SIGABRT

c++ - 用于 STL 算法的 begin() 和 end()

C++专业代码分析工具

c++ - 将 MFC 应用程序从 VC6 迁移到 VS2010,现在不会为 CPropertyPage 子类调用 OnInitDialog()

c++ - 如何将 char[41] 转换为 char[40]

c++ - 何时对多参数构造函数使用显式说明符?