float_control
spécifie le comportement à virgule flottante pour une fonction.
float_control( value,setting [push] | push | pop )
Flags
value,setting**[push]**
spécifie le comportement à virgule flottante.value peut être preciseou except.Pour plus d'informations, consultez /fp (Spécifier le comportement de virgule flottante).setting peuvent soit onou off.Si value est precise, les paramètres de preciseet exceptsont spécifiés.exceptpeut être défini à onlorsque preciseest également défini dans on.
Si le jeton facultatif d' pushest ajoutée, le paramètre actuel de value est de type push sur la pile interne du compilateur.
push
Push float_control actuel définissant sur la pile interne du compilateurpop
Supprimefloat_control définissant du haut de la pile interne du compilateur et fait que nouveau définir d' float_control .
Notes
Vous ne pouvez pas désactiver float_control precise off lorsque except est activé.De même, precise ne peut pas être activé off lorsque fenv_access est activé.Pour passer du modèle strict à un modèle rapide avec le pragma d' float_control , utilisez le code suivant :
#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)
Pour passer du modèle rapide à un modèle strict avec le pragma d' float_control , utilisez le code suivant :
#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)
D'autres pragmas à virgule flottante incluent :
Exemple
L'exemple suivant montre comment intercepter une exception à virgule flottante de dépassement de capacité à l'aide de float_controlpragma.
// 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);
}
}