C++ 如何检查值是否为1.#INF0000?
简而言之,我有以下代码:C++ 如何检查值是否为1.#INF0000?,c++,std,infinity,C++,Std,Infinity,简而言之,我有以下代码: vec3 contribX1 = Sample(O, D, 0); if (std::isinf(contribX1.x)){ ..do something.. } 根据我的调试,我有时有一个无限值,它由Sample方法返回,我必须解决它。但是在做之前,我需要工具来正确地调试。所以我四处寻找,发现这个std::isinf()应该会给我一个bool。不幸的是,我似乎从未输入过IF条件,即使在我能够检查contribX1.x之后,它实际上是1.\INF0000。我
vec3 contribX1 = Sample(O, D, 0);
if (std::isinf(contribX1.x)){
..do something..
}
根据我的调试,我有时有一个无限值,它由Sample
方法返回,我必须解决它。但是在做之前,我需要工具来正确地调试。所以我四处寻找,发现这个std::isinf()
应该会给我一个bool。不幸的是,我似乎从未输入过IF
条件,即使在我能够检查contribX1.x
之后,它实际上是1.\INF0000
。我做错了什么
编辑:编译器为cl.exe。。我正在使用Visual Studio 2013您可以使用来测试该值是否为有效的非连续(即INIFIENT)值:
应该对您有用,我认为这里的问题是,有各种值与NaN
一起用于表示正无穷值和负无穷值,在您的情况下,我认为使用此测试应该可以
我不知道你的平台,但是对于Windows,这个相关的问题帮助了我:你想要的是什么?@EdChum它也不起作用..嗯,它是否起作用呢?我以前遇到过类似的问题,在我的例子中,它是通过各种方式来表示正负无限值和
NaN
,使用isfinite
测试它是否是一个有限的值,我认为这是你想要做的,在你的问题中添加关键的细节!这并不能解释为什么std::isinf
不起作用。你能解释一下吗?谢谢它真的应该——我把它称为MSVS/Dinkumware bug。@DanielDarabos不幸的是,我无法解释为什么除了它是一个bug之外,我在使用VS2008的时候不得不使用MS宏\u finite
和\u isnan
if (!std::isfinite(contribX1.x)){