Partilhar via


float_control

Especifica o comportamento de ponto flutuante para uma função.

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

Sinalizadores

  • value , setting [push]
    Especifica o comportamento de ponto flutuante. value pode ser precise ou except. Para obter mais informações, consulte /fp (especificar comportamento de ponto flutuante). setting pode ser on ou off.

    Se value for precise, as configurações de precise e except estão sendo especificadas. except só pode ser definido como on quando precise também é definido como on.

    Se o token opcional push for adicionado, a configuração atual de value será enviada por push para a pilha interna do compilador.

  • push
    Enviar por push a configuração atual de float_control para a pilha interna do compilador

  • pop
    Remove a configuração defloat_control da parte superior da pilha interna do compilador e faz dela a nova configuração de float_control.

Comentários

Você não pode desativar float_control precise quando except está ativado. Da mesma forma, precise não pode ser desativado quando fenv_access está ativado. Para ir do modelo estrito para um modelo rápido com o pragma float_control, use o seguinte código:

#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 ir do modelo rápido para um modelo estrito com o pragma float_control, use o seguinte código:

#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)

Outros pragmas de ponto flutuante incluem:

Exemplo

O exemplo a seguir mostra como capturar uma exceção de ponto flutuante de estouro usando o 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);
   }
}
  

Consulte também

Referência

Diretivas Pragma e a palavra-chave __Pragma