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 preciseoder exceptsein.Weitere Informationen finden Sie unter /fp (Festlegen des Gleitkommaverhaltens).setting kann entweder onist, oder offein.Wenn valuepreciseist, werden die Einstellungen für preciseund exceptangegeben.exceptonkann nur festgelegt werden, wenn preciseauch in onfestgelegt ist.
Wenn das optionale pushToken hinzugefügt wird, wird die aktuelle Einstellung für value dem intern Compilerstapel gedrückt.
push
Drücken Sie float_control , das dem aktuellen Compilerstapel intern festgelegt wirdpop
Entferntfloat_control , das von der obersten Position des Compilerstapel intern festgelegt und macht das das neue float_control - Einstellung.
Hinweise
Sie können float_control precise nicht aus drehen, wenn except aktiviert ist.Ebenso kann nicht precise von gedreht werden, wenn fenv_access aktiviert ist.Um den strengen Modell zu einem schnellen Modell mit dem float_control Pragma zu wechseln, verwenden Sie 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 den schnellen Modell auf einen strengen Modell mit dem float_control Pragma zu wechseln, verwenden Sie 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 Gleitkommapragma sind möglich:
Beispiel
Im folgenden Beispiel wird gezeigt, wie eine Sammel gleitkommaausnahme abgefangen werden, indem Pragma float_controlverwendet.
// 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);
}
}