Ada余数运算符的差异?

时间:2013-11-16 01:05:58

标签: operators ada

所以,我知道Ada提供了两个余数运算符remmod,但它们之间究竟有什么区别?我能够找到this,但我不确定我是否完全掌握了差异。

2 个答案:

答案 0 :(得分:5)

如果A mod B为非负且A rem B为正数,则AB之间没有区别。如果A为负数且B为正数,mod会为您提供真正的数学模运算;因此,例如,如果B为5,则A mod 5的结果为A rem 5A的结果:

A       = -10 -9 -8 -7 -6 -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  8
A mod 5 =   0  1  2  3  4  0  1  2  3  4  0  1  2  3  4  0  1  2  3 
A rem 5 =   0 -4 -3 -2 -1  0 -4 -3 -2 -1  0  1  2  3  4  0  1  2  3

请注意A mod 5结果中的模式。 rem对应于%运算符在C风格语言中的工作方式(但显然不是Python或Ruby)。某些处理器可能会更快。如果您必须处理A的负值,我的预感是mod更有可能是有用的,但rem也可能有一些用途。我认为modrem使用右侧操作数为负值并没有多大用处,所以我不会过多担心这个定义。

另见http://en.wikipedia.org/wiki/Modulo_operation

答案 1 :(得分:2)

根据LRM,不同之处在于操作数的符号与结果相关联。

  

整数除法和余数由关系定义           A =(A / B)* B +(A rem B)       其中(A rem B)的符号为A,绝对值小于B的绝对值。整数除法满足同一性

    (-A)/B = -(A/B) = A/(-B) 
  

模运算的结果是(A mod B)具有B的符号并且绝对值小于B的绝对值;另外,对于某个整数值N,该结果必须满足关系

    A = B*N + (A mod B)