C 库 - <float.h>

C 库 float.h 头文件包含一组与浮点值相关的各种平台相关常量。这些常量由 ANSI C 提出。浮点宏允许开发人员创建更易于移植的程序。在了解所有常量之前,最好先了解一下浮点数,它由以下四个元素组成:

Sr.No. 组件 &组件描述
1

S

符号 ( +/- )

2

b

指数表示的底数或基数,二进制为 2,十进制为 10,十六进制为 16,依此类推……

3

e

指数,介于最小值 emin 和最大值之间的整数emax.

4

p

精度是指有效数字中以 b 为底的位数。

基于以上四个组成部分,浮点数的值如下:

floating-point = ( S ) p x be

or

floating-point = (+/-) precision x baseexponent

库宏

以下值是特定于实现的,并使用 #define 指令定义,但这些值不得低于此处给出的值。请注意,在所有情况下,FLT 指的是 float 类型,DBL 指的是 double 类型,LDBL 指的是 long double 类型。

序号 宏 &说明
1

FLT_ROUNDS

定义浮点加法的舍入模式,它可以是以下任意值 -

  • -1 - 无法确定
  • 0 - 向零舍入
  • 1 - 向最接近的舍入
  • 2 - 向正无穷大舍入
  • 3 - 向负无穷大舍入
2

FLT_RADIX 2

定义指数的基数表示。以 2 为基数,以 10 为基数,以 16 为基数,以 10 为基数,都是十六进制。

3

FLT_MANT_DIG

DBL_MANT_DIG

LDBL_MANT_DIG

这些宏定义了数字的位数(以 FLT_RADIX 为基数)。

4

FLT_DIG 6

DBL_DIG 10

LDBL_DIG 10

这些宏定义了舍入后可以不变的最大十进制位数(以 10 为基数)。

5

FLT_MIN_EXP

DBL_MIN_EXP

LDBL_MIN_EXP

这些宏定义了以 FLT_RADIX 为底数的指数的最小负整数值。

6

FLT_MIN_10_EXP -37

DBL_MIN_10_EXP -37

LDBL_MIN_10_EXP -37

这些宏定义了以 FLT_RADIX 为底数的指数的最小负整数值10.

7

FLT_MAX_EXP

DBL_MAX_EXP

LDBL_MAX_EXP

这些宏定义了以 FLT_RADIX 为底数的指数的最大整数值。

8

FLT_MAX_10_EXP +37

DBL_MAX_10_EXP +37

LDBL_MAX_10_EXP +37

这些宏定义了以以 10 为基数。

9

FLT_MAX 1E+37

DBL_MAX 1E+37

LDBL_MAX 1E+37

这些宏定义最大有限浮点值。

10

FLT_EPSILON 1E-5

DBL_EPSILON 1E-9

LDBL_EPSILON 1E-9

这些宏定义可表示的最低有效数字。

11

FLT_MIN 1E-37

DBL_MIN 1E-37

LDBL_MIN 1E-37

这些宏定义了最小浮点值。

示例 1

以下是 C 库头文件 float.h,用于定义几个宏(浮点型)常量的值。

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

int main () {
   printf("The maximum value of float = %.10e", FLT_MAX);
   printf("The minimum value of float = %.10e", FLT_MIN);

   printf("The number of digits in the number = %.10d", FLT_MANT_DIG);
}

输出

执行上述代码后,我们得到以下结果 -

The maximum value of float = 3.4028234664e+38
The minimum value of float = 1.1754943508e-38
The number of digits in the number = 7.2996655210e-312

示例 2

以下是 C 库头文件 float.h,用于定义一些宏(浮点型)常量的值。

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

int main () {
   printf("The maximum value of float = %.10e", FLT_MAX);
   printf("The minimum value of float = %.10e", FLT_MIN);

   printf("The number of digits in the number = %.10d", FLT_MANT_DIG);
}

输出

执行上述代码后,我们得到以下结果 -

The maximum value of float = 3.4028234664e+38
The minimum value of float = 1.1754943508e-38
The number of digits in the number = 1.1754943508e-38

示例 3

下面的程序使用宏 (FLT_RADIX) 来测量底数指数的值。

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

int main() {
   // 获取 FLT_RADIX 的值
   int radix = FLT_RADIX;
   printf("The base (radix) of the exponent representation: %d", radix);
   return 0;
}

输出

上述代码产生以下输出 -

The base (radix) of the exponent representation: 2

示例 4

这里,我们定义了三个不同的宏,分别是 FLT_MAX、DBL_MAX 和 LDBL_MAX,它们根据香蕉的长度计算堆叠到珠穆朗玛峰高度所需的香蕉数量。

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

int main() {
    // 高度(英寸)
    double heightOfEverestInFeet = 29031.7;
    double heightOfEverestInInches = heightOfEverestInFeet * 12.0;
    
    // 香蕉长度(FLT_MAX、DBL_MAX 和 LDBL_MAX 均约为 1E+37)
    double banayanLength = 1E+37;
    
    // 计算所需香蕉的数量
    double numBanayan = heightOfEverestInInches / banayanLength;
    
    printf("Height of Mount Everest: %.2lf feet", heightOfEverestInFeet);
    printf("Length of a magical banayan: %.2lf inches", banayanLength);
    printf("Number of bananas needed to reach the summit: %.2e banayan", numBanayan);
    
    return 0;
}

输出

执行上述代码后,我们得到以下输出 -

Height of Mount Everest: 29031.70 feet
Length of a magical banayan: 9999999999999999538762658202121142272.00 inches
Number of bananas needed to reach the summit: 3.48e-32 banayan