Fortran 95和Python上的相同方程返回不同的结果

时间:2018-05-22 13:18:11

标签: python python-2.7 fortran numbers

Fortran 95中有一个等式来计算数组的某个位置,我在Python中复制并粘贴了相同的等式,但它们会返回不同的结果。

修改 急于回答,我忘了显示变量的声明,但现在它们在Fortran代码示例中。事实证明,声明是问题,感谢@SurestTexas和@albert在评论中指出它,以及其他所有帮助过的人。

Fortran中的等式:

integer(2) :: i, j
integer(4) :: e, n_x
n_x = 1162
j = ((-2.8 - (-8.4)) / 0.05) + 1
i = ((-4.5 - (-5.1)) / 0.05) + 1 
e = ((i-1)*n_x+j)

我打印e,结果是:12894

在Python中:

n_x = 1162
j = ((-2.8 - (-8.4)) / 0.05) + 1
i = ((-4.5 - (-5.1)) / 0.05) + 1 
e = ((i-1)*n_x+j)

我打印e,结果是:14057.0

正如您所看到的,它们完全相同,我无法找出问题所在以及如何解决问题,请帮助我。

2 个答案:

答案 0 :(得分:2)

记住我的FORTRAN。我认为它假设数据类型基于变量的第一个字母,在partilar i和j将是整数所以在Python中模拟这个我做了:

n_x = 1162
j = int(((-2.8 - (-8.4)) / 0.05) + 1)
i = int(((-4.5 - (-5.1)) / 0.05) + 1 )
e = ((i-1)*n_x+j)

这给了我12895

答案 1 :(得分:2)

补充:

有趣的是,在Python 3.5.3中,e打印为14056.99999999999。

The implicit none statement is used to inhibit a very old feature of Fortran that by default treats all variables that start with the letters i, j, k, l, m and n as integers and all other variables as real arguments.

由于声誉不足,我无法发表评论,因此请将其作为我的研究记录添加到答案中。