C ++ sqrt возвращает -1. # IND000000000000 - PullRequest
6 голосов
/ 14 января 2011

В частности:

Я выполняю некоторые математические операции, и приложение продолжает аварийно завершать работу, потому что широко используемое двойное число получает значение: -1.... Что это?Неопределенный?Бесконечный?Слишком большой, чтобы соответствовать?Не идеальный квадратный корень?Есть ли способ решить это?Заранее спасибо!РЕДАКТИРОВАТЬ: Как я могу проверить, если двойник имеет это значение?Я пробовал: if (x == 0x-1. # IND000000000000) и другие варианты, но не работал.Можно ли проверить, имеет ли переменная это значение?

Ответы [ 6 ]

10 голосов
/ 14 января 2011

На самом деле, строка -1.#IND000000000000 не является значением, возвращаемым функцией, но является одним из общих представлений QNaN, Quiet Not-a-Number, специального значения IEEE-754, представляющего недопустимое число, которое не вызовет исключение (есть также SNaN, Signalling NaN, которые вызовут исключение с плавающей запятой, если оно включено). Распространенной причиной этого является вызов функции с аргументом вне ее домена.

5 голосов
/ 16 января 2011

NaN (например, "неопределенный", который у вас есть и "бесконечность") можно обнаружить, установив x == x (для NaN это значение false, для любого конечного числа - true).

2 голосов
/ 14 января 2011

Значение #IND000000000000 представляет недопустимое числовое значение.Это часто называют значением QNaN (Quiet Not-A-Number), поскольку оно представляет неопределенный тип, но не приводит к сбою вычислений.

Скорее всего, это неуловимые числа, квадратный корень которых вы пытаетесь определить отрицательные числа, для которых это значение не определено.См. Википедия для получения дополнительной информации.

Для ее решения сначала потребуется определить , где возникает проблема.Это означает, что вам нужно либо пройтись по нему с помощью отладчика и посмотреть значения переменных, либо опубликовать свой код, чтобы мы могли сделать то же самое.

1 голос
/ 14 января 2011

Если аргумент отрицательный, возникает ошибка домена, в которой для глобальной переменной errno установлено значение EDOM.

0 голосов
/ 14 января 2011

Это NaN (не число). Это означает, что вы вызвали sqrt с отрицательным аргументом.

Приветствия и hth.,

0 голосов
/ 14 января 2011

Без использования сложного типа sqrt с любым значением ниже 0 может вызвать исключение.

...