C++标准在哪里定义了float类型的取值范围?
-
08-07-2019 - |
题
据我所知,浮点值的形式为 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 中发现的唯一相关内容是:
浮点类型共有三种:浮点型、双精度型和长双精度型。double 类型至少提供与 float 一样多的精度,而 long double 类型至少提供与 double 一样多的精度。float 类型的值集合是 double 类型的值集合的子集;double 类型的值集是 long double 类型的值集的子集。浮点类型的值表示是实现定义的。
并且没有提及该类型提供的最小范围。
标准在哪里/如何指定浮点类型的(最小值?)值范围?或者编译器可以自由选择任何值范围并且仍然符合标准吗?
解决方案
就像整数限制一样,限制为 float
, double
和 long double
是从 C 标准导入的。常数的最小值 FLT_MAX
, DBL_MAX
和 LDBL_MAX
是 1E+37
. 。他们的 *_MIN
变体的最大值是 1E-37
.
其他提示
您所引用的是 C++ 中浮点类型的所有保证。正如它所说,它们的表示是实现定义的。
不过,您可以使用以下命令查询有关限制以及类型是否为 IEC 559 (IEEE 754) 指定类型的信息: std::numeric_limits
中的模板 <limits>
.
该标准没有指定此类内容,因为它们通常依赖于硬件并随着时间的推移而变化。虽然如今 32 位已被视为标准,但 10 年后使用低于 64 位的语言可能会显得令人反感。
不隶属于 StackOverflow