Cpp*_*ner 61 c++ floating-point long-double
我知道各种数据类型的大小可能会根据我所使用的系统而改变.我使用XP 32位,并在C++中使用sizeof()运算符,似乎long double是12个字节,double是8.
但是,大多数主要消息来源都表示long double是8个字节,因此范围与double相同.
为什么我有12个字节?如果long double确实是12个字节,那么这也不会扩展值的范围吗?或者,当值超出double的范围时,仅使用长签名(编译器数字),因此,超出8个字节?
谢谢.
Bor*_*lid 60
引自维基百科:
在x86架构上,大多数编译器将long double实现为该硬件支持的80位扩展精度类型(有时存储为12或16字节以维护数据结构.
和
编译器也可以使用long double作为128位四倍精度格式,目前在软件中实现.
换句话说,是的,a long double 可以存储比a更大范围的值double.但这完全取决于编译器.
对于x64上的现代编译器,Clang和GCC使用16字节的double作为long doubleVC ++使用8字节的double。换句话说,使用Clang和GCC可以获得更高的精度,但是VC ++ long double与相同double。现代的x86 CPU确实支持这些16字节的双精度,因此我认为Clang和GCC做的正确,并允许您使用高级语言基元访问较低级别的硬件功能。