C99: quelle est la configuration recommandée façon de gérer les exceptions soulevées par les " pow()` (débordement ou un nombre complexe)
l'exécution de
double result = pow(base, exponent);
arbitraire base
et exponent
peut entraîner dans une tentative pour calculer une valeur trop grande ou trop complexe.
Par exemple avec base=-2
, exponent=.5
(racine carrée de 2)
Devrais-je vérifier si result==NAN
ou result==HUGE_VAL
?
Serait qu'un code soit en C99 conformes et de la croix-plate-forme ?
Si vous voulez attraper ce cas, pensez à activer le point flottant exceptions et les attraper.
Je ne connaissais pas floating point exception. Pourriez-vous m'indiquer une référence ou de poster un extrait de code comme réponse? Merci
Aucune exception sur C. Vous devrez vérifier errno.
C a floating point exception. Veuillez lire avant de prendre incorrect commentaires.
Vous ne voudriez pas induire en erreur quelqu'un qui savait C, @cecilio. Et le traitement des exceptions de virgule flottante est configurable. Ils peuvent même ne pas être signalés par
Je ne connaissais pas floating point exception. Pourriez-vous m'indiquer une référence ou de poster un extrait de code comme réponse? Merci
Aucune exception sur C. Vous devrez vérifier errno.
C a floating point exception. Veuillez lire avant de prendre incorrect commentaires.
Vous ne voudriez pas induire en erreur quelqu'un qui savait C, @cecilio. Et le traitement des exceptions de virgule flottante est configurable. Ils peuvent même ne pas être signalés par
errno
.OriginalL'auteur Paolo | 2016-02-07
Vous devez vous connecter pour publier un commentaire.
Attraper SIGFPE et mourir bruyamment. Il y a quelque chose de pire qu'un programme qui s'est écrasé: celui qui tranquillement donne les réponses incorrectes.
Exemple de code ci-dessous est extrait à partir d'un site au hasard sur SIGFPE
pow()
) il suffit de retourner une valeur d'erreur sur un paramètre spécifique. Pour cela, j'ai besoin d'une variable globale où le gestionnaire de signal serait d'écrire qu'une exception s'est produite, mais cette approche permettrait de faire ma fonction n'est plus multithread coffre-fort. S'il vous plaît, corrigez-moi si je me manque quelque chose...OriginalL'auteur msw