Fortran Coder

查看: 68|回复: 3

[数值问题] 有没有人帮忙解决一下舍入误差的问题?exp(1)的泰了展开

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
8 元
贡献
7 点
发表于 2019-9-16 19:27:14 | 显示全部楼层 |阅读模式
6F 币
答案应该是从0-n积分与n-0积分结果是不一样的,可是我的程序里这两种方法是一样的


program main
      implicit none
      real(kind=8)::epsilion,i,j,k,a,n,y1,y2 ,z
      epsilion=1.0D-6
      y1=1.0d0
      y2=0.0d0
      do i=1.0d0,1.0d5,1.0d0
         a=1.0d0
         do n=1.0d0,i,1.0d0
            a=a*(1.0d0/i)
         end do
         if(a>epsilion) then
            continue
         else
            exit
         end if
      end do
      write(*,*)"n=",n
      do j=1.0d0,n,1.0d0
         a=1.0d0
         do k=1.0d0,j,1.0d0
            a=a*(1.0d0/k)
         end do
         y1=a+y1
      end do
      write(*,*)"from 0 to n make sum y1=",y1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      do j=n,1.0d0,-1.0d0
         a=1.0d0
         do k=1.0d0,j,1.0d0
            a=a*(1.0d0/k)
         end do
         y2=a+y2
      end do
      y2=y2+1.0D0
      write(*,*)"from n to 0 make sum y2=",y2
      z=exp(1.0d0)
      write(*,*)"exp(1)=",z
      pause
      end

回复

使用道具 举报

47

帖子

0

主题

0

精华

专家

F 币
338 元
贡献
147 点

规矩勋章元老勋章新人勋章

发表于 2019-9-17 12:16:50 | 显示全部楼层
为啥不一样?
天之道,损有余而补不足
回复

使用道具 举报

2

帖子

1

主题

0

精华

新人

F 币
8 元
贡献
7 点
 楼主| 发表于 2019-9-17 20:10:15 | 显示全部楼层

因为存在舍入误差
回复

使用道具 举报

47

帖子

0

主题

0

精华

专家

F 币
338 元
贡献
147 点

规矩勋章元老勋章新人勋章

发表于 2019-9-17 20:46:44 | 显示全部楼层
还好吧,可能没体现出来。
误差问题挺复杂的,不是所有情况都会体现出来。

能得到一致的结果,是个好事。乐吧您就。
天之道,损有余而补不足
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-10-21 03:59

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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