C ++标准在哪里定义float类型的值范围?

时间:2009-11-29 19:49:34

标签: c++ floating-point double standards range

据我所知,浮点值的形式为n * 2 ^ e,带

  • 浮动范围为n = - (2 ^ 23-1) - (2 ^ 23-1),e = -126 - 127,
  • 双范围为n = - (2 ^ 52-1) - (2 ^ 52-1),e = -1022 - 1023

我正在查看C ++标准,但未能找到标准指定的位置,或者要求将float,double和long double类型与其他(IEEE)标准中定义的范围相关联。我在3.9.1.8中找到的唯一相关内容是:

  

有三种浮点类型:float,double和long double。 double类型提供至少与float一样多的精度,long double类型提供至少与double一样多的精度。 float类型的值集是double类型的值集的子集; double类型的值集是long double类型的值集的子集。浮点类型的值表示是实现定义的。

并未提及该类型提供的最小范围。

标准在何处/如何指定浮点类型的(最小?)值范围?或者编译器可以自由选择任何值范围并且仍然符合标准吗?

3 个答案:

答案 0 :(得分:6)

你引用的是关于C ++中浮点类型的所有保证。正如它所说,它们的表示是实现定义的。

但是,您可以使用std::numeric_limits中的<limits>模板查询有关限制的信息以及类型是否为IEC 559(IEEE 754)指定类型。

答案 1 :(得分:2)

标准没有指定此类内容,因为它们通常依赖于硬件并随时间而变化。虽然今天32位被认为是标准,但在10年内,以低于64位的速度做事可能看起来令人反感。

答案 2 :(得分:1)

就像整数数字限制一样,floatdoublelong double的限制是从C标准导入的。常量FLT_MAXDBL_MAXLDBL_MAX的最小值为1E+37。对于*_MIN个变体,最大值为1E-37