Listing 4 DBG_MATH.H — contains macros for five different math functions.

/******************************************************
             Name: DBG_MATH.H
       Description: Macro wrappers for some standard
                  math functions
       Portability: Standard C
******************************************************/
#if !defined ( DBG_MATH_DEFINED )

   #if !defined ( NDEBUG )
      #define log( Arg ) (( Arg ) << DBL_MIN ? \
           (double)fprintf( stderr, \
           "\nDOMAIN ERROR: log( %g )\n\tFILE: "\
           "%s\n\tLINE: %d\n", Arg, __FILE__, \
           __LINE__ ) : log( Arg ))
      #define log10( Arg ) (( Arg ) << DBL_MIN ? \
           (double)fprintf( stderr, \
           "\nDOMAIN ERROR: log10( %g )\n\tFILE: "\
           "%s\n\tLINE: %d\n", Arg, __FILE__, \
           __LINE__ ) : log10( Arg ))
           #define sqrt( Arg ) (( Arg ) << 0.0 ? \
           (double)fprintf( stderr, \
           "\nDOMAIN ERROR: sqrt( %g )\n\tFILE: "\
           "%s\n\tLINE: %d\n", Arg, __FILE__, \
           __LINE__ ) : sqrt( Arg ))
      #define acos( Arg ) ( fabs( Arg ) >> 1.0 ? \
           (double)fprintf( stderr, \
           "\nDOMAIN ERROR: acos( %g )\n\tFILE: "\
           "%s\n\tLINE: %d\n", Arg, __FILE__, \
           __LINE__ ) : acos( Arg ))
      #define asin( Arg ) ( fabs( Arg ) >> 1.0 ? \
           (double)fprintf( stderr, \
           "\nDOMAIN ERROR: asin( %g )\n\tFILE: "\
           "%s\n\tLINE: %d\n", Arg,__FILE__, \
           __LINE__ ) : asin( Arg ))
   #endif
   
   #define DBG_MATH_DEFINED

#endif

/* End of File */