程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

C 语言的浮点特征

balukai 2025-02-08 10:01:53 文章精选 5 ℃

C 语言中的浮点数类型的特征由描述浮点数表示的以下模型定义:

浮点模型

对于 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.402823E+38

宏定义

DBL_MAX

C11 的规定

1E+37

U16_x64 的实现

1.797693E+308

宏定义

LDBL_MAX

C11 的规定

1E+37

U16_x64 的实现

1.189731E+4932

  • 1 与大于 1 的最小可表示值之间的差值(

宏定义

FLT_EPSILON

C11 的规定

1E-5

U16_x64 的实现

1.192093E-07

宏定义

DBL_EPSILON

C11 的规定

1E-9

U16_x64 的实现

2.220446E-16

宏定义

LDBL_EPSILON

C11 的规定

1E-9

U16_x64 的实现

1.084202E-19

  • 最小的规范化正浮点数(

宏定义

FLT_MIN

C11 的规定

1E-37

U16_x64 的实现

1.175494E-38

宏定义

DBL_MIN

C11 的规定

1E-37

U16_x64 的实现

2.225074E-308

宏定义

LDBL_MIN

C11 的规定

1E-37

U16_x64 的实现

3.362103E-4932

  • 最小正浮点数

宏定义

FLT_TRUE_MIN

C11 的规定

1E-37

U16_x64 的实现

1.401298E-45

宏定义

DBL_TRUE_MIN

C11 的规定

1E-37

U16_x64 的实现

4.940656E-324

宏定义

LDBL_TRUE_MIN

C11 的规定

1E-37

U16_x64 的实现

3.645200E-4951

#头条创作挑战赛##C语言每日小知识#

最近发表
标签列表