Fortran Coder

查看: 8312|回复: 6
打印 上一主题 下一主题

[微积分] 用泰勒展开式计算E**x的值

[复制链接]

23

帖子

9

主题

0

精华

熟手

F 币
125 元
贡献
79 点
跳转到指定楼层
楼主
发表于 2014-11-26 08:53:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家好,请教的问题如下:
{e}^{x}=1+x+\frac{{x}^{2}}{2!}+\frac{{x}^{3}}{3!}+\frac{{x}^{4}}{4!}+...
计算上面的问题,我写的代码如下:

[Fortran] 纯文本查看 复制代码
      PROGRAM MAIN
      IMPLICIT NONE
      REAL X,S
      INTEGER*8 N
      INTEGER I
      INTEGER,EXTERNAL :: FACT
      READ(*,*) N
      READ(*,*) X
      S=0
      DO 10 I=2,N
      S=S+X**I/FACT(I)
      WRITE(*,*) I,FACT(I),X**I,
10     CONTINUE
      S=S+X+1
      WRITE(*,*) S
      END
      RECURSIVE INTEGER FUNCTION FACT(N) RESULT(ANS)
      IMPLICIT NONE
      INTEGER,INTENT(IN) :: N
      IF(N>1) THEN
      ANS=N*FACT(N-1)
      RETURN
      END IF
      ANS=1
      RETURN
      END


出现的问题是:计算中fact(阶乘项)的值出现溢出的情况,这种问题如何解决呢?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
7#
发表于 2014-11-29 10:53:58 | 只看该作者
我也早就看出来沙发是坛主了

8

帖子

0

主题

0

精华

入门

F 币
79 元
贡献
36 点
6#
发表于 2014-11-27 09:45:30 | 只看该作者
楚香饭 发表于 2014-11-26 22:08
幸会幸会,我就是坛主。咳,不好意思老用管理员账号....让人看了有点疏远的感觉,所以有个普通号 ...

你这普通账号也能看出来是你啊,基本上所有的帖子都是你在解决问题(当然也有很多版主在解决大家的问题),我只是来打打酱油的

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

5#
发表于 2014-11-26 22:08:23 | 只看该作者
爷且无辜 发表于 2014-11-26 16:42
楼主这个代码运行速度不如“楚香饭”(这个人貌似是坛主??!!)这个代码,楼主这个代码对之前计算结果的 ...

幸会幸会,我就是坛主。咳,不好意思老用管理员账号....让人看了有点疏远的感觉,所以有个普通号

8

帖子

0

主题

0

精华

入门

F 币
79 元
贡献
36 点
地板
发表于 2014-11-26 16:42:39 | 只看该作者
楼主这个代码运行速度不如“楚香饭”(这个人貌似是坛主??!!)这个代码,楼主这个代码对之前计算结果的利用率不高,可以说直接没利用,而楚香饭这个每次计算下一项的值的时候都用到了之前的值,而不是从头计算,计算量更小,速度更快

23

帖子

9

主题

0

精华

熟手

F 币
125 元
贡献
79 点
板凳
 楼主| 发表于 2014-11-26 09:58:17 | 只看该作者
楚香饭 发表于 2014-11-26 09:19
分子分母都趋于无穷大,分母具有更高阶的无穷大,这种时候你可以用一个临时变量来取其商。例如下面代码的 t ...

多谢 多谢了!!

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-11-26 09:19:13 | 只看该作者
本帖最后由 楚香饭 于 2014-11-26 09:28 编辑

分子分母都趋于无穷大,分母具有更高阶的无穷大,这种时候你可以用一个临时变量来取其商。例如下面代码的 t,同时还可以避免 x**i 和阶乘。
[Fortran] 纯文本查看 复制代码
Program main
  Implicit None
  real x,s,t
  integer n
  integer i
  read(*,*) n
  read(*,*) x  
  t = x
  s = x + 1
  Do i=2,n
    t = t*x/i
    s = s + t
  End Do  
  write(*,*) s
End Program main
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 02:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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