n/2=1+1/3+1/3*2/5+1/3*2/5*3/7....,
当最后一项小于输入值的时候,输出n
#include "stdio.h"
double pi(double eps)
{int i=1 ,j=3;
double t=1.0,p=1.0,pi;
while(t>=eps)
{t=t*i/j;
p+=t;
i++;
j+=2;
}
pi=p*2;
return pi;
}
main()
{double p,eps;
scanf("%lf",&eps);
p=pi(eps);
printf("%lf",p);
}
当输入0.00000001,输出3.1415926436,正常!
问题是:比如我在输入0.0000000000000000000000000000000000000001的时候,输出的结果是35.134971,请问这是为什么?
本人测试没有问题 请LZ正解
大概数了下 LZ有45个左右的0 本人从40个开始测试 本人往上测试11个发现没有问题 (如果LZ截图无误的话有可能是你电脑机器本身的问题)
#include "stdio.h"
double pi(double eps)
{int i=1 ,j=3;
double t=1.0,p=1.0,pi;
while(t>=eps)
{t=t*i/j;
p+=t;
i++;
j+=2;
}
pi=p*2;
return pi;
}
main()
{double p,eps;
while(1)
{
scanf("%lf",&eps);
p=pi(eps);
printf("%lf",p);
printf("\n");
}
}
本人测试没有出现LZ所出现的问题