Voici une fonction C qui traite les valeurs entières OU fractionnaires positives OU négatives pour LES DEUX OPÉRATIONS
#include <math.h>
float mod(float a, float N) {return a - N*floor(a/N);} //return in range [0, N)
C'est certainement la solution la plus élégante d'un point de vue mathématique. Cependant, je ne suis pas sûr qu'elle soit robuste dans la gestion des entiers. Parfois, des erreurs de virgule flottante se glissent lors de la conversion int -> fp -> int.
J'utilise ce code pour les s non-int, et une fonction séparée pour les int.
NOTE : il faut piéger N = 0 !
Code du testeur :
#include <math.h>
#include <stdio.h>
float mod(float a, float N)
{
float ret = a - N * floor (a / N);
printf("%f.1 mod %f.1 = %f.1 \n", a, N, ret);
return ret;
}
int main (char* argc, char** argv)
{
printf ("fmodf(-10.2, 2.0) = %f.1 == FAIL! \n\n", fmodf(-10.2, 2.0));
float x;
x = mod(10.2f, 2.0f);
x = mod(10.2f, -2.0f);
x = mod(-10.2f, 2.0f);
x = mod(-10.2f, -2.0f);
return 0;
}
(Note : Vous pouvez compiler et exécuter le programme directement à partir de CodePad : http://codepad.org/UOgEqAMA )
Sortie :
fmodf(-10.2, 2.0) = -0.20 == FAIL !
10,2 mod 2,0 = 0,2
10,2 mod -2,0 = -1,8
-10,2 mod 2,0 = 1,8
-10,2 mod -2,0 = -0,2
1 votes
Je ne pense pas qu'il s'agisse d'un "double" de stackoverflow.com/questions/828092/ selon la définition officielle. Il n'est pas vrai que les réponses de cette question peuvent être fusionnées avec celles de cette question, car cette question ne porte que sur le module, et non sur la division. Mais je pense que cette question est couverte par celle-là, donc c'est proche. Ma réponse est déjà là, pour info.
0 votes
Peut-être que ce fil de discussion devrait être scindé, car il pose deux questions distinctes. La meilleure façon de procéder pourrait être de reposer la question de la division séparément, puis de l'orienter vers cette réponse. Je laisse cette tâche à quelqu'un qui comprend mieux les mécanismes de ce site Web.
3 votes
@Pi owhere is
%
dit être le modulo ... c'est le reste .1 votes
Voici un autre fil de discussion dont il s'agit d'un "duplicata" : stackoverflow.com/questions/1082917/ Juste pour référence à ce sujet
%
problème.0 votes
Si vous ne divisez que des puissances de deux, il est préférable d'utiliser and :
(-1) & 8 == 7
0 votes
@Henry W.
(-1) & 8 == 7
? ??(-1) & 8
ne donnera que 0 ou 8, et non 7. Vous vouliez peut-être dire(-1) & (8-1)
?