欢迎大家来到IT世界,在知识的湖畔探索吧!
C 语言中的浮点数类型的特征由描述浮点数表示的以下模型定义:
欢迎大家来到IT世界,在知识的湖畔探索吧!
浮点模型
对于 C 语言标准规定的浮点数类型特征,遵循标准的实现必须让这些值在绝对值上大于 / 小于或等于标准值,但符号保持不变。我们以 C11 为例,给出 C 语言标准中对浮点型特征的定义。同时,作为对比,也会给出 64 位环境 Ubuntu 16.04 系统(以下简称 U16_x64)中定义的实际值。
注:U16_x64 使用的 gcc 版本是 5.4.0,浮点型特征的定义位于头文件
/usr/lib/gcc/x86_64-linux-gnu/5/include/float.h。
- 指数表达式的基数(b)
|
宏定义 |
FLT_RADIX |
|
C11 的规定 |
2 |
|
U16_x64 的实现 |
2 |
- 浮点有效位中以 FLT_RADIX 为基数的有效位数(p)
|
宏定义 |
FLT_MANT_DIG |
|
C11 的规定 |
|
|
U16_x64 的实现 |
24 |
|
宏定义 |
DBL_MANT_DIG |
|
C11 的规定 |
|
|
U16_x64 的实现 |
53 |
|
宏定义 |
LDBL_MANT_DIG |
|
C11 的规定 |
|
|
U16_x64 的实现 |
64 |
- 十进制位数 n,满足条件:任何 p 位以 b 为基数的浮点数可与这 n 位十进制浮点数相互转化,否则使用值
(b 不是 10 的幂,结果向上圆整)
|
宏定义 |
FLT_DECIMAL_DIG |
|
C11 的规定 |
6 |
|
U16_x64 的实现 |
9 |
|
宏定义 |
DBL_DECIMAL_DIG |
|
C11 的规定 |
10 |
|
U16_x64 的实现 |
17 |
|
宏定义 |
LDBL_DECIMAL_DIG |
|
C11 的规定 |
10 |
|
U16_x64 的实现 |
21 |
- 十进制位数 n,满足条件:任何最宽范围的
位以 b 为基数的浮点数可与这 n 位十进制浮点数相互转化,否则使用值
(b 不是 10 的幂,结果向上圆整)
|
宏定义 |
DECIMAL_DIG |
|
C11 的规定 |
10 |
|
U16_x64 的实现 |
21 |
- 十进制位数 q,满足条件:这 q 位十进制浮点数可与任何 p 位以 b 为基数的浮点数相互转化,否则使用值
(b 不是 10 的幂,结果向下圆整)
|
宏定义 |
FLT_DIG |
|
C11 的规定 |
6 |
|
U16_x64 的实现 |
6 |
|
宏定义 |
DBL_DIG |
|
C11 的规定 |
10 |
|
U16_x64 的实现 |
15 |
|
宏定义 |
LDBL_DIG |
|
C11 的规定 |
10 |
|
U16_x64 的实现 |
18 |
- 满足以下条件的最小负整数
:FLT_RADIX 的
次幂仍然是规范化浮点数
|
宏定义 |
FLT_MIN_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
-125 |
|
宏定义 |
DBL_MIN_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
-1021 |
|
宏定义 |
LDBL_MIN_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
-16381 |
- 满足以下条件的最小负整数:10 的该次幂仍然是规范化浮点数(
,结果向上圆整)
|
宏定义 |
FLT_MIN_10_EXP |
|
C11 的规定 |
-37 |
|
U16_x64 的实现 |
-37 |
|
宏定义 |
DBL_MIN_10_EXP |
|
C11 的规定 |
-37 |
|
U16_x64 的实现 |
-307 |
|
宏定义 |
LDBL_MIN_10_EXP |
|
C11 的规定 |
-37 |
|
U16_x64 的实现 |
-4931 |
- 满足以下条件的最大整数
:FLT_RADIX 的
次幂仍然是可表示的有限浮点数
|
宏定义 |
FLT_MAX_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
+128 |
|
宏定义 |
DBL_MAX_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
+1024 |
|
宏定义 |
LDBL_MAX_EXP |
|
C11 的规定 |
|
|
U16_x64 的实现 |
+16384 |
- 满足以下条件的最大整数:10 的该次幂仍然是可表示的有限浮点数(
,结果向下圆整)
|
宏定义 |
FLT_MAX_10_EXP |
|
C11 的规定 |
+37 |
|
U16_x64 的实现 |
+38 |
|
宏定义 |
DBL_MAX_10_EXP |
|
C11 的规定 |
+37 |
|
U16_x64 的实现 |
+308 |
|
宏定义 |
LDBL_MAX_10_EXP |
|
C11 的规定 |
+37 |
|
U16_x64 的实现 |
+4932 |
- 可表示的最大有限浮点数(
)
|
宏定义 |
FLT_MAX |
|
C11 的规定 |
1E+37 |
|
U16_x64 的实现 |
3.E+38 |
|
宏定义 |
DBL_MAX |
|
C11 的规定 |
1E+37 |
|
U16_x64 的实现 |
1.E+308 |
|
宏定义 |
LDBL_MAX |
|
C11 的规定 |
1E+37 |
|
U16_x64 的实现 |
1.E+4932 |
- 1 与大于 1 的最小可表示值之间的差值(
)
|
宏定义 |
FLT_EPSILON |
|
C11 的规定 |
1E-5 |
|
U16_x64 的实现 |
1.E-07 |
|
宏定义 |
DBL_EPSILON |
|
C11 的规定 |
1E-9 |
|
U16_x64 的实现 |
2.E-16 |
|
宏定义 |
LDBL_EPSILON |
|
C11 的规定 |
1E-9 |
|
U16_x64 的实现 |
1.084202E-19 |
- 最小的规范化正浮点数(
)
|
宏定义 |
FLT_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
1.E-38 |
|
宏定义 |
DBL_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
2.E-308 |
|
宏定义 |
LDBL_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
3.E-4932 |
- 最小正浮点数
|
宏定义 |
FLT_TRUE_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
1.E-45 |
|
宏定义 |
DBL_TRUE_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
4.E-324 |
|
宏定义 |
LDBL_TRUE_MIN |
|
C11 的规定 |
1E-37 |
|
U16_x64 的实现 |
3.E-4951 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/124953.html