我知道各种数据类型的大小可能会根据我所在的系统而变化。
我使用XP 32位,在C++中使用sizeof()运算符,long double似乎是12字节,而double是8字节。
然而,大多数主要来源指出,long double是8字节,因此范围与double相同。
为什么我有12个字节?如果long double确实是12个字节,这不是也扩展了取值范围吗?或者仅当值超过双精度值的范围时才使用长签名(编译器数字),因此超过8个字节?
发布于 2010-08-11 08:58:51
引用Wikipedia
在x86体系结构上,大多数编译器将long double实现为该硬件支持的80位扩展精度类型(有时存储为12或16字节以维护数据结构。
和
编译器还可以将long double用于128位四倍精度格式,这目前是在软件中实现的。
换句话说,是的,与double相比,long double可能能够存储更大范围的值。但这完全取决于编译器。
发布于 2018-02-23 13:41:08
对于x64上的现代编译器,Clang和GCC在long double上使用16字节双精度,而VC++使用8字节双精度。换句话说,对于VC++,long double和double的精度是一样的,但是对于Clang和Clang,你可以得到更高的精度。现代的x86 CPU确实支持这些16字节的双CPU,所以我认为Clang和GCC正在做正确的事情,允许您使用高级语言原语访问低级硬件功能。
发布于 2010-08-11 09:12:29
数字的标准字节大小是所有平台上保证的最小大小。在某些系统上,它们可能更大,但永远不会更小。
https://stackoverflow.com/questions/3454576
复制相似问题