C ++ feclearexcept () - bibliothèque standard C ++

La fonction feclearexcept () en C ++ tente d'effacer les indicateurs d'exception en virgule flottante spécifiés par l'argument excepts.

La fonction feclearexcept () est définie dans le fichier d'en-tête.

Prototype de feclearexcept ()

 int feclearexcept (int sauf);

Pour que la fonction fonctionne, vous devez activer FENV_ACCESS , ce qui donnera à votre programme l'accès à l'environnement en virgule flottante pour tester les exceptions soulevées.

Paramètres de feclearexcept ()

  • sauf: liste de masque de bits des indicateurs d'exception à effacer
Macros acceptées par Bitmask
Macro Type La description
FE_DIVBYZERO Erreur de pôle Division par zéro
FE_INEXACT Inexact Résultats non exacts tels que (1.0 / 3.0)
FE_INVALID Erreur de domaine Au moins un argument utilisé est une valeur pour laquelle la fonction n'est pas définie
FE_OVERFLOW Erreur de plage de débordement Le résultat est trop grand pour être représenté par le type de retour
FE_UNDERFLOW Erreur de plage de dépassement inférieur Le résultat est trop petit pour être représenté par le type de retour
FE_ALL_EXCEPT Toutes les exceptions Toutes les exceptions prises en charge par la mise en œuvre

feclearexcept () Valeur de retour

  • La fonction feclearexcept () renvoie une valeur nulle si toutes les exceptions ont été effacées ou si excepts est égal à zéro.
  • Il renvoie une valeur différente de zéro si une erreur se produit.

Exemple: Comment fonctionne la fonction feclearexcept ()?

 #include #include #include #pragma STDC FENV_ACCESS ON using namespace std; int main() ( // clears all exceptions feclearexcept(FE_ALL_EXCEPT); cout << "1/0 = " << 1.0/0.0 << endl; // tests if above statement raised the FE_DIVBYZERO exception if(fetestexcept(FE_DIVBYZERO)) ( cout << "FE_DIVBYZERO is set" << endl; ) else ( cout << "FE_DIVBYZERO is not set" << endl; ) feclearexcept(FE_ALL_EXCEPT); cout << "sqrt(-1) = " << sqrt(-1) << endl; if(fetestexcept(FE_INVALID)) ( cout << "FE_INVALID is set" << endl; ) else ( cout << "FE_INVALID is not set" << endl; ) )

Lorsque vous exécutez le programme, la sortie sera:

 1/0 = inf FE_DIVBYZERO est défini sqrt (-1) = -nan FE_INVALID est défini

Articles intéressants...