混合精度赋值
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 手册中所述。感谢所有有用的建议。所以我必须确认这不是差异的来源。
我正在处理大型 Fortran 代码,该代码使用适用于 Power7 的 XLF 编译器
它使用这些标志将精度设置为 64 位:-qrealsize=8 -qintsize=8
但是最近导入的一段代码有类似这样的行:
real :: var1d(nvol)
real :: var3d(ni,nj,nk)
var1d = var3d*1.0e6
我想知道 XLF 如何处理文字 1e6
?
主要关注的是;这是参考版本和修改版本
偏离。 var1d
.
当然这会随着迭代而增长。
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 手册中所述。感谢所有有用的建议。所以我必须确认这不是差异的来源。