Date: 2013-07-02T14:39:12+00:00

Actual source code: mathinf.c
petsc-3.4.2 2013-07-02

      1: #include <petscsys.h>
      2: /*@C
      3:       PetscIsInfOrNan - Returns 1 if the input double has an infinity for Not-a-number (Nan) value, otherwise 0.

      5:     Input Parameter:
      6: .     a - the double

      9:      Notes: uses the C99 standard isinf() and isnan() on systems where they exist.
     10:       Otherwises uses ((a - a) != 0.0), note that some optimizing compiles compile
     11:       out this form, thus removing the check.

     13:      Level: beginner
     14: @*/
     15: #if defined(PETSC_USE_REAL___FLOAT128)
     16: PetscErrorCode PetscIsInfOrNanScalar(PetscScalar a)
     17: {
     18:   return isinfq(PetscAbsScalar(a)) || isnanq(PetscAbsScalar(a));
     19: }
     20: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
     21: {
     22:   return isinfq(a) || isnanq(a);
     23: }
     24: #elif defined(PETSC_HAVE_ISINF) && defined(PETSC_HAVE_ISNAN)
     25: PetscErrorCode PetscIsInfOrNanScalar(PetscScalar a)
     26: {
     27:   return isinf(PetscAbsScalar(a)) || isnan(PetscAbsScalar(a));
     28: }
     29: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
     30: {
     31:   return isinf(a) || isnan(a);
     32: }
     33: #elif defined(PETSC_HAVE__FINITE) && defined(PETSC_HAVE__ISNAN)
     34: #if defined(PETSC_HAVE_FLOAT_H)
     35: #include "float.h"  /* Microsoft Windows defines _finite() in float.h */
     36: #endif
     37: #if defined(PETSC_HAVE_IEEEFP_H)
     38: #include "ieeefp.h"  /* Solaris prototypes these here */
     39: #endif
     40: PetscErrorCode PetscIsInfOrNanScalar(PetscScalar a)
     41: {
     42:   return !_finite(PetscAbsScalar(a)) || _isnan(PetscAbsScalar(a));
     43: }
     44: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
     45: {
     46:   return !_finite(a) || _isnan(a);
     47: }
     48: #else
     49: PetscErrorCode PetscIsInfOrNanScalar(PetscScalar a)
     50: {
     51:   return  ((a - a) != (PetscScalar)0);
     52: }
     53: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
     54: {
     55:   return ((a - a) != 0);
     56: }
     57: #endif