【Fortran,MFiX】Fortran语言浮点数 双精度数 数值精度和下溢问题

您所在的位置:网站首页 python中浮点数可提供至多多少个数字的精度 【Fortran,MFiX】Fortran语言浮点数 双精度数 数值精度和下溢问题

【Fortran,MFiX】Fortran语言浮点数 双精度数 数值精度和下溢问题

2023-08-14 19:57| 来源: 网络整理| 查看: 265

问题

Fortran中的浮点数,默认是单精度数,也就是6-7位的精度。双精度数有15位 注意,只要你写的是2.0,1.0之类的数字,就默认是单精度,并且不会强制类型转换

什么意思呢? 看这样一个例子

program try implicit none double precision E_i,R,e,e2,e3 E_i=1.2e8 R=8314 write (*,*) "a=", E_i write (*,*) "b=", R write (*,*) "1.2e8/8314=", E_i/R e=exp(-E_i/(8.3147295*1093.0)) write (*,*) "e=", e e2=exp(-1.2e5/(8.3147295*1093.0)) write (*,*) "e2=", e2 e3=exp(-1.2d8/(8314.7295d0*1093d0)) write (*,*) "e3=", e3 end program

gfortran编译,输出结果是 在这里插入图片描述 这里就看出端倪了,e的结果是0

计算机先算E_i/(8.3147295*1093.0) 再算exp

第一步计算的时候,数值已经下溢了。造成结果为0

此外我们看到,e2与e3的结果也是有轻微差别的

e2是一种折中的方法,先手动把大的数字约分掉,让数值不下溢

解决方案

很简单 在所有使用字面浮点数的场合加上d0 比如1/2使用1d0/2d0 8.314使用8.314d0



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3