十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#include stdio.h
目前创新互联已为上1000家的企业提供了网站建设、域名、网页空间、网站托管、服务器托管、企业网站设计、韶山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
#include math.h
int main()
{
double sign = 1.0;
double sum = 0.0;
int n;
printf("请输入循环次数:n = ");
scanf("%d", n);
for(int i=1; in; i=i+2)
{
sum = sum + sign / i;
sign = ( -1 ) * sign;
}
sum = 4 * sum;
printf("pi = %f\n",sum);
return 0;
}
函数里,i 没有赋初值。
去掉 函数里的 scanf("%d",e);因为你从主函数输入了。
int main(void){
double e,sum;
double funpi(double e);
scanf("%lf",e);
sum=funpi(e);
printf("pi=%.4f",sum*4);
return 0;}
double funpi(double e){
int fuhao=1,fenmu=1;
double i=3.0,sum=0; // i 初值3
//scanf("%d",e); //去掉输入
while (fabs(i)=e) {
i=fuhao*1.00/fenmu;
sum=sum+i; fuhao=-fuhao; fenmu=fenmu+2;
}return sum;
}
输入
0.0001
pi=3.1418
double能算几位??
肯定不能求出来啊~~
关键是精度~~double大到(或小到)一定的时候就不能精确了~~
一般算无理数需要用数组模拟基础运算~~分位或分组计算出答案~~
比如π,需要将公式转换成连乘的形式,用数组记录下各位各组计算产生的进位,再对下一位进行计算~~
e,需要将公式转换成连除的形式,用数组记录下各各组位计算产生的余数~~
公式推导和精度的确定需要用到泰勒公式和泰勒公式余项的计算。
让你见识一下世界上最强的π的计算程序!
///////////////////////////////////////////////////
#include stdio.h
long a=10000,b,c=2800,d,e,f[2801],g;
void main()
{
for(;b-c;) f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
////////////////////////////////////////////////////
三行代码算几千位~~