可能重复:
long double vs double
我是编程新手,我无法理解 C 和 C++ 中 long double 和 double 之间的区别。我试图谷歌它,但无法理解它并感到困惑。有人可以帮忙吗?
可能重复:
long double vs double
我是编程新手,我无法理解 C 和 C++ 中 long double 和 double 之间的区别。我试图谷歌它,但无法理解它并感到困惑。有人可以帮忙吗?
引用 C++ 标准,§3.9.1 ¶8:
有三种浮点类型:float、double 和 long double。double 类型提供的精度至少与 float 一样,long double 类型提供的精度至少与 double 一样。float 类型的值集是 double 类型的值集的子集;double 类型的值集是 long double 类型的值集的子集。浮点类型的值表示是实现定义的。整数和浮点类型统称为算术类型。标准模板 std::numeric_limits (18.3) 的特化应指定实现的每种算术类型的最大值和最小值。
也就是说,double
它的表示占用至少与 一样多的内存,float
并且long double
至少与 一样多double
。额外的内存用于更精确地表示数字。
在 x86 系统上,float
通常是 4 字节长,可以存储大约 3×10³⁸ 和 1.4×10⁻⁴⁵ 的数字。它是一个 IEEE 754单精度数,存储大约 7 个小数位的小数。
同样在 x86 系统上,double
长度为 8 个字节,可以以 IEEE 754双精度格式存储数字,该格式具有更大的范围并以更高的精度存储数字,大约 15 个十进制数字。在其他一些平台上,double
可能不是 8 字节长,并且可能确实与单精度相同float
。
该标准只要求它long double
至少与. 但是,在大多数 x86 芯片上,10 字节扩展精度格式的 80 位数字可通过 CPU 的浮点单元获得,它提供比 64 位更高的精度,精度约为 21 位十进制数字。double
long double
double
double
一些编译器改为支持 16 字节(128 位)IEEE 754四倍精度数字格式,具有更精确的表示和更大的范围。
这取决于您的编译器,但以下代码可以显示每种类型所需的字节数:
int main() {
printf("%d\n", sizeof(double)); // some compilers print 8
printf("%d\n", sizeof(long double)); // some compilers print 16
return 0;
}
取决于编译器,数据long <type>
类型可能比数据类型拥有更大的值。<type>