C Standard Library 简明教程

C Library - <float.h>

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

Sr.No.

Component & Component Description

1

S sign ( +/- )

2

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

3

e 指数,介于最小 emin 和最大 emax 之间的整数。

4

p 精度是有效数字中的基数 b 位数。

根据上述 4 个组成部分,浮点数将以以下形式显示其值 −

floating-point = ( S ) p x be

or

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

Library Macros

以下值特定于实现,并且通过 #define 指令定义,但是这些值可能不会低于此处所示的值。请注意,在所有实例中,FLT 指的是类型 float ,DBL 指的是 double ,而 LDBL 指的是 long double

Sr.No.

Macro & Description

1

FLT_ROUNDS 定义浮点加法的舍入模式,它可以具有以下任何值 −-1 - 不确定0 - 向零方向1 - 向最接近方向2 - 向正无穷大方向3 - 向负无穷大方向

2

FLT_RADIX 2 这定义了指数的基数基数表示形式。2 进制是二进制,10 进制是正常的十进制表示形式,16 进制是十六进制。

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 这些宏定义 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 这些宏定义最小浮点值。

Example 1

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

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

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

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

Output

执行上述代码后,我们将获得以下结果:

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

Example 2

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

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

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

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

Output

执行上述代码后,我们将获得以下结果:

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

Example 3

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

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

int main() {
   // Get the value of FLT_RADIX
   int radix = FLT_RADIX;
   printf("The base (radix) of the exponent representation: %d\n", radix);
   return 0;
}

Output

上述代码生成以下输出 -

The base (radix) of the exponent representation: 2

Example 4

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

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

int main() {
   // Heights in inches
   double heightOfEverestInFeet = 29031.7;
   double heightOfEverestInInches = heightOfEverestInFeet * 12.0;

   // Banana length (FLT_MAX, DBL_MAX, and LDBL_MAX are all approximately 1E+37)
   double banayanLength = 1E+37;

   // Calculate the number of bananas needed
   double numBanayan = heightOfEverestInInches / banayanLength;

   printf("Height of Mount Everest: %.2lf feet\n", heightOfEverestInFeet);
   printf("Length of a magical banayan: %.2lf inches\n", banayanLength);
   printf("Number of bananas needed to reach the summit: %.2e banayan\n", numBanayan);

   return 0;
}

Output

执行上述代码后,我们将获得以下输出:

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