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