Udostępnij za pośrednictwem


float_control

Określa zachowanie zmiennoprzecinkowego dla funkcji.

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

Flagi

  • value,setting**[push]**
    Określa zachowanie zmiennoprzecinkowych.valuecan be precise or except.Aby uzyskać więcej informacji, zobacz / ol (określić zachowanie zmiennoprzecinkowych).settingcan either be on or off.

    Jeśli value jest precise, ustawienia dla precise i except są są określone.except można ustawić tylko on po precise jest również ustawiona na on.

    Jeśli opcjonalna push token jest dodawany, bieżące ustawienie dla value jest wkładany stos wewnętrznego kompilatora.

  • push
    Replikacji wypychanej bieżącego float_control ustawienie do stosu wewnętrznego kompilatora

  • pop
    Usuwafloat_control ustawienie z wierzchu stosu wewnętrznego kompilatora i sprawia, że nowy float_control ustawienie.

Uwagi

Nie można włączyć float_control precise off, gdy except znajduje się na.Podobnie precise nie może być wyłączona podczas fenv_access znajduje się na.Aby przejść od ścisłego modelu do szybkiego modelu z float_control pragma, użyć następującego kodu:

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

Aby przejść z modelu fast do ścisłego modelu z float_control pragma, użyć następującego kodu:

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

Inne pragmas zmiennoprzecinkowych obejmują:

Przykład

Poniższy przykład pokazuje, jak wychwycić wyjątek Przepełnienie zmiennoprzecinkowe przy użyciu 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);
   }
}
  

Zobacz też

Informacje

Dyrektywy pragma i __Pragma słowa kluczowego