c语言中double和longdouble数据类型有什么区别

我是编程新手。当我运行此代码时

#include <stdio.h>


int main()
{
    double  i = 6.4;
    double  *ptr = &i;
    printf("The valu of ptr is %un",ptr);
    ptr++;
    printf("The valu of ptr is %un",ptr);
    ptr++;
    printf("The valu of ptr is %un",ptr);
    

    return 0;
}

我得到这个输出:

The valu of ptr is 3904284976
The valu of ptr is 3904284984
The valu of ptr is 3904284992

由此很明显,双类型数据在我的内存中需要 8 个字节。

但是当我运行这段代码时

#include <stdio.h>


int main()
{
    long double  i = 6.4;
    long double  *ptr = &i;
    printf("The valu of ptr is %un",ptr);
    ptr++;
    printf("The valu of ptr is %un",ptr);
    ptr++;
    printf("The valu of ptr is %un",ptr);
    

    return 0;
}

我得到这个输出

The valu of ptr is 3519104768
The valu of ptr is 3519104784
The valu of ptr is 3519104800

由此可以看出,long double 数据类型在内存中需要 16 字节。

c中double和long double数据类型的主要区别是什么?

回答

c中double和long double数据类型的主要区别是什么?

引自 N1570 部分“6.2.5 类型”,这是 C 标准所说的:

共有三种真正的浮点类型,分别指定为 float、double 和 long double。float 类型的值集是 double 类型值集的子集;double 类型的值集是 long double 类型的值集的子集

这意味着它long double是一个浮点类型,其精度至少与浮点类型相同double

所以也许long double是一样的double。也许它的精度比double. C 标准只告诉我们long double不能比double.

这在标准的附录 E 中进一步扩展,其中 double 和 long double 的“最低要求”是相同的。

所以差异 - 如果有的话 - 取决于您的系统。

另请注意,系统上的 <float.h> 为您提供了有关系统上三种浮点类型的信息。为此,请参阅标准的“5.2.4.2.2 浮动类型 <float.h> 的特征” - 粘贴到此答案中的信息太多。

顺便提一句:

您可以打印大小,而不是使用指针值,例如:

printf("size of double %zun", sizeof(double));
printf("size of long double %zun", sizeof(long double));

如果大小不同,则很可能long double具有比 更好的精度double


以上是c语言中double和longdouble数据类型有什么区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>