Actual source code: mathinf.c
petsc-3.7.1 2016-05-15
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