76

我知道各种数据类型的大小可以根据我所在的系统而改变。

我使用 XP 32 位,并使用sizeof()C++ 中的运算符,看起来long double是 12 字节,double是 8。

但是,大多数主要来源都指出它long double是 8 个字节,因此范围与 a 相同double

我怎么有 12 个字节?如果long double确实是12个字节,这不是也扩展了值的范围吗?或者长签名仅在值超出双精度范围时才使用(编译器数字),因此超出 8 个字节?

4

3 回答 3

73

引用维基百科

在 x86 架构上,大多数编译器将 long double 实现为该硬件支持的 80 位扩展精度类型(有时存储为 12 或 16 字节以维护数据结构。

编译器还可以将 long double 用于 128 位四倍精度格式,目前在软件中实现。

换句话说,是的, along double 可能能够存储比 a 更大范围的值double。但这完全取决于编译器。

于 2010-08-11T00:58:50.957 回答
15

对于 x64 上的现代编译器,Clang 和 GCC 使用 16 字节双精度,long double而 VC++ 使用 8 字节双精度。换句话说,使用 Clang 和 GCC 你可以获得更高的精度 double 但对于 VC++long doubledouble. 现代 x86 CPU 确实支持这些 16 字节双精度,所以我认为 Clang 和 GCC 做的是正确的事情,并允许您使用高级语言原语访问低级硬件功能。

于 2018-02-23T05:41:08.243 回答
4

数字的标准字节大小是所有平台上保证的最小大小。它们在某些系统上可能更大,但它们永远不会更小。

于 2010-08-11T01:12:28.900 回答