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

use*_*957 18 c c++

可能重复:
long double vs double

我是编程新手,我无法理解C和C++中long double和double之间的区别.我试图谷歌它但无法理解它并感到困惑.谁能请帮忙.

gre*_*ade 32

引用C++标准,§3.9.18:

有三种浮点类型: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 单精度数,可存储小数的7位十进制数.

同样在x86系统上,double长度为8个字节,可以存储IEEE 754 双精度格式的数字,该格式具有更大的范围并存储更精确的数字,大约15个十进制数字.在某些其他平台上,double可能不是8个字节长,并且可能确实与单精度相同float.

该标准仅要求long double至少与其一样精确double,因此一些编译器将简单地视为long double与它相同double.但是,在大多数x86芯片上,10位字节扩展精度格式 80位数可通过CPU的浮点单元获得,它提供比64位更高的精度,精度double约为21位小数.

有些编译器支持16字节(128位)IEEE 754 四倍精度数字格式,具有更精确的表示和更大的范围.

  • 因此,实际上,截至 2021 年,MSVC++ 2017 的“sizeof(long double)”计算值仍与“sizeof(double)”相同:8 个字节,无论是 32 位还是 64 位。( https://learn.microsoft.com/en-us/previous-versions/9cx8xs15(v=vs.140)?redirectedfrom=MSDN ) (2认同)

hma*_*tar 12

这取决于您的编译器,但以下代码可以显示每种类型所需的字节数:

int main() { 
    printf("%d\n", sizeof(double)); // some compilers print 8
    printf("%d\n", sizeof(long double)); // some compilers print 16
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 有哪些编译器执行哪些操作的列表吗? (2认同)

alk*_*alk 5

long <type>数据类型可以保持较大的值,则一个<type>数据类型,这取决于编译器.