event coffee javascript coffeescript operators modulo

javascript - event - github coffeescript



¿Por qué CoffeeScript utiliza %% para el módulo en lugar del operador javascript estándar% (2)

En la documentación de CoffeeScript sobre operadores, se dice que puede usar %% para el verdadero módulo matemático, pero no hay una explicación de por qué esto es diferente del "operador de módulo" % en JavaScript.

Más abajo dice que a %% b en CoffeeScript es equivalente a escribir (a % b + b) % b en JavaScript, pero esto parece producir los mismos resultados para los casos más simples.


Encontré la respuesta en otra pregunta y respuesta de y el módulo de Javascript no se comporta y quería compartirlo para las personas que, como yo, solo buscaban explicaciones relacionadas con "CoffeeScript" y, por lo tanto, tienen dificultades para encontrar la respuesta correcta.

La razón para usar a %% b que compila a (a % b + b) % b es que para un número negativo, como -5 % 3 , JavaScript producirá un número negativo -5 % 3 = -2 mientras que la respuesta matemática es correcta debe ser -5 % 3 = 1 .

La respuesta aceptada se refiere a un artículo sobre el error de módulo de JavaScript que lo explica bien.


No tenía sentido para mí al principio, así que creo que necesita un ejemplo.

check = (a,b) -> c = (b*Math.floor(a/b)) + a%b d = (b*Math.floor(a/b)) + a%%b console.log( [c, c == a] [d, d == a] ) check 78, 33 # [ 78, true ] [ 78, true ] check -78, 33 # [ -111, false ] [ -78, true ] ### 78 mod 33 = 12 -78 mod 33 = 21 check: 78 = 33 * 2 + 12 check: -78 = 33 * -3 + 21 ###

Parece que el módulo es un truco matemático para poder usar una fórmula para todos los números en lugar de uno para los negativos y el segundo para los positivos. No sé si es más que un simple truco y, sin embargo, tiene un significado intrínseco.