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 定义浮点加法的舍入模式,它可以是以下任意值 -
|
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