C语言中的Pi

C语言中的Pi,c,floating-point,pi,C,Floating Point,Pi,所以我试图得到c(IDE=DEV c++)中pi的值,所以我在这里使用了long double,它给我的结果是一组完整的零 这是节目单 int main() { long double rootOf3; rootOf3 = (22.0/7.0); printf("%lf", rootOf3); system("pause"); return 0; } 在那之后,我发现pi的值在c中并不精确,并且已经在math.h中声明过了,当我试图用这段代码获取值

所以我试图得到c(IDE=DEV c++)中pi的值,所以我在这里使用了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的值是不精确的,这是真的吗


感谢您打印
长双精度
,请使用
“%Lf”
。对
长双精度
使用
“%lf”
会导致未定义的行为

#include <stdio.h>

int main() 
{
   long double pi = 22.0/7.0;
   printf("%Lf\n", pi);
   printf("%lf\n", pi);
   return 0;
}
更新,回应OP的评论

使用
printf
中的默认设置,很难看到使用
float
double
long 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;
}

阅读更多关于。代码printf(“%e\n”,M_PI)等。。。阅读有关变量参数传递和将
float
参数提升为
double
的内容,从本质上讲,Pi永远不会精确计算。也可以阅读-。如果使用22/7近似值,则使用float以上的值是没有意义的。22/7与小数点后第三位的PI不同。您仍然缺少一个关键点:计算
22.0/7.0
仅以
double
精度完成。如果我使用长双精度,我是否应该获得更高的精度或更多的浮点数?如果它给我的值与正常值相同,它有什么用float@psraganvesh由于
22.0
7.0
都具有类型
double
,因此
22.0/7.0
的除法精度为
double
。使用
22.0升/7.0升
长双精度
进行除法。@psraganvesh,你如何判断?从
printf
的输出中?是的,我对编程和stackoverflow很陌生,如果这是一个愚蠢的错误,我很抱歉,是吗wrong@RSahu
#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;
}