如何检查值是否为1.#INF0000?

时间:2015-10-06 14:04:39

标签: c++ std infinity

简而言之,我有这段代码:

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 个答案:

答案 0 :(得分:3)

您可以使用isfinite来测试该值是否为有效且不连续(即无限)值:

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

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

我不了解您的平台,但对于Windows,此相关问题对我有所帮助:std::isfinite on MSVC