<float.h>头文件
<float.h>头文件定义了多个宏,这些宏会扩展为标准浮点类型的各种限制和参数。ISO/IEC 9899:2018标准第5.2.4.2.2 Characteristics of floating types <float.h>节列出了这些宏、它们的含义以及对其值的约束(或限制)。ISO/IEC 9899:2018标准Annex E部分对这些宏作了概括。
如果实现定义了宏__STDC_IEC_559__,实现中浮点类型和浮点算术应符合IEC 60559标准Annex F规范。如果实现定义了宏__STDC_IEC_559_COMPLEX__,实现中复数类型和复数算术应符合IEC 60559标准Annex G规范。
浮点类型的特征是根据模型定义的,该模型描述了浮点数和值的表示形式,提供了有关实现浮点运算的信息。浮点模型旨在阐明每个浮点特性,并不要求实现中浮点算法完全相同。
浮点数(x)通过以下模型定义:
其中:s为符号(±1)。
b为指数表示形式中的基数(一个大于1的整数,例如:2。)。
e为指数(一个介于最小指数emin和最大指数emax之间的整数。)。
p为精度(有效数中基数b的位数。)。
fk为小于b的非负整数(有效数字,例如:基数为2时,有效数字为0或者1。)。
除规格化浮点数(如果x≠0,f1>0。)外,浮点类型可能包含其它类型的浮点数,例如:次规格化浮点数(x≠0, e=emin, f1=0)、非规格化浮点数(x≠0, e>emin, f1=0)和一些非浮点数的值(例如:∞、NaNs)。
NaN是表示非数值的编码。算术运算中安静非数值(quiet NaN)不会引发浮点异常;当操作数中出现信号非数值(signaling NaN)时,通常会引发浮点异常。IEC 60559:1989标准明确定义了安静非数值和信号非数值。对于不支持IEC 60559:1989标准的实现,安静非数值和信号非数值使用具有相似行为的编码。
实现可能给0和非浮点数值(例如:∞、NaNs。)符号,也可能没有符号。只要这些值是无符号的,根据ISO/IEC 9899:2018标准任何获取符号的请求都会生成一个未指定的符号,并且任何设置符号的请求都应被忽略。
浮点类型可表示值的最小范围从该类型可表示的最小负有限浮点数到该类型可表示的最大正有限浮点数。如果一个类型可以表示负无穷大(-∞),该类型可以表示所有负实数;同样如果一个类型可以表示正无穷大(+∞),该类型可以表示所有正实数。
浮点运算(+、-、*、/)的精度、<math.h>和<complex.h>头文件中库函数返回浮点结果的精度由实现定义;使用<stdio.h>、<stdlib.h>和<wchar.h>头文件中库函数进行浮点内部表示形式和字符串表示形式之间转换的精度也是由实现定义。实现可能声明精度是未知的。
<float.h>头文件中的所有整数值(FLT_ROUNDS除外)都应是适合在#if预处理指令中使用的常量表达式;所有浮点值应为常量表达式。对于所有浮点类型(float、double和long double类型),<float.h>头文件中定义的宏(DECIMAL_DIG、FLT_EVAL_METHOD、FLT_RADIX和FLT_ROUNDS除外)都有对应的名称。ISO/IEC 9899:2018标准为<float.h>头文件中定义的所有宏(FLT_EVAL_METHOD和FLT_ROUNDS除外)提供了浮点模型表示形式。
<float.h>头文件中定义的与浮点类型有关的宏具体如下:
宏(macro):DECIMAL_DIG | 表示十进制位数的宏。 |
FLT_DECIMAL_DIG DBL_DECIMAL_DIG LDBL_DECIMAL_DIG |
表示十进制位数的宏。 |
FLT_DIG DBL_DIG LDBL_DIG |
表示十进制位数的宏。 |
FLT_EPSILON DBL_EPSILON LDBL_EPSILON |
表示大于1的可表示的最小值和1之间差值的宏。 |
FLT_EVAL_METHOD | 表示评估方法的宏。 |
FLT_HAS_SUBNORM DBL_HAS_SUBNORM LDBL_HAS_SUBNORM |
表示是否支持次规格化浮点数的宏。 |
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG |
表示浮点有效数中基数FLT_RADIX位数的宏。 |
FLT_MAX DBL_MAX LDBL_MAX |
表示可表示的最大有限浮点数的宏。 |
FLT_MAX_10_EXP DBL_MAX_10_EXP LDBL_MAX_10_EXP |
表示基数为10的最大指数的宏。 |
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP |
表示最大指数的宏。 |
FLT_MIN DBL_MIN LDBL_MIN |
表示最小正规格化浮点数的宏。 |
FLT_MIN_10_EXP DBL_MIN_10_EXP LDBL_MIN_10_EXP |
表示基数为10的最小负指数的宏。 |
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP |
表示最小负指数的宏。 |
FLT_RADIX | 表示指数表示形式中的基数的宏。 |
FLT_ROUNDS | 表示舍入模式的宏。 |
FLT_TRUE_MIN DBL_TRUE_MIN LDBL_TRUE_MIN |
表示最小正浮点数的宏。 |