float_control
Určuje chování funkce s plovoucí desetinnou čárkou.
float_control( value,setting [push] | push | pop )
Příznaky
value,setting**[push]**
Určuje chování s plovoucí desetinnou čárkou.valuecan be precise or except.Další informace naleznete v tématu /FP (určit chování s plovoucí čárkou).settingcan either be on or off.Pokud value je precise, nastavení pro precise a except jsou určený.except lze nastavit pouze on při precise nastavena na on.
Pokud nepovinný push přidány token, aktuální nastavení pro value se posune na vnitřním zásobníku překladače.
push
Pro nabízenou replikaci aktuálního float_control hodnotu vnitřním zásobníku překladačepop
Odeberefloat_control nastavení z horní zásobník kompilátoru a který umožňuje nové float_control nastavení.
Poznámky
Nelze zapnout float_control precise při vypnutí except na.Podobně precise nelze vypnout při fenv_access na.Přechod z přísné modelu rychlé modelu s float_control pragma, 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)
Přechod z modelu rychlé přísné modelu s float_control pragma, 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)
Ostatní pragmas s plovoucí desetinnou čárkou obsahovat:
Příklad
Následující příklad ukazuje, jak zachytit výjimku s plovoucí desetinnou čárkou přetečení pomocí 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(¤tControl, ~_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);
}
}