【Fortran,MFiX】Fortran语言浮点数 双精度数 数值精度和下溢问题 |
您所在的位置:网站首页 › python中浮点数可提供至多多少个数字的精度 › 【Fortran,MFiX】Fortran语言浮点数 双精度数 数值精度和下溢问题 |
问题
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 programgfortran编译,输出结果是 计算机先算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 |