问题描述
今晚我很好奇数学中的模负数。
不管是编程语言,计算器虽然它returns different values都依赖于自己的公式,如果在初中考试中有这些问题,正确答案是什么:
-7 mod 2 = ?
7 mod -2 = ?
-7 mod -2 = ?
ps:如果我太老了,不记得那些“基础问题”的答案,我很抱歉,谢谢你的好意给我一个正确的答案!
ps2:致提出这个问题的人:相信我这个问题真的很有帮助,至少它可以帮助你理解为什么这段代码会失败:
function isEvenorOdd(num) {
return num % 2 === 1 ?'odd' : 'even';
}
isEvenorOdd(5); // 'odd'
isEvenorOdd(18); // 'even'
isEvenorOdd(0); // 'even'
isEvenorOdd(-7); // 'even'
解决方法
在数学中,模数必须>1,并且约定是模运算产生bash: python: command not found
的最小非负整数解:
a+km=b
很容易将定义扩展为包含负数(以及 1 和 -1):
-7 mod 2 = 1
7 mod -2 Illegal
-7 mod -2 Illegal
但是在计算中,不同的语言使用不同的约定:
-7 mod 2 = 1
7 mod -2 = 1
-7 mod -2 = 1
-7 mod 3 = 2
我怀疑您的系统显示 -7 mod 2 = {1,or -1,or undefined}
,因此 -7 mod 2 = -1
产生“偶数”(因为 -1 ≠ 1)。
要计算 x mod m,其中 x 为负,您需要不断将 m 添加到 x,直到它变为非负,所以 -7 % 2 = -7 + 2 + 2 + 2 + 2 = 1。
要检查一个数是奇数还是偶数,总是以绝对值来做,比如 |x| mod m,因此您无需担心模数的负值。