使用负数取模
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 有 rem
和 mod
.
行为:
在(n rem m)
中,余数的符号始终为n,而在(n mod m)
中,它的符号为m。
第三个约定,使用两者中较小的余数,很少被实现。
我正在用汇编语言编写一个程序来计算一个数的模数。我不需要程序方面的帮助,但我确实需要帮助来理解模如何处理负数。我研究了 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 有 rem
和 mod
.
行为:
在(n rem m)
中,余数的符号始终为n,而在(n mod m)
中,它的符号为m。
第三个约定,使用两者中较小的余数,很少被实现。