Fortran Coder

标题: 这有个尾巴该如何解决啊 [打印本页]

作者: shrine    时间: 2022-9-26 10:15
标题: 这有个尾巴该如何解决啊
本帖最后由 shrine 于 2022-9-26 11:28 编辑

[Fortran] 纯文本查看 复制代码
      program main
      integer , parameter :: QP = Selected_real_kind( 18 )      
      real(kind=QP)::zb            
      zb=-(4.76_QP-4.9_QP)*0.14_QP            
      write(*,*)zb,0.14_QP*0.14_QP
      end


输出结果是
1.960000000000000000000000000000007E-0002
  1.960000000000000000000000000000000E-0002

这尾巴有个7怎么解决啊,实际迭代过程中,这个尾巴会不断扩大
如果降低精度,这个尾巴始终在

用intel oneAPI或者XE parallel都得到了同样的结果




作者: li913    时间: 2022-9-26 11:32
浮点数有误差,这是不能避免的。你要做的就是想办法控制误差符合要求。如果误差影响不大,不管它。
作者: fcode    时间: 2022-9-26 17:18
迭代过程如果误差积累了,试试用乘法代替加法。
比如:
[Fortran] 纯文本查看 复制代码
y = 0
zb=-(4.76_QP-4.9_QP)*0.14_QP            
Do i = 1 , 100
  y = y + zb
End Do

改写为:
[Fortran] 纯文本查看 复制代码
Do i = 1 , 100
  y = 0 + (i-1)*zb
End Do





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2