C语言中的Pi
所以我试图得到c(IDE=DEV c++)中pi的值,所以我在这里使用了long double,它给我的结果是一组完整的零 这是节目单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中声明过了,当我试图用这段代码获取值
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;
}