混合精度赋值

Mixed precision assignment

我正在处理大型 Fortran 代码,该代码使用适用于 Power7 的 XLF 编译器 它使用这些标志将精度设置为 64 位:-qrealsize=8 -qintsize=8

但是最近导入的一段代码有类似这样的行:

real :: var1d(nvol)
real :: var3d(ni,nj,nk)

var1d = var3d*1.0e6

我想知道 XLF 如何处理文字 1e6? 主要关注的是;这是参考版本和修改版本 偏离。 var1d.

的第 9 位和第 10 位有效数字不同

当然这会随着迭代而增长。

Data Object       REALSIZE(4) in Effect       REALSIZE(8) in Effect
-------------------------------------------------------------------
1.2               REAL(4)                      REAL(8)
1.2e0             REAL(4)                      REAL(8)
1.2d0             REAL(8)                      REAL(16)
1.2q0             REAL(16)                     REAL(16)

REAL              REAL(4)                      REAL(8)
DOUBLE PRECISION  REAL(8)                      REAL(16)
COMPLEX           COMPLEX(4)                   COMPLEX(8)
DOUBLE COMPLEX    COMPLEX(8)                   COMPLEX(16)

如在线 XLF 手册中所述。感谢所有有用的建议。所以我必须确认这不是差异的来源。