赞
踩
本文已整合到C语言标准库深度解读
float.h
用以描述浮点数并提供了浮点算术的基本信息,这些信息大多是通过宏的形式定义的。
在C语言中,一个浮点数可以表示为
x = s b e ∑ k = 1 p f k b − k , e min < e ≤ e max x=sb^e\sum_{k=1}^pf_kb^{-k}, e_{\min}<e\leq e_{\max} x=sbek=1∑pfkb−k,emin<e≤emax
其中, s s s为符号,取值为 ± 1 \pm1 ±1; b b b是大于1的整数,表示基数; e e e为指数; p p p为精度; f k f_k fk表示有效数字。记 M = ∑ k = 1 p f k b − k M=\sum_{k=1}^pf_kb^{-k} M=∑k=1pfkb−k,则可写为
x = s × M × b e , e min < e ≤ e max x=s\times M\times b^e, e_{\min}<e\leq e_{\max} x=s×M×be,emin<e≤emax
在float.h
中,FLT_RADIX
表示基数,即b
,这个b
对所有浮点数类型都有效。而float.h
的define
的值中,绝大多数可分为三类,分别对应float
、double
和long double
类型:
float | double | long double | 简要说明 |
---|---|---|---|
FLT_MANT_DIG | DBL_MANT_DIG | LDBL_MANT_DIG | b 进制下M 的最大长度 |
FLT_DIG( ≥ 6 \ge6 ≥6) | DBL_DIG( ≥ 10 \ge10 ≥10) | LDBL_DIG( ≥ 10 \ge10 ≥10) | 小数点后精确数字位数 |
FLT_MIN_EXP | DBL_MIN_EXP | LDBL_MIN_EXP | b 进制下e 的最小值 |
FLT_MAX_EXP | DBL_MAX_EXP | LDBL_MAX_EXP | b 进制下e 的最大值 |
FLT_MIN_10_EXP | DBL_MIN_10_EXP | LDBL_MIN_10_EXP | 十进制下 e min ≤ − 37 e_{\min}\le-37 emin≤−37 |
FLT_MAX_10_EXP | DBL_MAX_10_EXP | LDBL_MAX_10_EXP | 十进制下 e max ≥ 37 e_{\max}\ge37 emax≥37 |
FLT_MAX | DBL_MAX | LDBL_MAX | 浮点数最大值 ⩾ 1 0 37 \geqslant10^{37} ⩾1037 |
FLT_MIN | DBL_MIN | LDBL_MIN | 浮点数最小值 ⩽ 1 0 − 37 \leqslant10^{-37} ⩽10−37 |
FLT_EPSILON ( ⩽ 1 0 − 5 \leqslant10^{-5} ⩽10−5) | DBL_EPSILON ( ⩽ 1 0 − 9 \leqslant10^{-9} ⩽10−9) | LDBL_EPSILON ( ⩽ 1 0 − 9 \leqslant10^{-9} ⩽10−9) | 最小差值 |
其中,XXX_EPSILON
表示1和大于1的最小浮点数之间的差值。
此外,还有三个独立的常量:
FLT_ROUNDS
表示浮点加法的舍入模式:
FLT_EVAL_METHOD
:指明表达式求值时是否需要提升浮点数类型
float
提升到double
long double
DECIMAL_DIG
:用于long double
序列化和反序列化时的十进制精度。简单地说,以不损失精度为前提,能够将long double
转换成至少DECIMAL_DIG
个十进制数字;反过来,也能将至少DECIMAL_DIG
个十进制数字转换成long double
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。