Fortran MOD 和 MODULO 给出相同的结果

Fortran MOD and MODULO giving same results

使用 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

打印出来:

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.)

这将 return

2
2.000000
-2
-2.000000
1
1.000000

所以 MODULO(A,P) 的结果对于正数 P 是正数,实际上必须与 P 具有相同的符号。 MODULO 的工作方式不同,具体取决于 AP 是整数还是实数。有关确切定义,请参阅文档

MOD MODULO