float_control

Gibt Gleitkommaverhalten für eine Funktion an.

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

Flags

  • value,setting**[push]**
    Gibt das Gleitkommaverhalten an.value kann preciseoder exceptsein.Weitere Informationen finden Sie unter /fp (Festlegen des Gleitkommaverhaltens).setting kann entweder onist, oder offein.

    Wenn valuepreciseist, werden die Einstellungen für preciseund exceptangegeben.exceptonkann nur festgelegt werden, wenn preciseauch in onfestgelegt ist.

    Wenn das optionale pushToken hinzugefügt wird, wird die aktuelle Einstellung für value dem intern Compilerstapel gedrückt.

  • push
    Drücken Sie float_control , das dem aktuellen Compilerstapel intern festgelegt wird

  • pop
    Entferntfloat_control , das von der obersten Position des Compilerstapel intern festgelegt und macht das das neue float_control - Einstellung.

Hinweise

Sie können float_control precise nicht aus drehen, wenn except aktiviert ist.Ebenso kann nicht precise von gedreht werden, wenn fenv_access aktiviert ist.Um den strengen Modell zu einem schnellen Modell mit dem float_control Pragma zu wechseln, verwenden Sie folgenden Code:

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

Um den schnellen Modell auf einen strengen Modell mit dem float_control Pragma zu wechseln, verwenden Sie folgenden Code:

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

Andere Gleitkommapragma sind möglich:

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine Sammel gleitkommaausnahme abgefangen werden, indem Pragma float_controlverwendet.

// 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);
   }
}
  

Siehe auch

Referenz

Pragma-Direktiven und das __Pragma-Schlüsselwort