Pi语言C语言

时间:2015-09-26 05:55:01

标签: c floating-point pi

所以我试图在c中获得pi的值(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)第一个程序中的错误是什么,我可以使用上面的代码使用long double来获得pi的值   2)是否真的在c中pi的值不准确?为什么我没有得到math.h中指定的整个pi值

感谢

1 个答案:

答案 0 :(得分:3)

要打印long double,请使用"%Lf"。对"%lf"使用long double会导致未定义的行为。

#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的评论

使用float中的默认设置,使用doublelong doubleprintf很难看出数字的准确程度。通过使用在小数点后打印更多数字的格式,差异将更加清晰。

程序:

#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