#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