Pourquoi la division de module échoue pour les non-entiers
En mathématiques, la division de module, désignée par l'opérateur modulo %, trouve le reste du division d'un entier par un autre, "enroulant" efficacement le résultat dans la plage désignée. Cependant, dans les langages de programmation comme C, cette opération ne fonctionne pas pour les opérandes non entiers, ce qui entraîne une erreur.
Comprendre le reste des entiers
Pour les entiers, le l’opération restante a un sens intuitif. Par exemple, en divisant 13 par 5, nous obtenons un quotient de 2 et un reste de 3. En effet, 5 rentre dans 13 exactement deux fois, laissant un excédent de 3.
Extension au réel Nombres
L'extension de la notion de reste aux nombres à virgule flottante, ou plus généralement aux nombres réels, introduit des complications. Considérons la division de 5,2 par 2,3. Mathématiquement, le résultat est d'environ 2,2609. Cependant, si l'on applique directement l'opérateur module aux opérandes, on obtient un résultat différent.
En C, 5,2 % 2,3 entraîne une erreur du compilateur car les opérandes ne sont pas des entiers. En effet, le standard C ne définit pas d'opération hybride qui calcule le quotient entier des nombres réels.
Fonctions de bibliothèque standard
Pour résoudre ce problème, le standard C La bibliothèque fournit deux fonctions : fmod et reste.
Pour résoudre le problème dans l'exemple de code donné, nous pouvons utiliser le fmod function :
#include <math.h> float sin(float x){ return limited_sin(fmod((x + M_PI), (2 *M_PI)) - M_PI); }
Notez que la fonction fmod s'attend à ce que ses opérandes soient du même type, nous devons donc les convertir en double si nécessaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!