使用负数取模

Modulo using negative numbers

我正在用汇编语言编写一个程序来计算一个数的模数。我不需要程序方面的帮助,但我确实需要帮助来理解模如何处理负数。我研究了 Whosebug,但我似乎发现了相互矛盾的结果。

另外,我想知道它是如何纯粹用数学术语工作的,而不是因为它与编程有关,只是为了让我理解基本概念。我确实发现此页面半有用:Modulo operation with negative numbers 但是,前两个答案似乎相互矛盾,现在我对模数与余数之间的区别更加困惑(基于该页面上给出的答案) .并不是说他们的回答有任何问题,但在这一点上我似乎很难通过树木找到森林。

请帮我回答这些简单的问题,并用纯数学术语向我解释你是如何得出答案的。另外,我不需要解释模数和余数之间的区别,因为当我查看列出的网页时,我似乎变得更加困惑。请用模数向我解释一下,我可以从那里连接点;)

这里有一些例子:

-15 mod 2 = ?
15 mod -2 = ?
-4 mod 9  = ?
4 mod -9  = ?
-5 mod -9  = ?

提前感谢您的回复!

对于这些情况没有明确的约定。

记住模数的公式是:n = am + b。通常要求余数b在区间[0..(m-1)]内。这使得所有自然数都变得非常容易。

对于负数,一些约定希望余数在区间 [-(m-1)..0] 内,一些坚持上述定义,一些采用 |b| 最小的解决方案。

因此,您必须尝试编译器或库开发人员选择的实现。

一些编程语言有两个运算符,给你一些自由。例如 Ada 有 remmod.

行为:

(n rem m)中,余数的符号始终为n,而在(n mod m)中,它的符号为m。

第三个约定,使用两者中较小的余数,很少被实现。