Modulo con un numero negativo

Possibili duplicati:
Funzionamento modulo con valori negativi – cosa strana ??
Mod di numero negativo mi sta sciogliendo il cervello!

Ho provato a fare il 25 % -9 solo per divertimento e la risposta che ho ottenuto è stata -2 (questo era su Google) e quando ho fatto questo in codice C ho ottenuto 7. Qualcuno può spiegarmi perché due risposte diverse?

In C89 / 90, era permesso uno dei due risultati. I risultati ottenuti dalla divisione e il resto sono stati necessari per “adattarsi” insieme in modo che (a/b)*b + a%b == a .

A partire da C99, è necessaria una divisione intera con un input negativo per troncare verso zero. La relazione tra i risultati della divisione e il resto è ancora richiesta però. Ciò significa che (in effetti) il risultato dell’operazione rimanente ha sempre lo stesso segno dell’operando di sinistra, quindi il 25% -9 deve produrre 7, non -2.

Per quello che vale, C ++ ha seguito grosso modo lo stesso percorso, pochi anni dopo C. C ++ 98/03 ha le stesse regole di C89 / 90, quindi per i tuoi input il resto potrebbe essere negativo o positivo (ma ha ancora bisogno per adattarsi al risultato della divisione). A partire da C ++ 11, richiede lo stesso comportamento di C99, quindi 25% – 9 == 7.

Alcuni altri linguaggi (es. Python) richiedono che il risultato del resto abbia lo stesso segno dell’operando di destra.

Se vieni a pensarci su una base matematica di 9, sono la stessa cosa di 9-2 = 7