Por que o operador% é referido como o operador "módulo" em vez do operador "restante"?
oje, no trabalho, tive uma discussão interessante com um dos meus colegas de trabalho. Ele ficou surpreso quando aconteceu o seguinte:
assert(-1 % 10 == -1) //Expecting 9
Então, quando ele veio me perguntar sobre isso, eu disse a ele "bem, isso faz sentido. Quando você divide -1 por 10, obtém 0 com -1 restante. No entanto, seu argumento era que o operador do módulo deveria ser verdadeiro ao modelo "sempre positivo" .Fiz uma pequena pesquisa e descobri que o módulo a que ele estava se referindo se parece com isso:
Q seja o quociente inteiro de a e n. Seja r o restante. Então
a = n * q + r
A definiçãoI estava usando, no entanto, parece ser a versão Knuth do módulo, que é:
Seja q o piso de um dividido por n. Seja r o restante. Então
r = a - n * q
Então, minha pergunta é por que acabou no padrão FORTRAN (e subseqüentemente no padrão C) ter o operador de módulo truncado em direção a 0? Parece-me um nome impróprio chamá-lo de "módulo" e não de "restante" (em matemática, a resposta realmente deve ser 9). Isso está relacionado a como o hardware está fazendo a divisão?
Para referência
Wikipedia on Modulusntrada @MSDN no operador "módulo"(Sim, eu sei que é para o VS2003 ... Estou preso com ele atualmente. Sadface) operador @Modulus muda Não assuma o restante positivo ...
TLDR; O hardware é o motivo pelo qual o operador do módulo trunca para 0?