昨晚看到一个帖子是关于精度问题的,摘录如下:
int n=0;
float sn=1;
int X;
int sum=1;
printf("请输入阶成的次数:");
while(std::cin>>X)
for(n=1;n<=X;n++)
{
sn=1/fun(n);
sum=sum+sn;
printf("sn=%.15f\n,sum=%.15f\n",sn,sum);
}
return 0;
}
double fun(int n)
{
if(n==1)
return 1;
else
return
n=n*fun(n-1);
刚开始用%f输出,他说精度不够,到n=9以后就不变了,我拷入程序后果然如此。然后查阅书籍,发现%f的输出有效数字为7位;用%.15f输出,到n=32时也不发生变化了,才明白flota有效数字6-7位,而double有效数字15-16位。
所以也就不能再精确了。
后来,了解到有用string来处理大数据的,不过还没了解。