繁体   English   中英

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

[英]What is the difference between double and long double data type in c language

我是编程新手。 当我运行这段代码

#include <stdio.h>


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

    return 0;
}

我得到这个 output:

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

由此可以清楚地看出,我的 memory 中的 double 类型数据需要 8 个字节。

但是当我运行这段代码时

#include <stdio.h>


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

    return 0;
}

我得到这个 output

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

由此可见,memory 中的 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 doubledouble相同。 也许它比double具有更好的精度。 C 标准只告诉我们long double的精度不能比double差。

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

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

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

顺便提一句:

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

printf("size of double %zu\n", sizeof(double));
printf("size of long double %zu\n", sizeof(long double));

如果大小不同,那么很可能long double double更好的精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM