float_control

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

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

Marcadores

  • value,setting**[push]**
    Especifica un comportamiento flotante.value puede ser preciseo except.Para obtener más información, vea /fp (Especificar comportamiento de punto flotante).setting puede es ono off.

    Si value es precise, los valores para precisey exceptse especifican.exceptsolamente se puede establecer en oncuando precisetambién se establece en on.

    Si se agrega el símbolo opcional de push, el valor actual para value se inserta en la pila interna del compilador.

  • push
    Inserte float_control actual que establece en la pila interna del compilador

  • pop
    Quitafloat_control que establece desde la parte superior de la pila interna del compilador y creada que nuevo establecer de float_control .

Comentarios

No puede activar float_control precise de cuando except está activado.De igual forma, precise no puede haberse activado de cuando fenv_access está activado.Pasar de modelo estricta a un modelo rápido con pragma de 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)

Pasar de modelo rápido a un modelo estricta con pragma de 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)

La otra incluyen flotante de pragmas:

Ejemplo

El ejemplo siguiente muestra cómo detectar una excepción flotante de desbordamiento mediante la directiva 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);
   }
}
  

Vea también

Referencia

Directivas de pragma y la palabra clave de __Pragma