Sdílet prostřednictvím


float_control

Určuje chování čísla s plovoucí desetinnou čárkou pro funkci.

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

Příznaky

  • value , setting [push]
    Určuje chování plovoucí desetinné čárky.value může být precise nebo except.Další informace naleznete v tématu /fp (zadání chování hodnot s plovoucí desetinnou čárkou).setting může být buď on nebo off.

    Pokud je value nastaveno na precise, jsou určena nastavení pro precise a except .except lze nastavit pouze na on , když je precise nastaveno na on.

    Pokud je přidán nepovinný token push , je aktuální nastavení pro value vloženo do vnitřního zásobníku kompilátoru.

  • push
    Vloží aktuální nastavení float_control do vnitřního zásobníku kompilátoru.

  • pop
    Odebere nastavenífloat_control z horní části vnitřního zásobníku kompilátoru a vytvoří jej novým nastavením float_control.

Poznámky

Nastavení float_control precise nelze zapnout, když je nastavení except zapnuto.Podobně, nastavení precise nelze vypnout, když je nastavení fenv_access zapnuto.Chcete-li přejít z přísného modelu na rychlý model s direktivou pragma float_control, použijte následující kód:

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

Chcete-li přejít z rychlého modelu na přísný model s direktivou pragma float_control, použijte následující kód:

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

Mezi další direktivy pragma pro čísla s plovoucí desetinnou čárkou patří:

Příklad

Následující příklad ukazuje, jak zachytit výjimku přetečení hodnoty s plovoucí desetinnou čárkou pomocí direktivy 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);
   }
}
  

Viz také

Referenční dokumentace

Direktivy Pragma a klíčové slovo __Pragma