Fortran 实变量精度

Fortran 实变量精度,fortran,precision,Fortran,Precision,我用FORTRAN 77编写了以下代码: REAL*8 :: dm dm=1.-1.E-12 write(6,*) 'dm: ', dm 我得到:dm:1 这样行吗?我想获得dm=0.9999999999如注释中所述,您需要指定常数的精度。而且,real*8已经过时。(它总是一个扩展吗?)这里有一种现代的编写方法,使用ISO Fortran环境获得64位实类型,并在声明和常量中使用该类型 use ISO_FORTRAN_ENV real (real64) :: dm dm = 1.0

我用FORTRAN 77编写了以下代码:

REAL*8 :: dm

dm=1.-1.E-12

write(6,*) 'dm: ', dm
我得到:
dm:1


这样行吗?我想获得
dm=0.9999999999

如注释中所述,您需要指定常数的精度。而且,
real*8
已经过时。(它总是一个扩展吗?)这里有一种现代的编写方法,使用ISO Fortran环境获得64位实类型,并在声明和常量中使用该类型

use ISO_FORTRAN_ENV

real (real64) :: dm  
dm = 1.0_real64 - 1.0E-12_real64

有关更多信息,请参见注释中所述的,您需要指定常数的精度。而且,
real*8
已经过时。(它总是一个扩展吗?)这里有一种现代的编写方法,使用ISO Fortran环境获得64位实类型,并在声明和常量中使用该类型

use ISO_FORTRAN_ENV

real (real64) :: dm  
dm = 1.0_real64 - 1.0E-12_real64

有关更多信息,请参见

我对FORTRAN了解不够,无法权威地回答,但假设REAL*8表示8字节浮点(双精度),则它至少应具有15位精度。这可能与输出格式有关吗?问题是您的常量是单精度的,请尝试1.D0-1.D-12。注意,符号(连同REAL*8)在现代fortran中已经过时,但仍然有效。不清楚是否/为什么需要f77..我对FORTRAN了解不够,无法权威地回答,但假设REAL*8表示8字节浮点(双精度),它至少应该有15位精度。这可能与输出格式有关吗?问题是您的常量是单精度的,请尝试1.D0-1.D-12。注意,符号(连同REAL*8)在现代fortran中已经过时,但仍然有效。不清楚是否/为什么需要f77。。