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 kompilatorapop
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(¤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);
}
}