En javascript, el resultado de la operación de módulo es así:
-9 % 19 = -9mientras que en python la misma operación de módulo produce esto:
-9 % 19 = 10ahora, según Finite Field, la respuesta de python es correcta. ¿Alguien puede explicar por qué JavaScript no devuelve el mismo resultado que Python?
Es una cuestión de convenciones (veraquí ) y, para Python, está relacionado con el resultado de las divisiones de enteros. Python funciona sobre la base de que puedes invertir la división y volver al numerador original multiplicando el cociente por el denominador y sumando el módulo:
Entonces, si N dividido por D da un cociente de Q y resto o R (N mod D), entonces Q x D + R = N
Aplicando los números (Python):
-9 / 19 --> Q = -1, R = 10 --> -1 x 19 + 10 = -9esto también significa que 9 % -19 --> -10
9 / -19 --> Q = -1, R = -10 --> -1 x -19 + -10 = 9Javascript usa un enfoque diferente para el módulo de números negativos (aplicando el signo del numerador al resto de la división entre valores absolutos) que no se invierte correctamente cuando se aplica la definición matemática al numerador y al denominador que tienen signos diferentes:
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