Comment utiliser l’opérateur% pour les valeurs flottantes dans c

Lorsque j’utilise l’opérateur% sur les valeurs float, j’obtiens une erreur indiquant que “les opérandes non valides deviennent% binary (ont ‘float’ et ‘double’)”. Je souhaite saisir uniquement la valeur des entiers, mais les nombres sont très grands (pas dans la plage de type int) afin d’éviter les inconvénients, j’utilise float.Il n’y a-t-il aucun moyen d’utiliser l’opérateur% sur de telles valeurs entières ????

Vous pouvez utiliser la fonction fmod de la bibliothèque mathématique standard. Son prototype est dans l’en-tête standard .

Il vaut probablement mieux utiliser long long , qui offre une précision supérieure à double dans la plupart des systèmes.

Remarque: si vos nombres sont plus grands que ce que vous pouvez garder long long , alors fmod ne se comportera probablement pas comme vous le souhaitez. Dans ce cas, votre meilleur choix est une bibliothèque bigint, telle que celle-ci .

L’opérateur % n’est défini que pour les opérandes de type entier; vous devez utiliser les fonctions de la bibliothèque fmod* pour les types à virgule flottante:

 #include  double fmod(double x, double y); float fmodf(float x, float y); long double fmodl(long double x, long double y); 

considérer: int 32 bits et long long int de 64 bits

Oui, l’opérateur% (modulo) ne fonctionne pas avec float et double .. si vous voulez effectuer l’opération modulo sur un grand nombre, vous pouvez vérifier long long int(64bits) , cela pourrait vous aider.

La plage est toujours supérieure à 64 bits. Dans ce cas, vous devez stocker les données dans .. ssortingng et effectuer l’opération modulo par algorithme.

ou vous pouvez utiliser n’importe quel langage de script comme python

Si vous souhaitez utiliser un int long long, n’utilisez pas un format qui n’est pas idéal pour votre problème si un meilleur format existe.

Lorsque je n’ai pas eu un access facile à fmod ou à d’autres bibliothèques (par exemple, en effectuant un rapide esquisse Arduino), je constate que les éléments suivants fonctionnent assez bien:

 float someValue = 0.0; // later... // Since someValue = (someValue + 1) % 256 won't work for floats... someValue += 1.0; // (or whatever increment you want to use) while (someValue >= 256.0){ someValue -= 256.0; }