C在不同环境中使用的浮动范围是多少?

时间:2013-09-02 05:20:03

标签: c floating-point

float数据类型的最小范围是1E-37到1E + 37。浮标的最大范围是多少?

4 个答案:

答案 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)

没有最大范围。允许实施任意慷慨。浮点实现的唯一限制是:

  1. float的可能值集合是double的可能值集的子集;

  2. double的可能值集合是long double的可能值集的子集;

  3. float(以及doublelong double)的所有可能值的集合必须包含至少一个有限数≥1E37和一个有限数≤-1E37;

  4. float(以及doublelong double)的所有可能值的集合必须包含至少一个不为零的正数≤1E-37; < / p>

  5. float的所有可能值的集合必须包括至少一个正数≤1.0+ 1.0E-5,大于1.0;而double(以及long double)的所有可能值的集合必须包含至少一个正数≤1.0+ 1.0E-9,大于1.0。

  6. 最后一项要求并不严格要求doublefloat更精确,因为float 也可以包含相同的值。

    但是,实现可以定义宏__STDC_IEC_559__。如果是这样,它需要承诺实施IEC-60559标准(实际上是IEEE-754);这一承诺包括要求float精确地为IEC-60559单精度(32位)格式,double精确地为IEC-60559双精度(64位)格式。 long double不需要是IEC-60559格式,但如上所述,它必须是double(或完全相同的类型)的超集。