【发布时间】:2020-11-27 05:17:00
【问题描述】:
为什么在 Fortran 中使用“DMOD”和在 Python 中使用“numpy.remainder”会得到不同的结果?
在 Fortran 中:
DOUBLE PRECISION aaa,bbb
aaa = 2.11561
bbb = 1.19841
out = DMOD(aaa, bbb)
print*,out
我得到:0.917199850
在python中:
import numpy as np
print(np.remainder(2.11561,1.19841))
我得到:0.9172000000000002
【问题讨论】:
-
您的 Fortran 常量是单精度的。双精度常量有不同的语法,例如
1.2D9(D表示双精度)。 -
自 1977 年语言中出现新的内部函数重载以来,dmod 也不是过时的。只需使用 Mod( aaa, bbb )
-
你必须将
out添加到声明为double precision的变量列表中:DOUBLE PRECISION aaa,bbb,out -
您的变量
out隐含为real,这会导致结果转换为单精度。要保留完整的双精度结果,您需要将out声明为double。这可能是剩余差异的原因。 -
IMPLICIT NONE 是你的朋友......永远!