Freigeben über


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 precise oder except sein. Weitere Informationen finden Sie unter /fp (Festlegen des Gleitkommaverhaltens). setting kann on oder off sein.

    Wenn value precise ist, werden die Einstellungen für precise und except angegeben. except kann nur auf on festgelegt werden, wenn precise auch in on festgelegt ist.

    Wenn das optionale push -Token hinzugefügt wird, wird die aktuelle Einstellung für value auf dem internen Compilerstapel abgelegt.

  • push
    Schieben Sie die aktuelle float_control-Einstellung auf den internen Compilerstapel.

  • pop
    Entfernt diefloat_control-Einstellung aus der obersten Position des internen Compilerstapels und erstellt die neue float_control-Einstellung.

Hinweise

Sie können float_control precise nicht deaktivieren, wenn except aktiviert ist. Ebenso kann precise nicht deaktiviert werden, wenn fenv_access aktiviert ist. Um mit dem float_control-Pragma vom strict-Modell zum fast-Modell überzugehen, verwenden Sie den 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 mit dem float_control-Pragma vom fast-Modell zum strict-Modell überzugehen, verwenden Sie den 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 Gleitkommapragmas umfassen:

Beispiel

Das folgende Beispiel zeigt, wie eine Überlaufgleitkommaausnahme mit dem Pragma float_control verwendet wird.

// 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