Как проверить, является ли значение 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 ответ
Ты можешь использовать isfinite
чтобы проверить, является ли значение допустимым и непостоянным (т.е. бесконечным) значением:
if (!std::isfinite(contribX1.x)){
должен работать для вас, я думаю, что проблема здесь в том, что существуют различные значения, используемые для представления положительных и отрицательных бесконечных значений наряду с NaN
В вашей ситуации, я думаю, что использование этого теста должно быть хорошо.
Я не знаю вашу платформу, но для Windows этот вопрос мне помог: std:: isfinite на MSVC