¿Qué significa el error de coma flotante -1. # J?
-
20-08-2019 - |
Pregunta
Recientemente, a veces (raramente) cuando exportamos datos desde nuestra aplicación, el registro de exportación contiene valores flotantes que se parecen a "-1. # J". No he podido reproducirlo, así que no sé cómo se ve el flotador en binario o cómo Visual Studio lo muestra.
Intenté mirar el código fuente de printf, pero no encontré nada (aunque no estoy 100% seguro de haber buscado la versión correcta ...).
He intentado buscar en Google, pero parece que Google arroja cualquier #. Y no puedo encontrar ninguna lista de errores de flotación.
Solución
Puede ser infinito negativo o NaN (no un número). Debido al formato en el campo, printf no diferencia entre ellos.
Probé el siguiente código en Visual Studio 2008:
double a = 0.0;
printf("%.3g\n", 1.0 / a); // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a); // NaN
que da como resultado el siguiente resultado:
1.#J
-1.#J
-1.#J
al eliminar el especificador de formato .3 se obtiene:
1.#INF
-1.#INF
-1.#IND
así que está claro que 0/0 da NaN y -1/0 da infinito negativo (NaN, -inf y + inf son los únicos números de punto flotante '' erróneos '', si recuerdo correctamente)