【发布时间】:2015-08-14 15:16:23
【问题描述】:
我正在处理一个大型 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 位有效数字不同。
令人讨厌的是,这会随着迭代而增长。
【问题讨论】:
-
所有实变量和常量都应该由标志提升。我没有时间研究 XLF 手册,(你应该这样做!),但普通的相同编译器会这样做。
-
如果我担心这个问题,我可能会将文字重写为
1.0d6(或1.0_real64或类似的),看看它有什么影响。当然,您可能会告诉我,这些偏差仅在 100,000 cpu-hours 计算后才开始...... -
要添加到其他 cmets,
1e6是默认类型的字面实常数。 -
对于这个特定的例子,
1.0E6被精确地表示,无论其精度如何。当然,您说“与此类似”,所以我想您还有其他一些不同的情况。 -
大家好,感谢弗拉基米尔提醒我 RTM。