据我所知,浮点值的形式为n * 2 ^ e,带
我正在查看C ++标准,但未能找到标准指定的位置,或者要求将float,double和long double类型与其他(IEEE)标准中定义的范围相关联。我在3.9.1.8中找到的唯一相关内容是:
有三种浮点类型:float,double和long double。 double类型提供至少与float一样多的精度,long double类型提供至少与double一样多的精度。 float类型的值集是double类型的值集的子集; double类型的值集是long double类型的值集的子集。浮点类型的值表示是实现定义的。
并未提及该类型提供的最小范围。
标准在何处/如何指定浮点类型的(最小?)值范围?或者编译器可以自由选择任何值范围并且仍然符合标准吗?
答案 0 :(得分:6)
你引用的是关于C ++中浮点类型的所有保证。正如它所说,它们的表示是实现定义的。
但是,您可以使用std::numeric_limits
中的<limits>
模板查询有关限制的信息以及类型是否为IEC 559(IEEE 754)指定类型。
答案 1 :(得分:2)
标准没有指定此类内容,因为它们通常依赖于硬件并随时间而变化。虽然今天32位被认为是标准,但在10年内,以低于64位的速度做事可能看起来令人反感。
答案 2 :(得分:1)
就像整数数字限制一样,float
,double
和long double
的限制是从C标准导入的。常量FLT_MAX
,DBL_MAX
和LDBL_MAX
的最小值为1E+37
。对于*_MIN
个变体,最大值为1E-37
。