gegege~~~ 发表于 2020-11-11 13:12:32

计算e的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,要怎么解决。求教,谢谢。
#include <stdio.h>
double sta(double x);
double sq(double z, double n);
int main()
{
        doublen;
        double a;
        double e = 1.0;
        while (scanf("%lf", &n) == 1) {
                for (a = 1.0; (sq(n, a) / sta(a)) >= 1e-12; a += 1.0)
                        e += (sq(n, a)) / (sta(a));
        }
        printf("%.12lf", e);
        return 0;
}
double sta(double x)
{
        double s = 1.0;
        for (x; x >1; x--)
                s *= x;
        return s;
}
double sq(double z, double n)
{
        double i;
        double sum = 1.0;
        if (n >= 1)
                for (i = 1; i < n; i++)
                        sum *= z;
        else sum = 1.0;
        return sum;
}

jackz007 发表于 2020-11-11 13:50:39

本帖最后由 jackz007 于 2020-11-11 14:00 编辑

#include <stdio.h>

double exp(double n)
{
      unsigned long long d = 1e12 , i , j                                 ;
      double e                                                            ;
      for(i = 1 , e = 1.0 , j = 1 ; i < d ; i *= j , j ++) e += 1.0 / i / j ;
      return e * n                                                          ;
}

main(void)
{
      double d                                                            ;
      scanf("%lf" , & d)                                                    ;
      printf("%.12lf\n" , exp(d))                                           ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o exp exp.c

D:\0002.Exercise\C>exp
1
2.718281828459

D:\0002.Exercise\C>

gegege~~~ 发表于 2020-11-11 18:52:44

jackz007 发表于 2020-11-11 13:50
编译、运行实况:

代码运行后,只有输入1时,才正确,输入2时就变成了5.4365365918,输入3时又输出8.154845485377,还是没有输出目标的值。

jackz007 发表于 2020-11-11 18:56:14

gegege~~~ 发表于 2020-11-11 18:52
代码运行后,只有输入1时,才正确,输入2时就变成了5.4365365918,输入3时又输出8.154845485377,还是没 ...

      那输入 2 和 3 的时候应该等于多少呢,你有正确答案吗?

gegege~~~ 发表于 2020-11-11 19:34:19

输入2时应该是7.389056098931,输入3时应该是20.085536923188
页: [1]
查看完整版本: 计算e的x次方输出不了目标的的值