2011-01-14 2 views
6

В конкретны:.C++ SQRT возвращает -1 # IND000000000000

Я делаю некоторые математические операции, а приложение сохраняет сбой из-за двойной, который широко используется случается, чтобы получить значение: -1. # IND000000000000, когда «некоторые «числа sqrt'ed ... Что это? Неопределенный? Бесконечный? Слишком большой, чтобы соответствовать? Не идеальный квадратный корень? Есть ли способ решить это? Спасибо заранее! EDIT: Как я могу проверить, имеет ли значение double значение? Я попытался: if (x == 0x-1. # IND000000000000) и другие варианты, но не работал. Можно ли проверить, имеет ли переменная это значение?

+1

«некоторые цифры» менее 0, возможно? Скажите мне, сэр, что такое sqrt -1 – EnabrenTane

+4

Квадратный корень из -1 - это i. –

+5

Очевидно, что EnabrenTane означал: «Что такое IEEE 754 sqrt -1.0?» –

ответ

10

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

+1

Существует не только одна такая ценность, но и много. –

+0

Да, многие определенные битовые макеты представляют собой одно и то же «значение NaN». – mbaitoff

0

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

1

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

2

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

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

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

0

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

Приветствия & НТН.,

5

NaNs (такие как «неопределенные» у вас есть и «бесконечность») могут быть обнаружены путем проверки x == x (это неверно для NaN и справедливо для любого конечного числа).

Смежные вопросы