C和C ++中long double和double之间的区别

时间:2013-01-08 18:26:11

标签: c++ c

  

可能重复:
  long double vs double

我是编程新手,我无法理解C和C ++中long double和double之间的区别。我试图谷歌它但无法理解它并感到困惑。任何人都可以帮忙。?

3 个答案:

答案 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至少与floatlong 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>数据类型,具体取决于编译器。