可能重复:
long double vs double
我是编程新手,我无法理解C和C ++中long double和double之间的区别。我试图谷歌它但无法理解它并感到困惑。任何人都可以帮忙。?
答案 0 :(得分:26)
引用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 3的数字,大约只有1.4×10 -6。它是一个IEEE 754 single-precision number,它存储了一个小数的7位小数。
同样在x86系统上,double
长度为8个字节,可以在IEEE 754 double-precision format中存储数字,它具有更大的范围并存储更精确的数字,大约15个十进制数字。在其他一些平台上,double
可能不是8个字节长,可能确实与单精度float
相同。
标准只要求long double
至少与double
一样精确,因此有些编制者只会将long double
视为与double
相同。但是,在大多数x86芯片上,10字节extended precision format 80位数可通过CPU的浮点单元获得,它提供比64位double
更高的精度,大约21个十进制数字精确度。
有些编译器支持16字节(128位)IEEE 754 quadruple precision number format,具有更精确的表示和更大的范围。
答案 1 :(得分:9)
这取决于您的编译器,但以下代码可以显示每种类型所需的字节数:
int main() {
printf("%d\n", sizeof(double)); // some compilers print 8
printf("%d\n", sizeof(long double)); // some compilers print 16
return 0;
}
答案 2 :(得分:5)
long <type>
数据类型可能包含更大的值,然后是<type>
数据类型,具体取决于编译器。