shrine 发表于 2022-9-26 10:15:13

这有个尾巴该如何解决啊

本帖最后由 shrine 于 2022-9-26 11:28 编辑

      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:41

浮点数有误差,这是不能避免的。你要做的就是想办法控制误差符合要求。如果误差影响不大,不管它。

fcode 发表于 2022-9-26 17:18:19

迭代过程如果误差积累了,试试用乘法代替加法。
比如:
y = 0
zb=-(4.76_QP-4.9_QP)*0.14_QP            
Do i = 1 , 100
y = y + zb
End Do
改写为:
Do i = 1 , 100
y = 0 + (i-1)*zb
End Do
页: [1]
查看完整版本: 这有个尾巴该如何解决啊