Fortran Coder

查看: 3709|回复: 1
打印 上一主题 下一主题

[数值问题] 程序运行中数值精度下降

[复制链接]

35

帖子

11

主题

0

精华

熟手

F 币
241 元
贡献
140 点
跳转到指定楼层
楼主
发表于 2022-2-15 16:34:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题,求助论坛的各位大大。程序片段以及断点位置如图:


    iof%rie(1) = Velc + gam2m * iof%ac_c
    iof%rie(2) = iof%Vel8 - gam2m * 1.0

    iof%Ubar = ( iof%rie(1) + iof%rie(2) ) / 2.0


这里在调试下可知 iof%rie(1) = 5.00000,iof%rie(2) = -5.00000,都是单精度浮点数,但是二者求和除以2.0(或者2.d0)后等-2.3841858E-07??


请问各位大大,造成这种现象的可能原因能有哪些呢?另外我还单独试了试,其他程序上单精度的(5.00000-5.00000)/2.0 就是等于0.0。


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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2022-2-15 23:19:05 | 只看该作者
这是非常正常的事情。
单精度浮点数只有7位有效数字。

正如人类习惯用十进制。
计算 (1/3) = 0.3333333 ,然后 0.3333333*3=0.9999999
是吧?(1/3)*3竟然不等于1

计算机使用二进制,一样有误差的。使用双精度可以一定程度降低误差。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-25 01:08

Powered by Tencent X3.4

© 2013-2024 Tencent

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