C语言编译圆周率(为什么小数点后第六位就出错?求改正)

#include "stdio.h"
void main()
{
float pi=0.0f,j=-1.0,n=0.0;
do
{
j*=-1.0;
pi+=j/(2*n+1);
n++;
}
while(1.0/n>0.000001);
pi*=4;
printf("%0.21f",pi);
}

结果
3.141595125198......
(小数点后第六位就出错)

精度问题,首先你使用的float也就差不多这个精度,然后你判断的时候又用了0.000001,也是小数后6位,所以也就是这个结果了追问

就算用double 连第六位都是错误的 怎么更精准

追答

把0.000001改得更小试试看

追问

嗯。可以了谢了。知道怎么更高精度吗?

追答

long double 精度会更高些,再高的话,得自己写代码进行加减乘除的计算了,很麻烦

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-10
这是C语言自身的问题,在C语言中,float类型的精确度只有6位,也就是说六位之后就不能保证数据的正确了,如果需要更高的精度的话,可以是用double类型,不过也是有限的精确度,具体是几位忘了。。
第2个回答  2012-11-10
精度问题,你可以使用double,输出的时候用%lf

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网