Actual source code: ex34.c

  1: static char help[] = "Tests IsInf/IsNan routines.\n";

  3: #include <petscsys.h>

  5: PETSC_INTERN PetscReal zero;
  6: PetscReal              zero = 0;
  7: PETSC_INTERN PetscReal zero2;
  8: PetscReal              zero2 = 0;

 10: #define CALL(call) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%-32s -> %s\n", #call, (call) ? "True" : "False"))

 12: int main(int argc, char **argv)
 13: {
 14:   PetscReal neg_zero = PetscRealConstant(-0.0);
 15:   PetscReal pos_zero = PetscRealConstant(+0.0);
 16:   PetscReal neg_one  = PetscRealConstant(-1.0);
 17:   PetscReal pos_one  = PetscRealConstant(+1.0);
 18:   PetscReal neg_inf  = neg_one / zero;          /* -inf */
 19:   PetscReal pos_inf  = pos_one / zero;          /* +inf */
 20:   PetscReal x_nan    = zero2 / zero; /*  NaN */ /* some compilers may optimize out zero/zero and set x_nan = 1! */

 22:   PetscFunctionBeginUser;
 23:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));

 25:   CALL(PetscIsInfReal(neg_zero));
 26:   CALL(PetscIsInfReal(pos_zero));
 27:   CALL(PetscIsInfReal(neg_one));
 28:   CALL(PetscIsInfReal(pos_one));
 29:   CALL(PetscIsInfReal(neg_inf));
 30:   CALL(PetscIsInfReal(pos_inf));
 31:   CALL(PetscIsInfReal(x_nan));

 33:   CALL(PetscIsNanReal(neg_zero));
 34:   CALL(PetscIsNanReal(pos_zero));
 35:   CALL(PetscIsNanReal(neg_one));
 36:   CALL(PetscIsNanReal(pos_one));
 37:   CALL(PetscIsNanReal(neg_inf));
 38:   CALL(PetscIsNanReal(pos_inf));
 39:   CALL(PetscIsNanReal(x_nan));

 41:   PetscCall(PetscFinalize());
 42:   return 0;
 43: }

 45: /*TEST

 47:    test:
 48:       args: -fp_trap 0
 49:       output_file: output/ex34.out

 51: TEST*/