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

How to check if a value is 1.#INF0000?

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

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

根据我的调试,有时 return 由 Sample 方法编辑的无限值,我必须解决它。但在这样做之前,我需要工具来正确调试。所以我一直在四处寻找,我发现这个 std::isinf() 应该 return 我是个傻瓜。不幸的是,我似乎从未进入 IF 条件,即使在我能够检查 contribX1.x 并且它实际上是 1.#INF0000 之后也是如此。我做错了什么?

编辑:编译器是cl.exe..我正在使用Visual Studio 2013

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

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

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

我不知道你的平台,但是 Windows 这个相关问题对我有帮助:std::isfinite on MSVC