0

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

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

  2. 价值观重演

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

我会很感激你的想法。

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

4

1 回答 1

3

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

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

于 2013-02-21T06:33:09.367 回答