Actual source code: mathinf.c

petsc-3.7.7 2017-09-25
Report Typos and Errors
  1: #define PETSC_SKIP_COMPLEX
  2: #include <petscsys.h>
  3: /*@C
  4:       PetscIsNormalReal - Returns PETSC_TRUE if the input value satisfies isnormal()

  6:     Input Parameter:
  7: .     a - the PetscReal Value

  9:      Notes: uses the C99 standard isnormal() on systems where they exist.
 10:       Uses isnormalq() with __float128
 11:       Otherwises always returns true

 13:      Level: beginner
 14: @*/
 15: #if defined(PETSC_USE_REAL___FLOAT128)
 16: PetscBool PetscIsNormalReal(PetscReal a)
 17: {
 18:   return PETSC_TRUE;
 19: }
 20: #elif defined(PETSC_HAVE_ISNORMAL)
 21: PetscBool PetscIsNormalReal(PetscReal a)
 22: {
 23:   return isnormal(a) ? PETSC_TRUE : PETSC_FALSE;
 24: }
 25: #else
 26: PetscBool PetscIsNormalReal(PetscReal a)
 27: {
 28:   return PETSC_TRUE;
 29: }
 30: #endif

 32: /*@C
 33:       PetscIsInfOrNanReal - Returns an error code if the input double has an infinity for Not-a-number (Nan) value, otherwise 0.

 35:     Input Parameter:
 36: .     a - the floating point number

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

 42:      Level: beginner
 43: @*/
 44: #if defined(PETSC_USE_REAL___FLOAT128)
 45: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
 46: {
 47:   return isinfq(a) || isnanq(a);
 48: }
 49: #elif defined(PETSC_HAVE_ISINF) && defined(PETSC_HAVE_ISNAN)
 50: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
 51: {
 52:   return isinf(a) || isnan(a);
 53: }
 54: #elif defined(PETSC_HAVE__FINITE) && defined(PETSC_HAVE__ISNAN)
 55: #if defined(PETSC_HAVE_FLOAT_H)
 56: #include <float.h>  /* Microsoft Windows defines _finite() in float.h */
 57: #endif
 58: #if defined(PETSC_HAVE_IEEEFP_H)
 59: #include <ieeefp.h>  /* Solaris prototypes these here */
 60: #endif
 61: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
 62: {
 63:   return !_finite(a) || _isnan(a);
 64: }
 65: #else
 66: PetscErrorCode PetscIsInfOrNanReal(PetscReal a)
 67: {
 68:   return ((a - a) != 0);
 69: }
 70: #endif

 72: /*@C
 73:       PetscIsNanReal - Returns an error code if the input double has a Not-a-number (Nan) value, otherwise 0.

 75:     Input Parameter:
 76: .     a - the floating point number

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

 82:      Level: beginner
 83: @*/
 84: #if defined(PETSC_USE_REAL___FLOAT128)
 85: PetscErrorCode PetscIsNanReal(PetscReal a)
 86: {
 87:   return isnanq(a);
 88: }
 89: #elif defined(PETSC_HAVE_ISINF) && defined(PETSC_HAVE_ISNAN)
 90: PetscErrorCode PetscIsNanReal(PetscReal a)
 91: {
 92:   return isnan(a);
 93: }
 94: #elif defined(PETSC_HAVE__FINITE) && defined(PETSC_HAVE__ISNAN)
 95: #if defined(PETSC_HAVE_FLOAT_H)
 96: #include <float.h>  /* Microsoft Windows defines _finite() in float.h */
 97: #endif
 98: #if defined(PETSC_HAVE_IEEEFP_H)
 99: #include <ieeefp.h>  /* Solaris prototypes these here */
100: #endif
101: PetscErrorCode PetscIsNanReal(PetscReal a)
102: {
103:   return _isnan(a);
104: }
105: #else
106: PetscErrorCode PetscIsNanReal(PetscReal a)
107: {
108:   return ((a - a) != 0);
109: }
110: #endif