Fortran Coder

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

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

[复制链接]

23

帖子

9

主题

0

精华

熟手

F 币
125 元
贡献
79 点
跳转到指定楼层
楼主
发表于 2014-11-26 08:53:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,请教的问题如下:

计算上面的问题,我写的代码如下:

[Fortran] 纯文本查看 复制代码
01      PROGRAM MAIN
02      IMPLICIT NONE
03      REAL X,S
04      INTEGER*8 N
05      INTEGER I
06      INTEGER,EXTERNAL :: FACT
07      READ(*,*) N
08      READ(*,*) X
09      S=0
10      DO 10 I=2,N
11      S=S+X**I/FACT(I)
12      WRITE(*,*) I,FACT(I),X**I,
1310     CONTINUE
14      S=S+X+1
15      WRITE(*,*) S
16      END
17      RECURSIVE INTEGER FUNCTION FACT(N) RESULT(ANS)
18      IMPLICIT NONE
19      INTEGER,INTENT(IN) :: N
20      IF(N>1) THEN
21      ANS=N*FACT(N-1)
22      RETURN
23      END IF
24      ANS=1
25      RETURN
26      END


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

742

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
726 元
贡献
371 点

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

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

分子分母都趋于无穷大,分母具有更高阶的无穷大,这种时候你可以用一个临时变量来取其商。例如下面代码的 t,同时还可以避免 x**i 和阶乘。
[Fortran] 纯文本查看 复制代码
01Program main
02  Implicit None
03  real x,s,t
04  integer n
05  integer i
06  read(*,*) n
07  read(*,*)
08  t = x
09  s = x + 1
10  Do i=2,n
11    t = t*x/i
12    s = s + t
13  End Do 
14  write(*,*) s
15End Program main

23

帖子

9

主题

0

精华

熟手

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

多谢 多谢了!!

8

帖子

0

主题

0

精华

入门

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

742

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
726 元
贡献
371 点

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

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

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

8

帖子

0

主题

0

精华

入门

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

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

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
7#
发表于 2014-11-29 10:53:58 | 只看该作者
我也早就看出来沙发是坛主了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-4-28 14:30

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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