Numéro négatif modulo dans swift

Comment fonctionne le modulo des nombres négatifs dans swift? Quand je l'ai fait (-1% 3), il donne -1 mais le rest est 2. Quelle est la prise dedans?

À partir du guide linguistique – Opérateurs de base :

Opérateur Reste

L'opérateur restant ( a % b ) calcule le nombre de multiples de b qui rentrent dans a et renvoie la valeur qui rest (appelée le rest).

L'opérateur restant ( % ) est également connu en tant qu'opérateur modulo dans d'autres langues. Cependant, son comportement dans Swift pour les nombres négatifs signifie qu'il s'agit, à proprement parler, d'un rest plutôt que d'une opération modulo .

La même méthode est appliquée lors du calcul du rest pour une valeur négative de a:

 -9 % 4 // equals -1 

L'insertion de -9 et 4 dans l'équation donne:

 -9 = (4 x -2) + -1 

donnant une valeur de rest de -1 .

Dans votre cas, aucun 3 ne tiendra dans 1 , et le rest est 1 (même chose avec -1 -> le rest est -1 ).

L' opérateur de rest Swift % calcule le rest de la division entière:

 a % b = a - (a/b) * b 

/ est la division entière tronquée. Dans ton cas

 (-1) % 3 = (-1) - ((-1)/3) * 3 = (-1) - 0 * 3 = -1 

Le rest a donc toujours le même signe que le dividende (sauf si le rest est nul).

C'est la même définition que nécessaire, par exemple dans la norme C99, voir par exemple C ANSI C ou ISO C spécifiez-ce que -5% 10 devrait être? . Voir aussi Wikipedia: Opération Modulo pour une vue d'set de la façon dont cela est géré dans différents langages de programmation.

Une fonction "vrai" du module pourrait être définie dans Swift comme ceci:

 func mod(_ a: Int, _ n: Int) -> Int { precondition(n > 0, "modulus must be positive") let r = a % n return r >= 0 ? r : r + n } print(mod(-1, 3)) // 2