C语言 运行结果不是理想值,错在哪里

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所出现的问题

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-10
我只想说 希望没有超过精度吧
第2个回答  2009-03-10
双精度一般是十六位

超了
相似回答