• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C语言,计算结果不正确的两个函数,求分析

yjjjj 2018-01-05 浏览量:1164
  double fun(int n)
     {
        double t,sn=1.0;
        int i,j;
        for(i=1;i<=n;i++)
           {
             t=1.0;
             for(j=1;j<=i;j++)
               t*=j;
             sn+=1.0/t;
           }
return sn;

      }

其功能是计算并输出多项式Sn=1+1/1!+1/2!+1/3!+1/4!+....+1/n!;的值

为什么下面这个函数不行

double fun(int n)
{
   double f=0.0,t=1.0;int i;
   for(i=1;i<n;i++)
   {
    t*=(1/i);
    f+=t;
   }
   return f; 
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 注意两个函数的区别:第一个函数有两个for嵌套,第二个只有一个for循环,第二个函数中,每乘一个数,就加一次,而需求是:算好阶乘后,再相加,出来的结果当然不一样。

    注意运算的顺序。

    • 发布于 2018-01-05
    • 举报
    • 评论 2
    • 0
    • 0
yjjjj 回复了 赤心木zqw:是因为第二个函数1/i算出来的是0导致不能累加的 回复
赤心木zqw 回复了 yjjjj:i和t的初始值都是1,算出来不是0。 回复

其他答案 数量:11
  • 第二个根本不是阶乘啊!
    • 发布于2018-01-05
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :RJK0391DPA-WS#J53非原厂标准型号。具体资料原厂和供应商平台都没有查到,链接是官网链接 回复

  • 你第二个for循环写的是 i < n,这就这能算到 1/(n-1)!,应该把它改成 i <= n
    • 发布于2018-01-05
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :AD8627AKSZ-REEL7无铅环保,卷装 跟 AD8627AKS含铅,管装或托盘,两者环保区别,产品功能一致,包装区别 回复

  • 第二个是求Sn=1/1+1/2!+1/3!+...+1/(n-1)!的值,楼主看看有啥不同。

    • 发布于2018-01-05
    • 举报
    • 评论 2
    • 0
    • 0
yjjjj 回复了 donatello :最主要的原因还是忽略了1/i的值为0导致结果不正确的 回复
电子老工程师 回复了  :这个PCB焊接端子,没有替代型号。 回复

  • 最主要的问题是
    i<=n
    误为
    i<n

    • 发布于2018-01-06
    • 举报
    • 评论 0
    • 0
    • 0

电子老工程师 回复了  :NCP21XQ102J03RA 村田 回复

  • 我知道了这i<=n确实是一个原因,再把下面的那个函数的1/i改成1.0/i就可以了。
    • 发布于2018-01-06
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :关于参数和产品说明等信息,都是在规格书文件中。没有其它文件说明产品信息。 回复

  • 每一个阶乘是一个循环,这个加法又是一个循环,所以,你的第二个函数明显不对 啊。
    • 发布于2018-01-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼主是好是对比两个函数的结果,看看差别是多大,就可以确定是加法的问题,还是运算 ! 的问题了。
    大约看了下,第二个函数的计算次数是不对的吧。
    • 发布于2018-01-07
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :端子物料,配套使用,不能替代。 回复

  • t*=(1/i);,i为int,精算精度会丢失,在i>1时,计算结果应该是0.
    • 发布于2018-01-08
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :https://asset.conrad.com/media10/add/160267/c1/-/en/001621897DS01/datasheet-1621897-viking-tech-csrv0207ftdt1201-metal-film-resistor-12-k-smd-0207-1-w-1-50-pagesmin-1-pcs.pdf 回复

  • 这些计算结果都是小数,而使用1/i后结果都是0了。

    可以使用1.0f/(double)i

    • 发布于2018-01-11
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :前缀代表符合汽车级,具备PPAP功能 回复

  • 第二个只有一层循环,两个程序实现上是一个逻辑,对比下就清楚了
    • 发布于2018-01-15
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :是的 外形符合俗称工字电感。 回复

相关问题

问题达人换一批

C语言,计算结果不正确的两个函数,求分析