为了编写高精度浮点数的运算,编程人员需要控制浮点数环境的各个方面:结果如何舍入,浮点数表达式如何简化与变换,如何处理浮点数异常(如下溢之类的浮点数异常是忽略还是产生错误),等等。C99引入了fenv.h来控制浮点数环境。
1、fenv.h: 定义了浮点数环境控制函数、异常控制函数、舍入方式控制函数、浮点数异常码和舍入方式等。注意浮点数环境的实现是依赖于体系结构的,因为不同的体系结构有不同的浮点数指令集。依赖于体系结构的定义放在bits/fenv.h中,这里是x86体系结构的版本(Linux下)。
标准头文件fenv.h内容如下:
/* ISO C99 7.6: 浮点数环境 <fenv.h> */
#ifndef _FENV_H
#define _FENV_H 1
#include <features.h>
/* 获取依赖于体系结构的定义。应该要有下面这些定义:
fenv_t 表示浮点数环境的类型
FE_DFL_ENV fenv_t *指针类型的值,表示浮点数环境的缺省值(用于需要fenv_t参数的函数中)
fexcept_t 表示浮点数异常标志(这个标志保存了浮点数的状态)的类型
下面的宏被定义,当且仅当实现支持这些宏时:
FE_INEXACT 不精确的结果
FE_DIVBYZERO 除数为0
FE_UNDERFLOW 结果向下溢出
FE_OVERFLOW 结果向上溢出
FE_INVALID 无效的运算
FE_ALL_EXCEPT 所有被支持的异常的按位或
下面这些宏被定义,当且仅当实现支持某