Share via


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 compilateur

  • pop
    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(&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);
   }
}
  

Voir aussi

Référence

Directives pragma et le mot clé de __Pragma