C ++, как проверить -1. # IND в массиве - PullRequest
3 голосов
/ 02 ноября 2011

Я получил массив с плавающей точкой, в котором хранится некоторое значение, вычисленное некоторыми функциями.Тем не менее, когда я получаю значение из массива, некоторые значения равны -1. # IND, что является ошибкой с плавающей точкой или что-то вроде того, я думаю.

Так вот мой маленький вопрос, как мне использоватьоператор if, чтобы проверить, содержит ли массив float значение -1. ​​# IND, поэтому я могу что-то с ним сделать ??

Спасибо

Ответы [ 4 ]

9 голосов
/ 03 ноября 2011

if (a! = A); Это верно только в том случае, если a является NaN. О, а также в cmath есть функция isnan (). Подробнее об isnan () ...

2 голосов
/ 02 ноября 2011

-1. # IND - это код NaN (не число) в том смысле, что значение не определено / непредставимо. Таким образом, ваш числовой алгоритм может иметь проблемы, если он выдает значения NaN. Убедитесь, что исключения с плавающей запятой включены, поскольку NaN могут возникать из-за ошибок деления на 0, и убедитесь, что вы запускаете их в режиме отладки, прокрутите и посмотрите, когда, как и почему это происходит.

Не уверен, что вы можете сделать прямое сравнение на равенство, так как представление может измениться,

проверьте IEEE 754, а также убедитесь, что ваш компилятор использует плавающие IEEE 754.

Надеюсь, это поможет.

1 голос
/ 03 ноября 2011

-1.#IND выглядит как «неопределенное» значение, которое появится, если вы сделаете что-то вроде попытки вычислить 0 / 0.

Другие значения, с которыми вы можете столкнуться, - это положительная и отрицательная бесконечность.

Чтобы отфильтровать эти специальные значения, используйте такие функции, как _finite, finitef или _fpclass.

0 голосов
/ 30 января 2015

Хороший способ проверить, является ли значение с плавающей запятой действительным числом, это использовать: std :: isnormal () Если число не нормальное, вы можете использовать std :: fpclassify (), чтобы выяснить, какая это ошибка.

...