C标准库源码解剖(12):浮点数环境fenv.h

本文介绍了C99引入的fenv.h头文件,用于控制浮点数环境,包括舍入方式、异常处理等方面。fenv_t结构体和fexcept_t异常标志类型分别表示浮点数环境和异常状态。标准接口提供了如fegetenv、fesetenv等控制函数,而具体实现依赖于体系结构,例如x86体系结构在glibc的sysdeps/i386/fpu目录下。虽然代码包含汇编,但理解核心功能需要熟悉x86体系结构。
摘要由CSDN通过智能技术生成

     为了编写高精度浮点数的运算,编程人员需要控制浮点数环境的各个方面:结果如何舍入,浮点数表达式如何简化与变换,如何处理浮点数异常(如下溢之类的浮点数异常是忽略还是产生错误),等等。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	所有被支持的异常的按位或
   下面这些宏被定义,当且仅当实现支持某
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值