TypechoJoeTheme

MetMan's Blog

网站页面

Fortran标准库系列:MOD vs MODULO

MetMan博 主
2024-08-10
/
0 评论
/
37 阅读
/
404 个字
/
百度已收录
08/10
本文最后更新于 2024年08月10日,已超过 40天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

取余运算 vs 取模运算

  • 取余运算(remainder)在计算商时,会将商向0方向舍入。这意味着取余运算尽可能让余数的绝对值最小。
  • 取模运算(modulus)在计算商时,会将商向负无穷方向舍入。取模运算尽可能让商的值最小。

当两个数都是正数时,取余运算和取模运算的结果是一样的,因为它们的商都是向0方向舍入的。然而,当两个数符号不同时,取余运算和取模运算的结果会不同。

Fortran标准提供取余函数MOD和取模函数MODULO

MOD函数

计算A除以P的余数。

R=MOD(A,P)

参数A是INTEGER或者REAL类型的标量。参数P必须与A相同类型和精度,不能为0。

函数返回结果是$A-(INT(A/P)* P)$ ,返回值R符号与参数A相同,且$|R|<|P|$。

MODULO

计算A对P取模结果。

R=MODULO(A,P)

参数A是INTEGER或REAL类型的标量。参数P必须与A相同类型和精度,。

返回结果类型和精度与参数相同,且返回值R符号与P相同,且$|R|<|P|$。。

如果A和P是INTEGER类型,返回结果R满足$A=Q*P+R$ ,其中Q是一个整数,$R\in [0,P)$ 。

如果A和P是REAL类型,返回结果$A-FLOOR(A/P)*P$。

区别

两者区别:当参数A和P都为正数时,modmodulo计算结果相同,但当参数有负数时,两者结果不同。

  • MOD(A,P) 返回结果符号与A相同。
  • MODULO(A,P) 返回结果符号与P相同。
  print*, mod(17,3)       ! 2
  print*, mod(-17,3)      ! -2
  print*, mod(17,-3)      ! 2
  print*, mod(-17,-3)     ! -2
  print*, mod(17.,3.)     ! 2.00000000

  print*, modulo(17,3)    ! 2
  print*, modulo(-17,3)   ! 1    注意这里与mod(-17,3)结果不同
  print*, modulo(17,-3)   ! -1   注意这里与mod(17,-3)结果不同
  print*, modulo(-17,-3)  ! -2
  print*, modulo(17.,3.)  ! 2.00000000

C和Python情况

  • C语言运算符%行为与Fortran的取余函数MOD相同。
#include <stdio.h>

int main(void) {
  printf(" 17 %  3 = %d\n", 17 % 3);
  printf("-17 %  3 = %d\n", -17 % 3);
  printf(" 17 % -3 = %d\n", 17 % -3);
  printf("-17 % -3 = %d\n", -17 % -3);
  return 0;
}

执行结果:

 17 % 3 = 2
-17 % 3 = -2
 17 % -3 = 2
-17 % -3 = -2
  • Python

Python运算符%行为与Fortran的取模函数MODULO相同。

#!/usr/bin/env python

print(" 17 %  3 = ", 17 % 3)
print("-17 %  3 = ", -17 % 3)
print(" 17 % -3 = ", 17 % -3)
print("-17 % -3 = ", -17 % -3)

执行结果:

 17 %  3 =  2
-17 %  3 =  1
 17 % -3 =  -1
-17 % -3 =  -2

参考资料

https://gcc.gnu.org/onlinedocs/gfortran/MOD.html

https://gcc.gnu.org/onlinedocs/gfortran/MODULO.html

fortran
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/136/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码