[英]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.