<float.h> 是 C 标准库中的一个头文件,定义了浮点数类型的属性和常量。它提供了与浮点数运算相关的精度范围特殊值等信息,帮助程序员了解不同浮点类型的限制,并进行精确的浮点运算。


📖 目录

  1. <float.h> 简介
  2. 常用宏和常量
  3. 浮点类型的精度和范围
  4. 特殊浮点值
  5. 示例代码
  6. 参考资料

1️⃣ <float.h> 简介

  • 作用:提供浮点数的各种限制和属性,包括精度、范围、最小值、最大值等。
  • 浮点数类型:C 语言中的浮点数类型包括 floatdoublelong double<float.h> 提供了这些类型的相关信息。
  • 精度和范围<float.h> 包含了浮点数的最小值、最大值、精度等常数,方便开发者了解和控制浮点数运算的误差范围。

2️⃣ 常用宏和常量

<float.h> 中定义了多个宏常量,用于获取浮点类型的范围、精度等信息。以下是常用的一些宏和常量:

宏常量描述
FLT_MINfloat 类型能表示的最小正数(正数)
FLT_MAXfloat 类型能表示的最大数
FLT_EPSILONfloat 类型的机器精度(最小相对误差)
DBL_MINdouble 类型能表示的最小正数
DBL_MAXdouble 类型能表示的最大数
DBL_EPSILONdouble 类型的机器精度(最小相对误差)
LDBL_MINlong double 类型能表示的最小正数
LDBL_MAXlong double 类型能表示的最大数
LDBL_EPSILONlong double 类型的机器精度(最小相对误差)
FLT_DIGfloat 类型的有效数字的最大数量(即十进制数的有效位数)
DBL_DIGdouble 类型的有效数字的最大数量
LDBL_DIGlong double 类型的有效数字的最大数量
FLT_MIN_EXPfloat 类型的最小指数值(小于此值的数会被视为零)
DBL_MIN_EXPdouble 类型的最小指数值
LDBL_MIN_EXPlong double 类型的最小指数值
FLT_RADIX浮点数的基数(通常是 2 或 10)

3️⃣ 浮点类型的精度和范围

📌 float 类型

  • 最小值FLT_MIN:表示 float 类型的最小正数。
  • 最大值FLT_MAX:表示 float 类型能表示的最大数。
  • 机器精度FLT_EPSILON:表示 float 类型的机器精度(即两个不同的 float 值之间的最小间隔)。
  • 有效数字的最大数量FLT_DIG:表示 float 类型能表示的有效数字位数。

📌 double 类型

  • 最小值DBL_MIN:表示 double 类型的最小正数。
  • 最大值DBL_MAX:表示 double 类型能表示的最大数。
  • 机器精度DBL_EPSILON:表示 double 类型的机器精度。
  • 有效数字的最大数量DBL_DIG:表示 double 类型能表示的有效数字位数。

📌 long double 类型

  • 最小值LDBL_MIN:表示 long double 类型的最小正数。
  • 最大值LDBL_MAX:表示 long double 类型能表示的最大数。
  • 机器精度LDBL_EPSILON:表示 long double 类型的机器精度。
  • 有效数字的最大数量LDBL_DIG:表示 long double 类型能表示的有效数字位数。

4️⃣ 特殊浮点值

<float.h> 还定义了一些特殊的浮点数值,用于表示不常见的数值和错误情况。

宏常量描述
FLT_INFINITYfloat 类型的正无穷大
DBL_INFINITYdouble 类型的正无穷大
LDBL_INFINITYlong double 类型的正无穷大
FLT_NANfloat 类型的非数字(Not-a-Number)值
DBL_NANdouble 类型的非数字(Not-a-Number)值
LDBL_NANlong double 类型的非数字(Not-a-Number)值
FLT_DENORMfloat 类型的次正规化数
DBL_DENORMdouble 类型的次正规化数
LDBL_DENORMlong double 类型的次正规化数

5️⃣ 示例代码

📌 示例:使用 <float.h> 获取浮点类型的属性

#include <stdio.h>
#include <float.h>

int main() {
    printf("float 类型的最大值: %e\n", FLT_MAX);
    printf("float 类型的最小值: %e\n", FLT_MIN);
    printf("float 类型的机器精度: %e\n", FLT_EPSILON);
    printf("double 类型的最大值: %e\n", DBL_MAX);
    printf("long double 类型的最大值: %Le\n", LDBL_MAX);
    
    // 特殊值
    printf("float 类型的正无穷大: %e\n", FLT_INFINITY);
    printf("double 类型的非数字值: %e\n", DBL_NAN);
    
    return 0;
}

输出

float 类型的最大值: 3.402823e+38
float 类型的最小值: 1.175494e-38
float 类型的机器精度: 1.192093e-07
double 类型的最大值: 1.797693e+308
long double 类型的最大值: 1.189731e+4932
float 类型的正无穷大: inf
double 类型的非数字值: nan

🔹 解释

  • 使用 FLT_MAX 获取 float 类型的最大值,DBL_MAX 获取 double 类型的最大值。
  • 使用 FLT_INFINITY 输出浮点类型的正无穷大。

6️⃣ 参考资料

📖 C 标准库官方文档 – float.h
📖 GNU C Library – float.h
📖 ISO C 标准(PDF)


📌 总结

<float.h> 提供了对浮点数类型的详细支持,帮助开发者了解不同浮点类型的数值范围、精度、特殊值等。通过使用该头文件中的常量和宏,程序员可以有效地进行浮点数相关的数值分析和处理。💡