Si desea realizar todas NANS, se desborda, y zerodivides señalización durante la depuración, es posible.
Para gcc:
#include <fenv.h>
#ifndef NDEBUG
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
#endif
Para Visual Studio (no probado):
#include <float.h>
#ifndef NDEBUG
_clearfp();
_controlfp(_controlfp(0, 0) & ~(_EM_INVALID | _EM_ZERODIVIDE | _EM_OVERFLOW),
_MCW_EM);
#endif
Referencias: Microsoft, gcc.
Estas funciones permiten atrapar o bien NaNs, producida por operaciones de punto (desbordamientos, zerodivides, operaciones no válidos) flotante, o cambio, los SNAN utiliza como entrada para alguna operación de punto flotante. No permiten atrapar qNaNs, utilizados como entrada para la operación de punto flotante. Para tales qNaNs, la única forma de encontrarlos es verificar cada valor individualmente (ver la respuesta de Luchian Grigore).
lo tanto, si el componente, que inserta un qNaN está en el mismo programa, eran que se desea capturar, o si este componente está en programa separado, pero tiene sus códigos fuente, simplemente permitir excepciones FP con feenableexcept()
/_controlfp()
. De lo contrario, verifique cada valor en la secuencia de datos entrante con isnan()
(C++ 11) o con x != x
.
No es exactamente un duplicado, pero hay muchos detalles http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c – user7116
Otra pregunta con buenos detalles http : //stackoverflow.com/questions/2247447/usefulness-of-signaling-nan – user7116
Relacionado: [¿Puedo hacer que gcc me diga cuándo un cálculo da como resultado NaN o inf en tiempo de ejecución?] (http://stackoverflow.com/questions/2941611/can-i-make-gcc-tell-me-when-a-calculate-results-in-nan-or-inf-at-runtime/20973509) – legends2k