[英]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 double
与double
相同。 也许它比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.