Hoy en el trabajo tuve una discusión interesante con uno de mis compañeros de trabajo. Se sorprendió cuando tuvo la siguiente que le ocurra:¿Por qué el operador% se conoce como el operador "módulo" en lugar del operador "restante"?
assert(-1 % 10 == -1) //Expecting 9
Por eso, cuando me vino a preguntar por él, le dije "bueno, eso tiene sentido cuando se divide por 10 -1, se obtiene 0. con -1 restante. Sin embargo, su argumento era que el operador de módulo se supone que es fiel al modelo "siempre positivo". Investigué un poco y encontré que el módulo al que se refería era el siguiente:
Sea q el cociente entero de ayn. Deje r ser el resto. Entonces:
a = n * q + r
La definición I estaba usando, sin embargo, parece ser la versión Knuth de módulo, que es:
Sea q el suelo de un dividido por n. Deje r ser el resto. Entonces:
r = a - n * q
Por lo tanto, mi pregunta es la razón por la que terminó en el estándar de FORTRAN (y posteriormente la norma C) para que el operador módulo truncar hacia 0? Parece un nombre inapropiado para mí llamarlo "módulo" y no "resto" (en matemáticas, la respuesta debería ser 9). ¿Esto está relacionado con cómo el hardware está haciendo la división?
Como referencia:
- Wikipedia on Modulus
- MSDN entry on the "modulus" operator
(. Sí, me doy cuenta de que es para VS2003 ... estoy atascado con ella actualmente Sadface) - Modulus operator changes
- Don't assume positive remainder...
TLDR; ¿Es el hardware la razón por la que el operador del módulo trunca hacia 0?
¿Se da cuenta de que esta pregunta y los enlaces están llenos de razones para evitar módulo con operandos negativos? –
Evitarlo no es el objetivo de la pregunta. –
¿Se llama realmente "módulo" o "mod"? ¿Cuántas sílabas tiene "mod"? ¿Qué tal "resto"? – supercat