c++ visual-studio visual-studio-2010 floating-point floating-point-exceptions

Visual Studio C++ 2008/2010-break on float NaN



visual-studio visual-studio-2010 (4)

¿Hay alguna forma de configurar Visual Studio (solo actualizado de 2008 a 2010) para interrumpir, como si fallara una afirmación, cada vez que un número de punto flotante se convierte en NaN, QNAN, INF, etc.?

Hasta ahora solo he estado usando el truco assert (x == x), pero preferiría algo implícito, de modo que no tenga que agregar aserciones en todas partes.

Muy sorprendido no puedo encontrar una respuesta a esto a través de Google. Algunas cosas sobre ''excepciones de punto flotante'', pero no estoy seguro de si son lo mismo, y he intentado habilitarlas en Visual Studio, pero el programa no se rompe hasta que algo catastrófico sucede debido a la NaN más adelante en ejecución


1) Vaya a la opción de proyecto y habilite / fp: strict (C / C ++ -> Generación de código -> Modelo de pinta flotante).

2) Use _controlfp para establecer la palabra de control de punto flotante (vea el código a continuación).

#include <float.h> unsigned int fp_control_state = _controlfp(_EM_INEXACT, _MCW_EM); #include <math.h> int main () { sqrtf(-1.0); // floating point exception double x = 0.0; double y = 1.0/x; // floating point exception return 0; }


Al menos en x86, cuando se genera un NaN, etc., se establece uno de los bits de registro de estado de FPU. Hay una forma de configurar para que se produzca una excepción de H / W en la siguiente operación de FP posterior , pero eso no es tan pronto como esperaba. Aunque no puedo recordar la referencia.



No estoy seguro de si esto es posible de la manera que lo desea, pero podría crear una macro que envuelva el código en la línea marcada en una afirmación o que establezca un punto de interrupción para esto.

Espero que esto ayude