Quelle est la différence entre “mod” et “le reste”?
Mon ami m'a dit qu'il y a des différences entre les "mod" et "le reste".
Si oui, quelles sont ces différences dans le C et le C++? N' '%' signifie soit "mod" ou "rem" en C?
- C'est probablement le mal définis pour les opérandes.
- Je ne suis pas un C personne 🙁 donc ne peux pas vraiment répondre présent à l'intérieur de la zone réponse. Mais s'il vous plaît jeter un oeil à ce article 🙂
- Ne vous signifie que la différence dépend des implémentations lorsque se produisent négatifs opérandes ? J'ai besoin de "oui" ou "non", parce que cette question de faire de soucis pour moi. Merci!
- % est reste. Réponse de détails ici -> blogs.msdn.com/b/ericlippert/archive/2011/12/05/...
- La question ne veut rien dire jusqu'à ce que vous définissez précisément ce que les termes signifient.
- la question est à propos de la signification des termes. Si vous dites que la question n'a pas de sens, en dépit de plusieurs gens de la compréhension de la manière que l'interlocuteur prévu, puis je pense que vous devez être plus précis ce que vous entendez par le mot "moyenne" 😉
- Il y a des concurrents significations de ces termes. Si la question peut spécifier lesquelles de ces concurrents significations est utilisé, alors il sera possible de dire en quoi ils diffèrent.
Vous devez vous connecter pour publier un commentaire.
Il y a une différence entre le module et le reste. Par exemple:
-21
mod4
est3
parce que-21 + 4 x 6
est3
.Mais
-21
divisé par4
donne-5
avec un reste de-1
.Pour les valeurs positives, il n'y a pas de différence.
%
était toujours le reste, mais il pourrait aussi être le module (c'est à dire toujours positif), parce qu'en C89 division entière a été autorisé à tour vers l'infini négatif au lieu de 0. Donc, en C89,-5 / 2
pourrait être-2
avec le reste-1
, ou-3
avec le reste1
, la mise en œuvre juste eu à le document. C99 retiré de la flexibilité, de sorte que maintenant-5 / 2
est toujours-2
.-21
mod4
est3
? Pourquoi le calcul est-21 + 4 x 6
?-21 + 4 x 6
est entre 0 et 3.-21
divisé par4
donne-6
avec un reste de3
En C,
%
est le reste1.C ne définit pas le "mod", comme l'entier le module de la fonction utilisée dans Division euclidienne ou d'autres modulo. "Euclidienne mod" diffère de C
a%b
opération, lorsquea
est négatif.Modulo comme division Euclidienne
Candidat modulo code:
Note à propos de la virgule flottante:
double fmod(double x, double y)
, bien qu'appelé "fmod", ce n'est pas la même que la division Euclidienne "mod", mais similaire à C reste entier:La désambiguïsation: C a également nommé la fonction
double modf(double value, double *iptr)
qui sauts de la valeur de l'argument intégrale et de la fraction de parties, dont chacune a le même type et de même signe que l'argument. Cela a peu à voir avec le "mod" discussion ici, sauf le nom de la similitude.1 Avant C99, C de la définition de
%
était encore le reste de la division, mais alors/
permis négatif quotients d'arrondir à la baisse plutôt que de "troncature vers zéro". Voir Pourquoi ne vous obtenez des valeurs différentes pour l'entier de la division en C89?. Ainsi, avec quelques pré-C99 compilation,%
code peut agir comme la division Euclidienne "mod". Le ci-dessusmodulo_Euclidean()
sera de travailler avec cette suppléant de la vieille école reste aussi.Module, dans l'arithmétique modulaire que vous faites référence, est la valeur de gauche au cours ou la valeur restante après division arithmétique. Ceci est communément connu comme le reste. % est officiellement le reste de l'opérateur en C /C++. Exemple:
Ce qu'il en reste de la discussion est de savoir comment traiter négatif des entrées de cette % de l'opération. Moderne, le C et le C++ produire un signé le reste de la valeur pour cette opération où le signe du résultat est toujours le dividende d'entrée sans égard pour le signe du diviseur d'entrée.
En mathématiques, le résultat du modulo est le reste de la division Euclidienne. Cependant, d'autres conventions sont possibles. Les ordinateurs et les calculatrices ont différentes façons de stocker et représenter les nombres; ainsi, leur définition de l'modulo dépend du langage de programmation et/ou le matériel sous-jacent.
0 ≤ r < |b|
ce qui signifie que le reste aka "modulo." est toujours d'au moins 0. Quelle définition êtes-vous à l'aide que les résultats de -2 et -1?a%b
eta modulo b
ont la même signification lorsqu'ilsa,b
sont positifs. C99 définit%
précisément avec des valeurs négatives. C appelle cela "le reste'. "Modulo" a plusieurs définitions dans le monde concernant les valeurs négatives. C spec utilise uniquement des "modulo" dans le contexte des nombres positifs.