为什么一组数据会是负数,求解答

img


#include<stdio.h>
void qiuhe()
{ int i,n,shang,xia;
double sum,dan;
shang=1;
xia=1;
sum=1;
scanf("%d",&n);
for(i=1;i<n+1;i++)
{
shang*=i;
xia*=(i2+1);
dan=shang
1.0/xia;
sum+=dan;

 }
  printf("%.10lf",sum);

}
int main(void)
{
qiuhe();
return 0;
}然后我吧shang xia改成double 就过了是什么原因?求详细解答,谢谢

不是double类型在计算除法的时候可能会造成数据丢失比如3/2不是double输入1

img


1️⃣首先看到这个分数,就应该想到要用double类型来实现
2️⃣然后:我把shang xia改成double 就过了是什么原因?
数据精度问题,是因为你分子分母如果是整数,进行相除的时候会默认向下取整,也就是的到的值就是整数,不准确。

希望对题主有所帮助!可以的话,帮忙点个采纳!

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632