float数据类型的最小范围是1E-37到1E + 37。浮标的最大范围是多少?
答案 0 :(得分:2)
对于最大浮动类型的最大值,标准没有指定它们。标准指定的是“最大值的最小值”。
C11§5.2.4.2.2浮动类型的特征
<float.h>
第12节&amp; 13以下列表中给出的值应替换为常量表达式 实现定义的值大于或等于显示的值: - 最大可表示的有限浮点数,(1-b-p)bemax
FLT_MAX 1E+37
DBL_MAX 1E+37
LDBL_MAX 1E+37
FLT_MIN 1E-37
DBL_MIN 1E-37
LDBL_MIN 1E-37
答案 1 :(得分:2)
最重要的范围以及所有重要实际实施的范围是-INFINITY
到+INFINITY
。它实际发挥作用的一个地方是“可表示值的范围:for float
包括无穷大(在支持无穷大的实现上)是对于常量表达式超出其值的范围而违反的约束类型,但即使像1e9999999999999999999999999999
这样的东西也在IEEE单精度浮点值的范围内,因为范围是-INFINITY
到+INFINITY
。有一个缺陷报告/解释详细说明了这个问题在某个地方,但我没有方便的链接。
答案 2 :(得分:1)
没有一般的最大范围。 C标准仅指定至少必须覆盖哪个范围。编译器可以支持更大的范围。
但浮点类型IEEE 754有一个标准,详细说明了浮点平台的行为。通常采用此标准。
根据该标准,值为1.4E-45和3.4E38。
答案 3 :(得分:0)
没有最大范围。允许实施任意慷慨。浮点实现的唯一限制是:
float
的可能值集合是double
的可能值集的子集;
double
的可能值集合是long double
的可能值集的子集;
float
(以及double
和long double
)的所有可能值的集合必须包含至少一个有限数≥1E37和一个有限数≤-1E37;
float
(以及double
和long double
)的所有可能值的集合必须包含至少一个不为零的正数≤1E-37; < / p>
float
的所有可能值的集合必须包括至少一个正数≤1.0+ 1.0E-5,大于1.0;而double
(以及long double
)的所有可能值的集合必须包含至少一个正数≤1.0+ 1.0E-9,大于1.0。
最后一项要求并不严格要求double
比float
更精确,因为float
也可以包含相同的值。
但是,实现可以定义宏__STDC_IEC_559__
。如果是这样,它需要承诺实施IEC-60559标准(实际上是IEEE-754);这一承诺包括要求float
精确地为IEC-60559单精度(32位)格式,double
精确地为IEC-60559双精度(64位)格式。 long double
不需要是IEC-60559格式,但如上所述,它必须是double
(或完全相同的类型)的超集。