Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查值是否为1.#INF0000?_C++_Std_Infinity - Fatal编程技术网

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)){