据我所知,浮点值的形式为 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, doublelong double 是从 C 标准导入的。常数的最小值 FLT_MAX, DBL_MAXLDBL_MAX1E+37. 。他们的 *_MIN 变体的最大值是 1E-37.

其他提示

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

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

该标准没有指定此类内容,因为它们通常依赖于硬件并随着时间的推移而变化。虽然如今 32 位已被视为标准,但 10 年后使用低于 64 位的语言可能会显得令人反感。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top