Quelle est la différence entre «mod» et «rest»?

Mon ami a dit qu’il y avait des différences entre «mod» et «rest».

Si oui, quelles sont ces différences en C et C ++? Est-ce que «%» signifie «mod» ou «rem» en C?

Il y a une différence entre le module et le rest. Par exemple:

-21 mod 4 vaut 3 car -21 + 4 x 6 vaut 3 .

Mais -21 divisé par 4 donne -5 avec un rest de -1 .

Pour les valeurs positives, il n’y a pas de différence.

Est-ce que «%» signifie «mod» ou «rem» en C?

En C, % est le rest.

…, le résultat de l’opérateur / est le quotient algébrique avec toute partie fractionnaire rejetée … (Ceci est souvent appelé “troncature vers zéro”.) C11dr §6.5.5 6

Les opérandes de l’opérateur % doivent avoir un type entier. C11dr §6.5.5 2

Le résultat de l’opérateur / est le quotient de la division du premier opérande par le second; le résultat de l’opérateur % est le rest … C11dr §6.5.5 5


Quelle est la différence entre «mod» et «rest»?

C ne définit pas “mod”, tel que la fonction de module entier utilisée dans la division euclidienne ou autre modulo . “Mod Euclidien” diffère de l’opération C d’ a%b quand a est négatif.

  // a % b 7 % 3 --> 1 7 % -3 --> 1 -7 % 3 --> -1 -7 % -3 --> -1 

Modulo comme division euclidienne

  7 modulo 3 --> 1 7 modulo -3 --> 1 -7 modulo 3 --> 2 -7 modulo -3 --> 2 

Code modulo du candidat:

 int modulo_Euclidian(int a, int b) { int m = a % b; if (m < 0) { // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN m = (b < 0) ? m - b : m + b; } return m; } 

Note à propos des virgules flottantes: double fmod(double x, double y) , même s'il est appelé "fmod", ce n'est pas la même chose que la division euclidienne "mod", mais similaire au rest du C entier:

Les fonctions fmod calculent le rest à virgule flottante de x/y . C11dr §7.12.10.1 2

 fmod( 7, 3) --> 1.0 fmod( 7, -3) --> 1.0 fmod(-7, 3) --> -1.0 fmod(-7, -3) --> -1.0 

Remarque: C a également une fonction nommée double modf(double value, double *iptr) qui divise la valeur de l'argument en parties intégrale et fractionnaire, chacune ayant le même type et le même signe que l'argument.

Le module, en arithmétique modulaire, est la valeur restante ou la valeur restante après la division arithmétique. Ceci est communément appelé rest. % est formellement l’opérateur restant en C / C ++. Exemple:

 7 % 3 = 1 // dividend % divisor = remainder 

Ce qui rest à discuter, c’est comment traiter les entrées négatives dans cette opération%. C et C ++ modernes produisent une valeur de rest signée pour cette opération où le signe du résultat correspond toujours à l’entrée du dividende sans tenir compte du signe de l’entrée du diviseur.

En mathématiques, le résultat de l’opération modulo est le rest de la division euclidienne. Cependant, d’autres conventions sont possibles. Les ordinateurs et les calculasortingces ont différentes manières de stocker et de représenter des nombres; ainsi, leur définition de l’opération modulo dépend du langage de programmation et / ou du matériel sous-jacent.

  7 modulo 3 --> 1 7 modulo -3 --> -2 -7 modulo 3 --> 2 -7 modulo -3 --> -1