C語言 標準庫 <float.h>
c語言 標準庫 <float.h>
c 標準庫的 float.h 頭文件包含了一組與浮點值相關的依賴于平臺的常量。這些常量是由 ansi c 提出的,這讓程序更具有可移植性。在講解這些常量之前,最好先弄清楚浮點數(shù)是由下面四個元素組成的:
組件 | 組件描述 |
---|---|
s | 符號 ( +/- ) |
b | 指數(shù)表示的基數(shù),2 表示二進制,10 表示十進制,16 表示十六進制,等等... |
e | 指數(shù),一個介于最小值 emin 和最大值 emax 之間的整數(shù)。 |
p | 精度,基數(shù) b 的有效位數(shù) |
基于以上 4 個組成部分,一個浮點數(shù)的值如下:
floating-point = ( s ) p x b<sup>e</sup> 或 floating-point = (+/-) precision x base<sup>exponent</sup>
1. 庫宏
下面的值是特定實現(xiàn)的,且是通過 #define 指令來定義的,這些值都不得低于下邊所給出的值。請注意,所有的實例 flt 是指類型 float,dbl 是指類型 double,ldbl 是指類型 long double。
宏 | 描述 |
---|---|
flt_rounds | 定義浮點加法的舍入模式,它可以是下列任何一個值:
|
flt_radix 2 | 這個宏定義了指數(shù)表示的基數(shù)?;鶖?shù) 2 表示二進制,基數(shù) 10 表示十進制,基數(shù) 16 表示十六進制。 |
flt_mant_dig dbl_mant_dig ldbl_mant_dig | 這些宏定義了 flt_radix 基數(shù)中的位數(shù)。 |
flt_dig 6 dbl_dig 10 ldbl_dig 10 | 這些宏定義了舍入后不會改變表示的十進制數(shù)字的最大值(基數(shù) 10)。 |
flt_min_exp dbl_min_exp ldbl_min_exp | 這些宏定義了基數(shù)為 flt_radix 時的指數(shù)的最小負整數(shù)值。 |
flt_min_10_exp -37 dbl_min_10_exp -37 ldbl_min_10_exp -37 | 這些宏定義了基數(shù)為 10 時的指數(shù)的最小負整數(shù)值。 |
flt_max_exp dbl_max_exp ldbl_max_exp | 這些宏定義了基數(shù)為 flt_radix 時的指數(shù)的最大整數(shù)值。 |
flt_max_10_exp +37 dbl_max_10_exp +37 ldbl_max_10_exp +37 | 這些宏定義了基數(shù)為 10 時的指數(shù)的最大整數(shù)值。 |
flt_max 1e+37 dbl_max 1e+37 ldbl_max 1e+37 | 這些宏定義最大的有限浮點值。 |
flt_epsilon 1e-5 dbl_epsilon 1e-9 ldbl_epsilon 1e-9 | 這些宏定義了可表示的最小有效數(shù)字。 |
flt_min 1e-37 dbl_min 1e-37 ldbl_min 1e-37 | 這些宏定義了最小的浮點值。 |
2. 實例
下面的實例演示了 float.h 文件中定義的一些常量的使用。
#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 = %.10e\n", flt_mant_dig); }
讓我們編譯和運行上面的程序,這將產(chǎn)生下列結果:
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