使用double类型的数据进行浮点数运算和强制int类型数据转化为double类型的数据再进行运算是有差别的,在计算分数序列前N项和时;两个计算方式的结果在高精度范围内出现了明显的差异,
左边的是强制int类型的数据转化后计算的,可见在高精度时明显不准确,分数是不可能为负的,所以在编程中涉及到高精度的浮点数运算时;应该把涉及到的数据都设置为double类型,避免此类错误。附上题目及代码:
题目:
代码:(强制int 类型数据转化)
#include<stdio.h>
int main()
{
int k;
scanf("%d",&k);
int n=1,m=1,t;
double e,sum;
for(int i=0;i<k;i++)
{
t=n;
n=n+m;
m=t;
e=(double)n/m;
sum=sum+e;
printf("%.15lf\n",e);
}
printf("%.2lf",sum);
}
代码:(使用double类型数据计算)
#include<stdio.h>
int main()
{
int k;
scanf("%d",&k);
double n=1,m=1,t;
double e,sum;
for(int i=0;i<k;i++)
{
t=n;
n=n+m;
m=t;
e=n/m;
sum=sum+e;
printf("%.15lf\n",e);
}
printf("%.2lf",sum);
}