Fortran Coder

标题: 程序运行中数值精度下降 [打印本页]

作者: jojo9    时间: 2022-2-15 16:34
标题: 程序运行中数值精度下降
如题,求助论坛的各位大大。程序片段以及断点位置如图:


    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。



作者: vvt    时间: 2022-2-15 23:19
这是非常正常的事情。
单精度浮点数只有7位有效数字。

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

计算机使用二进制,一样有误差的。使用双精度可以一定程度降低误差。




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