_clear87、_clearfp
获取并清除浮点状态字。
unsigned int _clear87( void );
unsigned int _clearfp( void );
返回值
返回值的位表示调用 _clear87 或 _clearfp 之前的浮点状态。 有关由 _clear87返回位的完整定义,请参阅 Float.h。 许多数学库函数修改 8087/80287 状态字,伴随着不可预知的结果。 因为在浮点状态字的已知状态之间更少的浮点操作数被操作,所以从 _clear87 和 _status87 的返回值变得更加可靠。
备注
_clear87 函数在浮点状态字中清除异常标记,设置正忙位为 0,并返回状态字。 浮点状态字是 8087/80287 状态字和其他通过 8087/80287 异常处理程序检测的条件的组合,如浮点堆栈溢出和下溢。
_clearfp 是独立平台, _clear87 例程的可移植版本。 它与 Intel (x86) 平台的 _clear87 相同, MIPS 和 ALPHA 平台也支持。 若要确保您的浮点代码移植到 MIPS 或 ALPHA,请使用 _clearfp。 如果仅 x86 平台,可以使用 _clear87 或 _clearfp。
当使用 /clr(公共语言运行时编译) 或 /clr:pure 编译时,这些函数被丢弃,因为公共语言运行时 (CLR) 仅支持默认值浮点精度。
要求
例程 |
必需的标头 |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
有关更多兼容性信息,请参见“简介”中的兼容性。
示例
// crt_clear87.c
// compile with: /Od
// This program creates various floating-point
// problems, then uses _clear87 to report on these problems.
// Compile this program with Optimizations disabled (/Od).
// Otherwise the optimizer will remove the code associated with
// the unused floating-point values.
//
#include <stdio.h>
#include <float.h>
int main( void )
{
double a = 1e-40, b;
float x, y;
printf( "Status: %.4x - clear\n", _clear87() );
// Store into y is inexact and underflows:
y = a;
printf( "Status: %.4x - inexact, underflow\n", _clear87() );
// y is denormal:
b = y;
printf( "Status: %.4x - denormal\n", _clear87() );
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例。