使用gfortran --version == GNU Fortran(Homebrew GCC 8.2.0)8.2.0进行编译

当我编写以下测试代码时,我得到的函数MODMODULO给出相同的结果。但是,据我从多个来源了解到的,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

打印输出:
21.000000001.00000000000000001.000000000000000021.000000001.00000000000000001.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的工作方式有所不同,具体取决于AP是整数还是实数。请参阅文档以获取确切的定义
MOD
MODULO

09-25 20:06