Condividi tramite


float_control

specifica il comportamento a virgola mobile per una funzione.

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

Flag

  • value,setting**[push]**
    specifica il comportamento a virgola mobile.value può essere preciseo except.Per ulteriori informazioni, vedere /fp (Specifica il comportamento della virgola mobile).setting può essere ono off.

    se value viene precise, le impostazioni per precisee exceptvengono specificate.exceptla proprietà può essere impostata solo a onquando preciseinoltre è impostato su on.

    Se l'elemento facoltativo pushil token viene aggiunto, l'impostazione corrente per value viene inserito su nello stack interno del compilatore.

  • push
    Richiedere all'oggetto corrente float_control impostazione sullo stack interno del compilatore

  • pop
    rimuovefloat_control l'impostazione dall'inizio dello stack interno del compilatore e modo che il nuovo float_control impostare.

Note

Non è possibile disattivare float_control precise da a except è attivata.Analogamente, precise non può essere o fuori da l fenv_access è attivata.Per passare dal modello rigido a un modello veloce con float_control il pragma, utilizzare il codice seguente:

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

Per passare dal modello veloce a un modello rigido con float_control il pragma, utilizzare il codice seguente:

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

Altri pragma a virgola mobile sono:

Esempio

Di seguito viene illustrato come rilevare un'eccezione a virgola mobile di overflow utilizzando 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);
   }
}
  

Vedere anche

Riferimenti

Direttive pragma e la parola chiave di __Pragma