使用gfortran --version
== GNU Fortran(Homebrew GCC 8.2.0)8.2.0进行编译
当我编写以下测试代码时,我得到的函数MOD
和MODULO
给出相同的结果。但是,据我从多个来源了解到的,MOD
应该给出余数,MODULO
应该给出整数商。
program test
implicit none
print *, mod(17,3)
print *, mod(17.5,5.5)
print *, mod(17.5d0,5.5)
print *, mod(17.5,5.5d0)
print *, modulo(17,3)
print *, modulo(17.5,5.5)
print *, modulo(17.5d0,5.5)
print *, modulo(17.5,5.5d0)
end program test
打印输出:
2
1.00000000
1.0000000000000000
1.0000000000000000
2
1.00000000
1.0000000000000000
1.0000000000000000
结果是所有余数,这就是
MOD
应该做的,但是对于MODULO
,不是应该打印出模数,在这种情况下是5
,然后是三个3
,其精度各不相同? 最佳答案
您可能会误解这些功能的目的。当两个论点都是肯定的时,它们应该给您相同的答案,即除法后的余数。但是考虑带有负面参数的情况:
print *, mod( 17, 3)
print *, mod( 17., 3.)
print *, mod(-17, 3)
print *, mod(-17., 3.)
print *, modulo(-17, 3)
print *, modulo(-17., 3.)
这将返回2
2.000000
-2
-2.000000
1
1.000000
因此MODULO(A,P)
的结果将为正P
为正,并且实际上必须与P
具有相同的符号。 MODULO
的工作方式有所不同,具体取决于A
和P
是整数还是实数。请参阅文档以获取确切的定义MOD
MODULO