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.valuecan be precise or except.Para obter mais informações, consulte /FP (Especifica o comportamento de ponto flutuante).settingcan either be on or off.Se value é precise, as configurações de precise e except estiverem especificados.except só pode ser definida como on quando precise também é definida para on.
Se opcional push token é adicionado, a atual configuração para value está enviado pilha do compilador interno.
push
Empurre o atual float_control a configuração para a pilha do compilador internopop
Remove ofloat_control a definição da parte superior da pilha interno do compilador e faz com que o novo float_control configuração.
Comentários
Você não pode ativar a float_control precise desativado 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 float_control pragma, 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 float_control pragma, 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)
Os pragmas de ponto flutuante outros 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(¤tControl, ~_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);
}
}