Fortran MOD和MODULO给出相同的结果

时间:2018-11-28 21:37:44

标签: fortran gfortran fortran90

使用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的精度各不相同?

1 个答案:

答案 0 :(得分:5)

您误解了这些功能的目的。在许多情况下(例如,当两个参数均为正时),它们应该给您相同的答案,即除法后的余数。但是考虑一下

print *, mod(-17, 3)
print *, mod(-17., 3.)
print *, modulo(-17, 3)
print *, modulo(-17., 3.)

end

这将返回

-2
-2.000000
1
1.000000

因此答案对于肯定的p(第二个论点)将是肯定的,并且实际上必须与p具有相同的符号。请参阅文档以获取确切的定义

MOD MODULO