簡體   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