mtherr.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* mtherr.c
  2. *
  3. * Library common error handling routine
  4. *
  5. *
  6. *
  7. * SYNOPSIS:
  8. *
  9. * char *fctnam;
  10. * int code;
  11. * int mtherr();
  12. *
  13. * mtherr( fctnam, code );
  14. *
  15. *
  16. *
  17. * DESCRIPTION:
  18. *
  19. * This routine may be called to report one of the following
  20. * error conditions (in the include file mconf.h).
  21. *
  22. * Mnemonic Value Significance
  23. *
  24. * DOMAIN 1 argument domain error
  25. * SING 2 function singularity
  26. * OVERFLOW 3 overflow range error
  27. * UNDERFLOW 4 underflow range error
  28. * TLOSS 5 total loss of precision
  29. * PLOSS 6 partial loss of precision
  30. * EDOM 33 Unix domain error code
  31. * ERANGE 34 Unix range error code
  32. *
  33. * The default version of the file prints the function name,
  34. * passed to it by the pointer fctnam, followed by the
  35. * error condition. The display is directed to the standard
  36. * output device. The routine then returns to the calling
  37. * program. Users may wish to modify the program to abort by
  38. * calling exit() under severe error conditions such as domain
  39. * errors.
  40. *
  41. * Since all error conditions pass control to this function,
  42. * the display may be easily changed, eliminated, or directed
  43. * to an error logging device.
  44. *
  45. * SEE ALSO:
  46. *
  47. * mconf.h
  48. *
  49. */
  50. /*
  51. Cephes Math Library Release 2.0: April, 1987
  52. Copyright 1984, 1987 by Stephen L. Moshier
  53. Direct inquiries to 30 Frost Street, Cambridge, MA 02140
  54. */
  55. #include <stdio.h>
  56. #include <math.h>
  57. int merror = 0;
  58. /* Notice: the order of appearance of the following
  59. * messages is bound to the error codes defined
  60. * in mconf.h.
  61. */
  62. static char *ermsg[7] = {
  63. "unknown", /* error code 0 */
  64. "domain", /* error code 1 */
  65. "singularity", /* et seq. */
  66. "overflow",
  67. "underflow",
  68. "total loss of precision",
  69. "partial loss of precision"
  70. };
  71. int mtherr( name, code )
  72. char *name;
  73. int code;
  74. {
  75. /* Display string passed by calling program,
  76. * which is supposed to be the name of the
  77. * function in which the error occurred:
  78. */
  79. printf( "\n%s ", name );
  80. /* Set global error message word */
  81. merror = code;
  82. /* Display error message defined
  83. * by the code argument.
  84. */
  85. if( (code <= 0) || (code >= 7) )
  86. code = 0;
  87. printf( "%s error\n", ermsg[code] );
  88. /* Return to calling
  89. * program
  90. */
  91. return( 0 );
  92. }