我在FORTRAN 77中有以下代码:
REAL*8 :: dm
dm=1.-1.E-12
write(6,*) 'dm: ', dm
我得到:dm: 1
这样好吗?我想得到dm=0.999999999999
答案 0 :(得分:3)
如评论中所述,您需要指定常量的精度。此外,real*8
已过时。 (它总是一个扩展吗?)这是一种现代的编写方法,使用ISO Fortran环境获取64位实数类型,并在声明和常量中使用该类型。
use ISO_FORTRAN_ENV
real (real64) :: dm
dm = 1.0_real64 - 1.0E-12_real64
有关详细信息,请参阅What does `real*8` mean?