Est-ce que je fais le mauvais module? Parce qu'en Java, -13 % 64
est supposé s'évaluer à -13
mais j'obtiens 51
.
Réponses
Trop de publicités?Les deux définitions du module des nombres négatifs sont utilisées - certaines langues utilisent une définition et l’autre.
Si vous voulez obtenir un nombre négatif pour les entrées négatives, vous pouvez utiliser ceci:
int r = x % n;
if (r > 0 && x < 0)
{
r -= n;
}
De même, si vous utilisiez une langue qui renvoie un nombre négatif sur une entrée négative et que vous préférez positif:
int r = x % n;
if (r < 0)
{
r += n;
}
Puisque "mathématiquement" les deux sont corrects:
-13 = -13 (in modulus 64)
-13 = 51 (in modulus 64)
Une des options devait être choisie par les développeurs de langage Java et il a été décidé que:
..., le signe du résultat est égal au signe du dividende.
Dit dans les spécifications Java:
http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.17.3
Votre résultat est mauvais pour Java. Veuillez fournir un contexte comment vous êtes arrivé à (votre programme, la mise en œuvre et la version de Java).
À partir de la Spécification du Langage Java
15.17.3 Reste De L'Opérateur %
[...]
Le reste de l'opération pour les opérandes sont des entiers après binaire numérique de promotion (§5.6.2) produit un résultat de valeur tels que (a/b)*b+(a%b) est égal à un.
15.17.2 Opérateur De Division /
[...]
Division entière tours vers 0.
Puisque / est arrondi vers zéro (résultant de zéro), le résultat d' % devrait être négatif dans ce cas.