C 标准库系列之float.h
float.h 内部主要包含了一系列的浮点数宏、指明可移植程序必要的常量;浮点数格式一般为Spxbe;其中S表示+-;p表示底数、b表示基数如2、8、10、16等进制,e为指数标识E或e;
在一般情况下可以直接使用该头文件中宏定义的值。
glibc下没有专门针对float.h的文件,其一般以stdlib.h或者其他文件替代。
微软的float.h提供了各个浮点数宏,包括要求的最大值、最小值、精度等,其中以DBL开头的宏表示double类型,FLT开头的则float类型的,此外还有LDBL开头的,即long double类型
在不同平台或处理器下可能有不同的值范围,比如#define DBL_MAX 1.7976931348623158e+308,#define FLT_MAX 3.402823466e+38F,#define DBL_DIG 15,#define FLT_DIG 6分别为双精度和单精度浮点数最大值,以及双精度和单精度的有效位为15位、6位,在一般的应用中单精度便足够了并且节省内存占用。
微软还提供了获取或者改变浮点控制字的几个函数,如_controlfp、_clearfp、_set_controlfp、_statusfp、_fpreset等,这些函数控制字使程序能够根据不同的平台改变精度,舍入;
__fpecode:获取浮点错误信号、返回码,其以_FPE_XXX开头的宏定义值,比如_FPE_INVALID无效值、_FPE_OVERFLOW溢出值:此外也提供了IEEE 推荐的函数,这些函数参数针对double类型;
如:
double _copysign(double x,double y):以第二个参数的正负符号返回第一个参数x的值;
double _chgsign(double x):返回该数值的正负号变换后的值(正变为负,负变为正);
double _scalb(double x,double y):以2的幂缩放自变量,即返回值为x * 2的y次方;
double _logb(double x):返回x值的2为底数的指数值;如_logb(8.0)返回3.0
double _nextafter(double x,double y):返回x在y方向上可以表示的最接近的数值,若x等于y,则返回y;
int _finite(double x):判断x是否为有效浮点数,比如非无穷大的,当x为infinite或者NaN时返回false(0),否则返回true(非0值);
int _isnan(double x):判断x是否为非数值;若非数值则返回true(非0),否则返回false(0);
int _fpclass(double x):返回浮点数值的类型,这些返回值被以_FPCLASS_XXX宏定义的值。
glibc中也有提供IEEE 推荐的函数,不过函数命名不同且存放在math.h文件中,形如:isnan、isinf、isnormal、isfinite、fpclassify、copysign、scalb、logb等。
C 标准库系列之float.h的更多相关文章
- C 标准库系列之locale.h
locale.h 区域设置相关,主要针对时间日期.货币格式.字符控制.数字格式等以满足某区域的设置需要. locale设置类别主要包括以下几个宏定义的类别: LC_ALL:设置所有的类别: LC_CO ...
- C 标准库系列之errno.h
errno.h 提供了一个整数全局变量errno,当系统调用或者库函数的错误事件发生时可能会修改该值,指明错误的原因,该值可在任何需要的地方被修改:一般情况不为0的值表示出现了异常或者错误. errn ...
- C 标准库系列之assert.h
先简单介绍一下<assert.h>头文件,该头文件的目的便是提供一个宏assert的定义,即可以在程序必要的地方使用其进行断言处理:断言在程序中的作用是当在调试模式下时,若程序给出的前提条 ...
- C 标准库系列之limits.h
limits.h 类似于float.h,其定义了一些列类型的值的范围.限制值,也就是说该类型的值不可以大于该上界或者小于该类型值的下界: glibc中宏定义了一下的值: # define MB_LEN ...
- C 标准库系列之ctype.h
ctype.h 主要提供了一些函数用以测试字符或字符处理的功能函数:包括字符判断检测.字符转换: 目前ASCII字符可分为以下一些类型,如:大写.小写.字母.数字.十六进制.空白字符.可打印字符.控制 ...
- C 标准库系列之概述
基本上很多编程语言都会提供针对语言本身的一系列的标准库或者包,当然C语言同样也有提供标准库,C语言的标准库是一系列的头文件的集合:如assert.h.ctype.h.errno.h.float.h.l ...
- 《C标准库》——之<ctype.h>
在没读<ctype.h>的源码之前,我一直以为我们平时用的isalnum.isdigit.isalpha等这些函数,是靠判断写出来的. 比如: int isdigit(int c){ re ...
- 《C标准库》——之<stddef.h>
<stddef.h>,顾名思义,就是标准定义.C语言里这个标准库里定义了一些类型,和宏定义. <stddef.h>的内容: 类型: ptrdiff_t : 是两个指针相减的结果 ...
- 《C标准库》—之<assert.h>实现
首先,贴出标准库中<assert.h>的实现源码: #undef assert #ifdef NDEBUG #define assert(test)((void)0) #else void ...
随机推荐
- 学习篇:TypeCodes的2015年博客升级记
原文: https://typecodes.com/mix/2015updateblog.html 2015年博客升级记 作者:vfhky | 时间:2015-05-23 17:25 | 分类:mix ...
- 记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)
目标:想在WinForm程序之间传递参数.以便子进程作出相应的处理. 一种错误的方法 父进程的主程序: ProcessStartInfo psi = new ProcessStartInfo(); p ...
- ecshop随机分类
$get_categories_tree = get_categories_tree(); $smarty->assign('category_1', RandArray($get_catego ...
- 室内定位系列(二)——仿真获取RSS数据
很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大.数据不全面.灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式.本文介绍射线跟踪技术的基本原理,以 ...
- 2.2、Hibernate用注解方式实现一对多、多对多关系
一.一对多关系 1.在上一篇日志中用.xml配置文件项目基础上,再往lib目录先添加一个包-hibernate-jpa-2.0-api-1.0.0.Final.jar 2.新建一个com.st.bea ...
- 一张图告诉你,只会Node.JS还不够!
一本nodejs代码段.
- Linq练习
首先在Program.cs的Main()方法下添加如下代码: string[] names = { "heh", "haha", "huahua&qu ...
- 【bzoj1231】[Usaco2008 Nov]mixup2 混乱的奶牛
题目描述 混乱的奶牛[Don Piele, 2007]Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= ...
- SpringMvc核心流程以及入门案例的搭建
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- JDBC值事务
事务的四大特性: 原子性, 一致性(比如说A给B转账,A转了之后B的账户增加了,两个都完成才叫一致性),隔离性(A给B转账,A给C转账,AB和AC并发是无关的),永久性(转账之后 不可能复原,就是说不 ...