Exception à point flottante C ++ Pourquoi et qu'est-ce que c'est?

Exception à point flottante C ++ Pourquoi et qu'est-ce que c'est?
Exception à point flottante se produit lorsqu'un logiciel essaie d'effectuer une opération inappropriée sur un numéro numérique. Ce type d'exception se produit lorsqu'un utilisateur tente d'exécuter des opérations non valides, telles que la division par zéro, la division d'un nombre négatif d'un nombre uniforme, prenant la racine carrée d'un nombre négatif, ou débordement d'un calcul qui dépasse la limite de la limite de la Double type de données.

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.

#inclure
#inclure
Utilisation de Namespace Std;
float div (float num, float den)

if (den == 0)
lancer runtime_error ("Erreur mathématique: tenté de diviser par 0 \ n");

return (num / den);

int main()

float num, denom, résultat;
num = 10;
denom = 0;
essayer
result = div (num, denom);
couter << "The quotient is " << result << endl;

catch (runtime_error & e)
couter << "Exception occurred" << endl << e.what();

Dans 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.