float_control
为功能指定浮点行为。
float_control( value,setting [push] | push | pop )
Flags
value,setting**[push]**
指定浮点行为。 value 可以是 precise或 except。 有关更多信息,请参见 /fp(指定浮点行为)。 setting 可以访问是 on或 off。如果 value 是 precise, precise和 except的设置指定。 ,当 precise还设置为 on时,except只能将设置为 on。
如果选项 push标记添加,当前设置 value 的被推送到内部编译器堆栈。
push
驱动器设置为内部编译器的当前 float_controlpop
移除设置从内部编译器堆栈的顶部float_control 并使该新 float_control 设置。
备注
,当 except 打开时,无法启用 float_control precise 。 同样,那么,当 fenv_access 打开时, precise 无法启用。 从强设计若要转到与 float_control 注意的一个快速模型,则使用以下代码:
#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 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 包括:
示例
使用杂注 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);
}
}