float_control
指定浮點行為的函式。
float_control( value,setting [push] | push | pop )
旗標
value,setting**[push]**
指定浮點行為。 valuecan be precise or except. 如需詳細資訊,請參閱 /fp (指定浮點數行為)。 settingcan either be on or off.如果value是precise,設定precise 和except 會被指定。 except 只能設定成on 時precise 也設定成on。
如果選擇性push 語彙基元加入時,目前設定的value推入至內部編譯器堆疊。
push
推入目前的float_control設定為內部編譯器堆疊上pop
移除float_control從內部編譯器堆疊的頂端設定並使之新float_control設定。
備註
您不能 [打開float_control precise何時關閉except上。 同樣地, precise無法關閉時fenv_access上。 若要從嚴格的模型可移至快速的模型,與float_control pragma,使用下列程式碼:
#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)
若要前往從快速模型嚴格的模型,與float_control pragma,使用下列程式碼:
#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)
其他的浮點 pragma 包括:
範例
下列範例示範如何攔截溢位浮點例外狀況使用 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);
}
}