当前位置: C语言 -- 专题 -- 浮点模型和浮点宏的关系

浮点模型和浮点宏的关系

以下模型描述了一个满足ISO/IEC 9899:2024标准最低要求的人工浮点表示(artificial floating-point representation)。

:人工浮点表示并不是指某个特定硬件(例如:Intel x86。)上真实的IEEE 754标准浮点数格式,而是标准文档为了阐述概念而设计的一个假设的、简化的格式。人工浮点表示的目的是用来说明:只要一种浮点表示法满足标准规定的一系列最低要求(例如:精度、范围等。),就认为是符合标准的实现。)

x = s 16 e k =1 6 f k 16 - k ,     -31 e +32

对于float类型,<float.h>头文件中对应的宏分别为:

FLT_RADIX 16
FLT_MANT_DIG 6
FLT_EPSILON 9.53674316E-07F
FLT_DECIMAL_DIG 9
FLT_DIG 6
FLT_MIN_EXP -31
FLT_MIN 2.93873588E-39F
FLT_MIN_10_EXP -38
FLT_MAX_EXP +32
FLT_MAX 3.40282347E+38F
FLT_MAX_10_EXP +38

以下模型分别描述了满足ISO/IEC 60559标准中32位二进制数和64位二进制数要求的浮点表示。

ISO/IEC 60559标准中的浮点模型对b的幂求和是从0开始的,因此指数极值比这里显示的数值要少1。)

x f = s 2 e k =1 24 f k 2 - k ,     -125 e +128

 

x d = s 2 e k =1 53 f k 2 - k ,     -1021 e +1024

对于float类型和double类型,<float.h>头文件中对应的宏分别为:

FLT_IS_IEC_60559 1
FLT_RADIX 2
FLT_MANT_DIG 24
FLT_EPSILON 1.19209290E-07F //十进制常量
FLT_EPSILON 0X1P-23F //十六进制常量
FLT_DECIMAL_DIG 9
FLT_DIG 6
FLT_MIN_EXP -125
FLT_MIN 1.17549435E-38F //十进制常量
FLT_MIN 0X1P-126F //十六进制常量
FLT_TRUE_MIN 1.40129846E-45F //十进制常量
FLT_TRUE_MIN 0X1P-149F //十六进制常量
FLT_HAS_SUBNORM 1
FLT_MIN_10_EXP -37
FLT_MAX_EXP +128
FLT_MAX 3.40282347E+38F //十进制常量
FLT_MAX 0X1.fffffeP127F //十六进制常量
FLT_MAX_10_EXP +38
DBL_MANT_DIG 53
DBL_IS_IEC_60559 1
DBL_EPSILON 2.2204460492503131E-16 //十进制常量
DBL_EPSILON 0X1P-52 //十六进制常量
DBL_DECIMAL_DIG 17
DBL_DIG 15
DBL_MIN_EXP -1021
DBL_MIN 2.2250738585072014E-308 //十进制常量
DBL_MIN 0X1P-1022 //十六进制常量
DBL_TRUE_MIN 4.9406564584124654E-324 //十进制常量
DBL_TRUE_MIN 0X1P-1074 //十六进制常量
DBL_HAS_SUBNORM 1
DBL_MIN_10_EXP -307
DBL_MAX_EXP +1024
DBL_MAX 1.7976931348623157E+308 //十进制常量
DBL_MAX 0X1.fffffffffffffP1023 //十六进制常量
DBL_MAX_10_EXP +308

如果宏FLT_EVAL_METHOD值不为0,或者支持除ISO/IEC 60559默认模式外的编译舍入模式,十进制浮点常量可能无法提供正确值;但十六进制浮点常量在所有情况下都是正确的,因此它们的值可以精确表示。



主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018