Fortran Coder

查看: 3030|回复: 2
打印 上一主题 下一主题

[数值问题] 这有个尾巴该如何解决啊

[复制链接]

86

帖子

36

主题

0

精华

专家

F 币
352 元
贡献
221 点
跳转到指定楼层
楼主
发表于 2022-9-26 10:15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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都得到了同样的结果



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

800

帖子

2

主题

0

精华

大宗师

F 币
3801 元
贡献
2272 点
沙发
发表于 2022-9-26 11:32:41 | 只看该作者
浮点数有误差,这是不能避免的。你要做的就是想办法控制误差符合要求。如果误差影响不大,不管它。

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2022-9-26 17:18:19 | 只看该作者
迭代过程如果误差积累了,试试用乘法代替加法。
比如:
[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

评分

参与人数 1F 币 +10 贡献 +10 收起 理由
shrine + 10 + 10 很给力!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-15 07:13

Powered by Tencent X3.4

© 2013-2024 Tencent

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