Fortran DMOD 与 Python numpy.remainder
Fortran DMOD vs Python numpy.remainder
为什么在 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 中使用 double-precision,你也需要这样写常量。您可以这样做,使用 _dp
后缀:
integer, parameter:: dp=kind(0.d0)
aaa = 2.11561_dp
或者您可以在号码中使用 d
:
aaa = 2.11561d0
您使用 e
表示单精度,d
表示双精度。默认为单精度...即使变量是 double-precision,常量也可能是 single-precision! C中也是一样。
不同的是Python和C默认使用double-precision,需要单精度要求
为什么在 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 中使用 double-precision,你也需要这样写常量。您可以这样做,使用 _dp
后缀:
integer, parameter:: dp=kind(0.d0)
aaa = 2.11561_dp
或者您可以在号码中使用 d
:
aaa = 2.11561d0
您使用 e
表示单精度,d
表示双精度。默认为单精度...即使变量是 double-precision,常量也可能是 single-precision! C中也是一样。
不同的是Python和C默认使用double-precision,需要单精度要求