鱼C论坛

 找回密码
 立即注册
查看: 1537|回复: 4

计算e的x次方输出不了目标的的值

[复制链接]
发表于 2020-11-11 13:12:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学校oj系统上的题目,要求利用公式e^x=1+x/1!+x^2/2!+...+x^n/n!计算e的x次方,计算到项x^n/n!的绝对值小于10的-12次方停止计算,保留12位小数。
输入1的时候应该输出2.718281828459,但程序输出的是2.718281828458,要怎么解决。求教,谢谢。
  1. #include <stdio.h>
  2. double sta(double x);
  3. double sq(double z, double n);
  4. int main()
  5. {
  6.         double  n;
  7.         double a;
  8.         double e = 1.0;
  9.         while (scanf("%lf", &n) == 1) {
  10.                 for (a = 1.0; (sq(n, a) / sta(a)) >= 1e-12; a += 1.0)
  11.                         e += (sq(n, a)) / (sta(a));
  12.         }
  13.         printf("%.12lf", e);
  14.         return 0;
  15. }
  16. double sta(double x)
  17. {
  18.         double s = 1.0;
  19.         for (x; x >1; x--)
  20.                 s *= x;
  21.         return s;
  22. }
  23. double sq(double z, double n)
  24. {
  25.         double i;
  26.         double sum = 1.0;
  27.         if (n >= 1)
  28.                 for (i = 1; i < n; i++)
  29.                         sum *= z;
  30.         else sum = 1.0;
  31.         return sum;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-11 13:50:39 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-11 14:00 编辑
  1. #include <stdio.h>

  2. double exp(double n)
  3. {
  4.         unsigned long long d = 1e12 , i , j                                   ;
  5.         double e                                                              ;
  6.         for(i = 1 , e = 1.0 , j = 1 ; i < d ; i *= j , j ++) e += 1.0 / i / j ;
  7.         return e * n                                                          ;
  8. }

  9. main(void)
  10. {
  11.         double d                                                              ;
  12.         scanf("%lf" , & d)                                                    ;
  13.         printf("%.12lf\n" , exp(d))                                           ;
  14. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o exp exp.c

  2. D:\0002.Exercise\C>exp
  3. 1
  4. 2.718281828459

  5. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-11 18:52:44 | 显示全部楼层
jackz007 发表于 2020-11-11 13:50
编译、运行实况:

代码运行后,只有输入1时,才正确,输入2时就变成了5.4365365918,输入3时又输出8.154845485377,还是没有输出目标的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 18:56:14 From FishC Mobile | 显示全部楼层
gegege~~~ 发表于 2020-11-11 18:52
代码运行后,只有输入1时,才正确,输入2时就变成了5.4365365918,输入3时又输出8.154845485377,还是没 ...

        那输入 2 和 3 的时候应该等于多少呢,你有正确答案吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-11 19:34:19 From FishC Mobile | 显示全部楼层
输入2时应该是7.389056098931,输入3时应该是20.085536923188
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-9 20:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表