2011-01-14 18 views
6

En concreto:.C++ sqrt devuelve -1 # IND000000000000

Im haciendo algunas operaciones matemáticas, y la aplicación se bloquea constantemente debido a un doble que se utiliza ampliamente sucede para obtener el valor:. -1 # IND000000000000 cuando "algunos "los números están en cuadratura ... ¿Qué es esto? ¿Indefinido? ¿Infinito? Demasiado grande para caber? ¿No es una raíz cuadrada perfecta? ¿Hay alguna forma de resolver esto? ¡Gracias de antemano! EDITAR: ¿Cómo puedo verificar si un doble tiene este valor? Intenté: if (x == 0x-1. # IND000000000000) y otras variaciones, pero no funcionó. ¿Es posible verificar si una variable tiene este valor?

+1

son 'algunos números' menos que 0 quizás? Dígame señor, ¿cuál es el sqrt de -1 – EnabrenTane

+4

La raíz cuadrada de -1 es i. –

+5

Claramente EnabrenTane significaba, "¿Cuál es el IEEE 754 sqrt de -1.0?" –

Respuesta

10

En realidad, la cadena -1.#IND000000000000 no es un valor, devuelto por una función, pero es una de las representaciones comunes de una, Quiet Not-a-Number, el valor IEEE-754 QNaN especial que representa el número no válido, que no va a hacer que el excepción (también hay SNaN, Signalling NaN, que causaría la excepción de coma flotante, si está habilitada). La causa común de esto es llamar a una función con argumento fuera de su dominio.

+1

No hay solo uno de esos valores, sino muchos. –

+0

Sí, muchos diseños de bits determinados representan el mismo "valor de NaN". – mbaitoff

0

Sin utilizar un tipo complejo, sqrt de cualquier valor por debajo de 0 pretende causar una excepción.

1

Si el argumento es negativo, se produce un error de dominio, estableciendo la variable global errno en el valor EDOM.

2

El valor #IND000000000000 representa un valor numérico no válido. Esto a menudo se denomina valor QNaN (Quiet Not-A-Number) porque representa un tipo indeterminado pero no hace que los cálculos fallen.

Lo más probable es que los números escurridizos cuya raíz cuadrada está intentando determinar son números negativos, para los cuales ese valor no está definido. Consulte Wikipedia para obtener más información.

Resolverlo primero requerirá que determine donde se está produciendo el problema. Eso significa que o necesita recorrerlo con un depurador y observar los valores de las variables, o publicar su código para que podamos hacer lo mismo.

0

Es un NaN (No es un número). Significa que has llamado a sqrt con un argumento negativo.

Saludos & HTH.,

5

NaNs (como el "indeterminada" que tiene y "infinito") pueden ser detectados por el control de x == x (que es falso por Nan y válido para cualquier número finito).

Cuestiones relacionadas