簡體   English   中英

Pi用C語言

[英]Pi in C language

所以我試圖獲取pi在c中的值(IDE = DEV C ++),所以我在其中使用了long double,結果是給我的是一個完整的零集,這里是程序

int main() 
{
    long double rootOf3;

    rootOf3 = (22.0/7.0);

    printf("%lf", rootOf3);
    system("pause");
    return 0;
}

之后,我發現pi的值在c中不精確,並且已經在math.h中聲明過,當我嘗試使用此代碼獲取值時

int main() 
{

    printf("%f", M_PI);
    printf("%e", M_PI);
    printf("%lf", M_PI);
    system("pause");
    return 0;
}

我得到這些價值

3.1415933.141593e+0003.141593Press any key to continue . . .

所以我的問題

1)第一個程序中的錯誤是什么,我可以使用長雙精度值使用上述代碼獲取pi的值
2)C中的pi值不正確是真的嗎?為什么我沒有得到math.h中分配的整個pi值

謝謝

要打印long double ,請使用"%Lf" long double使用"%lf"會導致未定義的行為。

#include <stdio.h>

int main() 
{
   long double pi = 22.0/7.0;
   printf("%Lf\n", pi);
   printf("%lf\n", pi);
   return 0;
}

輸出:

3.142857
0.000000

更新,以回應OP的評論

很難看到使用printf的默認設置,使用floatdoublelong double表示數字的精度如何。 通過使用在小數點后打印更多數字的格式,差異將更加清晰。

程序:

#include <stdio.h>

void test1()
{
   float pi = 22.0f/7.0;
   printf("=== float ================\n");
   printf("%.25lf\n", pi);
   printf("%lf\n", pi);
}

void test2()
{
   double pi = 22.0/7.0;
   printf("=== double ===============\n");
   printf("%.25lf\n", pi);
   printf("%lf\n", pi);
}

void test3()
{
   long double pi = 22.0L/7.0;
   printf("=== long double ==========\n");
   printf("%.25Lf\n", pi);
   printf("%Lf\n", pi);
}

int main(void)
{
   test1();
   test2();
   test3();
   return 0;
}

輸出:

=== float ================
3.1428570747375488281250000
3.142857
=== double ===============
3.1428571428571427937015414
3.142857
=== long double ==========
3.1428571428571428572357888
3.142857

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM