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 ...
随机推荐
- Le lié à la légèreté semblait être et donc plus simple
Il est toutefois vraiment à partir www.runmasterfr.com/free-40-flyknit-2015-hommes-c-1_58_59.html de ...
- Html中列表标签<ul>的使用
借助Html中的列标标签<ul>在某列文字前面添加标注 <html> <head> <title>文字上方添加标记说明</title> &l ...
- 如何在Texstudio内加载语法检查词典?
如何在Texstudio编辑软件内加载"语法检查词典"? How to make dictionary work in TexStudio I am using TexStudio ...
- nginx问题收集
1.问题: 用户在微信授权成功之后, 跳转到网页时, 出现nginx的错误界面, 复制当前这个链接在网页中打开则正常显示, 同时nginx日志文件中报错(upstream sent too big ...
- 比特币_Bitcoin 简介
2008-11 Satoshi Nakamoto Bitcoin: A Peer-to-Peer Electronic Cash System http://p2pbucks.com/?p=99 ...
- NSSearchPathForDirectoriesInDomains函数详解
NSSearchPathForDirectoriesInDomains函数详解 #import "NSString+FilePath.h" @implementation ...
- BLAST套件
Blastn是将给定的核酸序列与核酸数据库中的序列进行比较: Blastp是使用蛋白质序列与蛋白质数据库中的序列进行比较,可以寻找较远的关系: Blastx将给定的核酸序列按照六种阅读框架将其翻译成蛋 ...
- MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】
案例: 线上有一数据库,需要每周全备一次,每天差备一次[安全起见还是差备吧,不要增备,不要吝啬磁盘哦,而且差备恢复还很快] 1.每周对数据库hellodb做完全备份 crontab任务计划: * * ...
- Virtualbox 上调整 Mac OS 分辨率 最简单方法
Mac OS 分辨率:VBoxManage setextradata "Mac OS X 10.10" VBoxInternal2/EfiGopMode 3 ----代 ...
- git error: unable to rewind rpc post data - try increasing http.postBuffer
error: unable to rewind rpc post data - try increasing http.postBuffererror: RPC failed; curl 56 Rec ...