【问题标题】:Two functions, different result. Suspected fortran feature两种功能,不同的结果。疑似 fortran 功能
【发布时间】:2013-02-21 04:24:26
【问题描述】:

我正在进行蒙特卡洛 (MC) 模拟。我有一种方法可以从头开始计算粒子的能量,也有一种方法可以只计算旧状态和新状态之间的差异。为了测试对我所做的代码的修改,我通过两种方式计算了一步后的能量,得到了不同的结果。这个数字很低(10^-5 的规模,而总能量的规模为 10^8),但我预计它会更低。我怀疑这是一个 fortran 问题的三个原因

  1. 查看所有交互,我看不出这两种方式有什么区别

  2. 值会重复自己

  3. 例如,许多值是两个 (2^-14) 的负幂。

我会很感激你的想法。

上述变量,以及计算中使用的大多数变量(如果不是全部)都是双精度类型的。编译器是gnu f95。

【问题讨论】:

    标签: fortran precision


    【解决方案1】:

    双精度大约有 15 到 17 个十进制数字。您的两次计算相差大约 10 ^ 13 的一部分。改变对于真实数不会改变答案的计算顺序可以改变有限精度算术的答案。根据进行的计算次数和算法的详细信息,此顺序的差异可能是合理的。 Fortran 编译器中的错误似乎不太可能......如果您仍然相信,请尝试其他编译器。

    您的意思是您正在使用 GNU gfortran?如果有,是哪个版本?

    【讨论】:

    • 很可能的原因。我会尝试四倍精度,或 gfortran 的 KIND(10),看看它是否改变。
    • 在一次溃败中,有100个计算量级。在另一条路线中,有数千人。至少10,000。当我输入 f95 -v 我得到gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)
    • 我不确定自 2007 年以来 gfortran 4.1 是什么版本;也许是 RedHat 定制版本。 gfortran 从 4.0 开始,早期版本有一些错误。当前版本是 4.7。我将使用的早期版本是 4.3。
    • 从集合中缺少的功能判断(对于 c++)我猜 4.1.2 是常规的 gcc 版本。
    • @M.S.B.:这只是 RedHat/Fedora 发行版的软件包发布版本,我有带有 gcc version 4.7.2 20120921 (Red Hat 4.7.2-2) (GCC) 的 Fedora。 4.1确实过时了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2018-07-01
    • 2020-10-03
    相关资源
    最近更新 更多