2015-10-06 122 views
2

我有,总之,这段代码:如何检查值是否为1.#INF0000?

vec3 contribX1 = Sample(O, D, 0); 
if (std::isinf(contribX1.x)){ 
    ..do something.. 
} 

根据我调试我有时一个由Sample方法返回一个无限的价值,我必须解决这个问题。但在做之前,我需要这些工具来正确调试。所以我一直在四处寻找,我发现这个std::isinf(),应该返回一个布尔。不幸的是,我似乎从来没有输入IF的条件,即使我能够检查contribX1.x并且它实际上是1.#INF0000。我究竟做错了什么?

编辑:编译器cl.exe时..我使用Visual Studio 2013

+1

是['nan'](http://en.cppreference.com/w/cpp/numeric/math/isnan)你在追求什么? – EdChum

+0

@EdChum它也行不通.. – Tarta

+2

嗯不管它是['!isfinite'](http://en.cppreference.com/w/cpp/numeric/math/isfinite)? – EdChum

回答

3

您可以使用isfinite测试值是否是一个有效的和非连续的(即inifinite)值:

if (!std::isfinite(contribX1.x)){ 

应该为你工作,我认为这里的问题是有各种值用于表示正面和负面的无限值以及NaN,在你的情况下我认为使用这个测试应该没问题。

我不知道你的平台,但是对于Windows此相关的问题是什么帮助我:std::isfinite on MSVC

+0

它的工作原理!非常感谢你! – Tarta

+1

这并不回答为什么'std :: isinf'不起作用。你能解释一下吗?谢谢! –

+0

它确实应该 - 我称它为MSVS/Dinkumware错误。 –