Modulo in matematica e programmazione: il problema dei numeri negativi
La divergenza tra le convenzioni di modulo in matematica e programmazione deriva da come gestiscono la divisione tra interi. Il modulo matematico utilizza la divisione con floor (arrotondamento verso l'infinito negativo), quindi il quoziente di meno 7 diviso 3 si arrotonda a meno 3, dando un resto di meno 7 meno 3 volte meno 3 uguale a 2. Il modulo di programmazione utilizza la divisione troncata (arrotondamento verso lo zero), quindi il quoziente si tronca a meno 2, dando un resto di meno 7 meno 3 volte meno 2 uguale a meno 1.
Python utilizza unicamente il modulo matematico (per difetto), rispecchiando la convenzione prevista nell'algebra astratta e nella teoria dei numeri. C, C++, Java, JavaScript, Go e Rust usano il modulo troncato. Ruby e Perl seguono il comportamento di Python.
Questa distinzione è importante nel codice reale: convertire un angolo negativo nell'intervallo 0-359 richiede il modulo matematico (meno 90 mod 360 dà 270), ma l'operatore percentuale di C restituisce meno 90, richiedendo un aggiustamento manuale.