JavaScript 和 Python 中模运算的不同结果
Different result of modulo operation in JavaScript and Python
在javascript中取模结果是这样的:
-9 % 19 = -9
而在 python 中,相同的模运算会产生以下结果:
-9 % 19 = 10
现在根据有限域python的答案是正确的。
任何人都可以解释为什么 JavaScript 不会 return 结果与 python 相同吗?
这是一个约定问题(参见here),对于Python,它与整数除法的结果有关。 Python 的工作原理是您可以通过将商乘以分母并添加 modulo:
来反转除法并返回原始分子
因此,如果 N 除以 D 得到 Q 和余数或 R (N mod D) 的商,则 Q x D + R = N
应用数字 (Python):
-9 / 19 --> Q = -1, R = 10 --> -1 x 19 + 10 = -9
这也意味着 9 % -19 --> -10
9 / -19 --> Q = -1, R = -10 --> -1 x -19 + -10 = 9
Javascript 对负数的 modulo 使用不同的方法(将分子的符号应用于绝对值除法的余数),在应用数学时不能正确反转符号不同的分子和分母的定义:
Math.floor(-9/19)) --> -1
-9 % 19 --> -9
--> -1 x 19 + -9 --> -28
Math.floor(9/-19)) --> -1
9 % -19 --> 9
--> -1 x -19 + 9 --> 28
在javascript中取模结果是这样的:
-9 % 19 = -9
而在 python 中,相同的模运算会产生以下结果:
-9 % 19 = 10
现在根据有限域python的答案是正确的。 任何人都可以解释为什么 JavaScript 不会 return 结果与 python 相同吗?
这是一个约定问题(参见here),对于Python,它与整数除法的结果有关。 Python 的工作原理是您可以通过将商乘以分母并添加 modulo:
来反转除法并返回原始分子因此,如果 N 除以 D 得到 Q 和余数或 R (N mod D) 的商,则 Q x D + R = N
应用数字 (Python):
-9 / 19 --> Q = -1, R = 10 --> -1 x 19 + 10 = -9
这也意味着 9 % -19 --> -10
9 / -19 --> Q = -1, R = -10 --> -1 x -19 + -10 = 9
Javascript 对负数的 modulo 使用不同的方法(将分子的符号应用于绝对值除法的余数),在应用数学时不能正确反转符号不同的分子和分母的定义:
Math.floor(-9/19)) --> -1
-9 % 19 --> -9
--> -1 x 19 + -9 --> -28
Math.floor(9/-19)) --> -1
9 % -19 --> 9
--> -1 x -19 + 9 --> 28