2017-09-05 1 views
2

Existe-t-il un moyen de combiner NaN et des nombres ordinaires d'une manière différente que celle habituellement utilisée dans Fortran?Négliger des termes NaN dans une sommation dans Fortran

J'ai plusieurs sommations qui contiennent des termes 'sûrs', qui ne peuvent pas être NaN, et d'autres termes qui peuvent être NaN. Je voudrais que l'évaluation de l'expression néglige les addenda dans le cas où ils sont NaN.

Je ne peux pas me débarrasser d'eux en les multipliant par un facteur nul quand ils sont NaN comme NaN x 0 donne NaN de toute façon. Des idées?

Merci

Répondre

4

Il n'y a aucune opération arithmétique qui ne se propage pas NaN. Donc des idées comme multiplier par 0 ne fonctionneront pas.

Votre seule solution est de manquer les termes NaN dans la somme. Est-ce que quelque chose basé sur

IF (IEEE_IS_NAN(x)) 

Si vous n'utilisez pas IEEE754 ou utilisez une ancienne norme de FORTRAN, vous pouvez utiliser

IF(x .NE. x)

qui sera vrai si et seulement si x est NaN.

+1

isnan n'est pas un standard Fortran intrinsèque. Mieux vaut utiliser ieee_is_nan, voir https://software.intel.com/en-us/node/692942 –

+1

De plus, certaines options du compilateur optimisent l'utilisation de 'x .ne. x', alors méfiez-vous. Testez toujours votre détecteur NaN pour chaque système. – Ross

+0

@IanBush: En effet; Je n'ai pas utilisé FORTRAN depuis quelque temps maintenant, mais dans le passé profond et lointain j'ai utilisé 'IF (x .NE. X)'. – Bathsheba