float_control

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Especifica el comportamiento de punto flotante de una función.

float_control( value,setting [push] | push | pop )  

value , setting [push]
Especifica un comportamiento de punto flotante. value puede ser precise o except. Para obtener más información, vea /fp (Especificar comportamiento de punto flotante). setting puede ser on u off.

Si value es precise, se especifican los valores de precise y except . except solo se puede establecer en on cuando precise también se establece en on.

Si se agrega el token opcional push , el valor actual de value se inserta en la pila interna del compilador.

push
Inserta el valor de float_control actual en la pila interna del compilador.

pop
Quita el valor defloat_control de la parte superior de la pila interna del compilador y lo convierte en el nuevo valor de float_control.

No puede desactivar float_control precise cuando except está activado. De igual forma, precise no se puede desactivar cuando fenv_access está activado. Para pasar del modelo estricto a un modelo rápido con la instrucción pragma float_control, utilice el código siguiente:

#pragma float_control(except, off)  
#pragma fenv_access(off)  
#pragma float_control(precise, off)  
// The following line is needed on Itanium processors  
#pragma fp_contract(on)  

Para pasar del modelo rápido a un modelo estricto con la instrucción pragma float_control, utilice el código siguiente:

#pragma float_control(precise, on)  
#pragma fenv_access(on)  
#pragma float_control(except, on)  
// The following line is needed on Itanium processors.  
#pragma fp_contract(off)  

Las directivas pragma de punto flotante incluyen:

En el ejemplo siguiente se muestra cómo detectar una excepción de desbordamiento de punto flotante mediante la instrucción pragma float_control.

// pragma_directive_float_control.cpp  
// compile with: /EHa  
#include <stdio.h>  
#include <float.h>  
  
double func( ) {  
   return 1.1e75;  
}  
  
#pragma float_control (except,on)  
  
int main( ) {  
   float u[1];  
   unsigned int currentControl;  
   errno_t err;  
  
   err = _controlfp_s(&currentControl, ~_EM_OVERFLOW, _MCW_EM);  
   if (err != 0)  
      printf_s("_controlfp_s failed!\n");  
  
   try  {  
      u[0] = func();  
      printf_s ("Fail");     
      return(1);  
   }   
  
   catch (...)  {  
      printf_s ("Pass");  
      return(0);  
   }  
}  

Sin errores

Directives pragma y la palabra clave __pragma

Mostrar: