Maison > développement back-end > C++ > Pourquoi le module ne fonctionne-t-il pas avec des nombres non entiers en C ?

Pourquoi le module ne fonctionne-t-il pas avec des nombres non entiers en C ?

DDD
Libérer: 2024-12-18 12:16:10
original
526 Les gens l'ont consulté

Why Doesn't Modulus Work with Non-Integers in C?

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.

  • fmod : Calcule le reste de la division à virgule flottante, mais il ne suit pas les règles d'arrondi de la division entière.
  • reste : Introduit en C99, il calcule le reste en suivant la règle d'arrondi de la division entière.

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal