En C ++, ¿por qué el compilador devuelve -1 para encontrar un módulo entero negativo un entero positivo?

Muchos lenguajes de programación (incluido, aparentemente, C ++) han decidido que el operador [math]% [/ math] siempre respeta la siguiente ecuación para enteros [math] a, b [/ math], con [math] b \ neq 0 [ /matemáticas]:

[matemáticas] a = (a \ text {} / \ text {} b) * b + (a \ text {}% \ text {} b) [/ math]

(los paréntesis no son necesarios pero se agregan para mayor claridad). Dado que la división entera se redondea hacia [matemáticas] 0 [/ matemáticas] en lugar de [matemáticas] – \ infty [/ matemáticas], por ejemplo, [matemáticas] -7 \ text {} / \ text {} 5 = -1 [/ matemáticas] [ matemática] \ left (\ text {not} -2 \ right) [/ math], es necesario que [math] -7 \ text {}% \ text {} 5 [/ math] dé [math] -2 [ / math] en lugar de [math] 3 [/ math].

Si esto te molesta, es porque los informáticos han robado el operador mod de las matemáticas y lo bastardaron para sus propios fines nefastos. Ven al lado de las matemáticas y todo será mucho más bonito.

En C ++,% es “resto”, no “módulo”.