Fortran MOD 和 MODULO 给出相同的结果
Fortran MOD and MODULO giving same results
使用 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.)
这将 return
2
2.000000
-2
-2.000000
1
1.000000
所以 MODULO(A,P)
的结果对于正数 P
是正数,实际上必须与 P
具有相同的符号。 MODULO
的工作方式不同,具体取决于 A
和 P
是整数还是实数。有关确切定义,请参阅文档
使用 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.)
这将 return
2
2.000000
-2
-2.000000
1
1.000000
所以 MODULO(A,P)
的结果对于正数 P
是正数,实际上必须与 P
具有相同的符号。 MODULO
的工作方式不同,具体取决于 A
和 P
是整数还是实数。有关确切定义,请参阅文档