当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C++中检查无限和不确定的值?》经验,为你挑选了2个好方法。

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

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

Indeterminate有点棘手,因为您无法将不确定值与其他值进行比较.任何比较都返回false.您可以使用此属性通过将其与自身进行比较来检测不确定值.假设您有一个名为aVal的双变量.在正常情况下,aVal!= aVal返回false.但是如果值是不确定的,则aIndVal!= aIndVal返回true.对于无限值,这种奇怪的情况不存在,即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())
}

有没有更好的方法进行这些检查,我错过了什么吗?



1> dalle..:

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

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



2> legends2k..:

虽然C++ 03不提供C99的isnan和isinf ,但C++ 11通过提供它们作为函数来标准化它们.如果您可以使用C++ 11而不是严格的C++ 03,那么通过避免宏,编译器内置函数和依赖于平台的函数,这些将是更清晰的选择.

除了和之外的所有值的C++ 11的std::isfinite返回true值; 所以应该一次检查无限和不确定的值.infnan!isfinite


如果你没有C++ 11,Boost.Math就有了实现.http://www.boost.org/doc/libs/1_54_0/libs/math/doc/html/math_toolkit/fpclass.html
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有