En C ++, le "Sigfpe" Le gestionnaire de signaux gère le Exceptions de points flottants (FPES). Lorsqu'un utilisateur tente d'exécuter les tâches mentionnées, ce gestionnaire de signaux est appelé. Une fois que le gestionnaire de signaux est intervenu, il imprime un message d'erreur à la sortie standard et interrompre le programme.
Pourquoi les exceptions à virgule flottante se produisent-elles?
Exceptions de points flottants peut se produire en raison d'erreurs de programmation ou lorsqu'un programme tente de traiter une valeur hors spécification. Par exemple, si un programme essaie de diviser un entier de zéro, ou si un programme essaie de prendre la racine carrée d'un nombre négatif, un Exception de point flottante arrivera. De plus, certains Exceptions à point flottante peut se produire en raison des erreurs de mauvaise réalisation du processeur.
De nombreux facteurs, tels que l'opération inappropriée, le sous-flux, le débordement, la division de zéro et la précision, pourraient entraîner un Exception à point flottante. Nous couvrirons ces arguments un par un dans cette section.
1: opération illégale
Lorsqu'un utilisateur oublie d'exprimer une opération ou que l'opération n'a pas de valeur mathématique, le programme ne parvient pas à s'exécuter en raison d'une opération non valide. Cela comprend des calculs tels que la racine carrée et le logarithme des nombres négatifs, par exemple. Bien qu'il soit possible de prendre la racine carrée d'un nombre négatif lorsqu'il s'agit de nombres complexes, il n'y a pas de mécanisme informatique pour exprimer cela.
De plus, une opération incorrecte se traduira si un logiciel exécute un point flottant opération sur un emplacement uniquement. Cela est dû à un décalage entre l'opération que vous essayez de réaliser les données (opération à virgule flottante) et les données stockées (entier).
2: Division zéro
UN Exception à point flottante est lancé si vous essayez de diviser un entier par zéro. La même chose se produit lorsque vous essayez de diviser par Nan ou Infinity. Voici quelques exemples: 1/0, log (0).
3: débordement
Lorsqu'une opération renvoie une valeur en dehors de sa plage attendue, une exception de débordement se produit. La valeur est plus ou inférieure à la plus petite valeur représentable, selon cette déclaration.
4: Underflow
Underflow se produit lorsqu'un calcul donne un résultat inférieur à ce qu'un type de données peut contenir.
5: inexact
Lorsque l'issue d'une opération diffère de ce qui était prévu, ceci est connu comme une exception inexacte. Lorsque l'opération est effectuée avec une précision non liée et une plage d'exposants, cela se produit.
Dans certains cas, de telles situations peuvent être traitées gracieusement. Par exemple, lorsqu'un programme tente de diviser un nombre de zéro, il est généralement préférable de renvoyer un message d'erreur et de terminer gracieusement le programme au lieu de permettre au programme de s'écraser.
#inclureDans ce code, le Div La fonction est appelée par le bloc d'essai à l'intérieur de principal. Si la dénom n'est pas égal à zéro, le Div La fonction renvoie le quotient; Si c'est le cas, un Exception d'erreur d'exécution Est lancé. Avant d'appeler la fonction avec l'objet d'erreur d'exécution E, le bloc de capture intercepte cette exception et imprime le texte "Erreur est survenue". Il est utilisé pour identifier l'exception. L'exception de la classe standard, qui est décrite dans le stdexcept Fichier d'en-tête, a une fonction virtuelle appelée quoi(). Le message "Erreur mathématique: tenté de diviser par 0" est imprimé en conséquence.
Sortir
Pour prévenir Exceptions de points flottants En C ++, il est essentiel de vérifier tous les paramètres transmis aux fonctions, d'utiliser des formats appropriés et de tester explicitement les diviseurs pour les valeurs nulles. De plus, lorsque vous utilisez des types de données doubles, il est important d'élargir la plage du type de données si le programme nécessite des résultats arithmétiques plus importants.
Conclusion
Exceptions de points flottants en C ++ sont causés par des opérations non valides sur des valeurs numériques et peuvent affecter la capacité du programme à exécuter correctement. Pour éviter de telles erreurs, il est important de vérifier tous les paramètres transmis aux fonctions et d'utiliser les types de données appropriés. De plus, il est avantageux d'attraper Exceptions de points flottants.