Oggi al lavoro ho avuto una discussione interessante con uno dei miei colleghi. Fu sorpreso quando ha avuto il seguente succedere a lui:Perché l'operatore% viene definito come l'operatore "modulo" anziché l'operatore "resto"?
assert(-1 % 10 == -1) //Expecting 9
Così, quando è venuto a chiedermi a questo proposito, gli ho detto "bene, che ha senso quando si divide -1 per 10, si ottiene 0. .. con -1 restante la sua tesi, tuttavia, era che l'operatore modulo dovrebbe tenere vero per il modello "sempre positivo" ho fatto una piccola ricerca e ho trovato che il modulo si riferiva a assomiglia a questo:
Sia q il quoziente intero di a e n. Sia r il resto. Poi:
a = n * q + r
La definizione mi stava usando, tuttavia, sembra essere la versione Knuth di modulo, che è:
Sia q pavimento di una divisa per n. Lascia che sia il resto. Poi:
r = a - n * q
Quindi, la mia domanda è: perché è finito in standard FORTRAN (e successivamente il C-standard) per avere l'operatore modulo troncare verso 0? Mi sembra un termine improprio chiamarlo "modulo" e non "resto" (in matematica, la risposta dovrebbe essere 9). Questo è legato a come l'hardware sta facendo la divisione?
Per riferimento:
- Wikipedia on Modulus
- MSDN entry on the "modulus" operator
(. Sì, mi rendo conto che la sua per VS2003 ... mi sono bloccato con esso attualmente Sadface) - Modulus operator changes
- Don't assume positive remainder...
TLDR; L'hardware è il motivo per cui l'operatore modulo tronca verso 0?
Ti rendi conto che questa domanda e i collegamenti sono pieni di motivi per evitare il modulo con operandi negativi? –
Evitarlo non è il punto della domanda. –
Si chiama veramente "modulo" o "mod"? Quante sillabe ha "mod"? Che ne dici di "resto"? – supercat