_matherr.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 34 行

C
34
字号
#include <stdio.h>
#include <math.h>

extern  void    __set_EDOM();
extern  void    __set_ERANGE();
extern  int     __matherr( struct exception * );
#pragma aux     __matherr "*";

static char *Msgs[] = {
    0,
    "Domain error",
    "Argument singularity",
    "Overflow range error",
    "Underflow range error",
    "Total loss of significance",
    "Partial loss of significance"
};

int     (*__MathErrRtn)( struct exception * ) = __matherr;      /* 24-mar-91 */

double _matherr( struct _exception *excp )
/***************************************/
{
    if( (*__MathErrRtn)( excp ) == 0 ) {
/*      fprintf( stderr, "%s in %s\n", Msgs[excp->type], excp->name ); */
        fputs( Msgs[excp->type], stderr );
        fputs( " in ", stderr );
        fputs( excp->name, stderr );
        fputc( '\n', stderr );
        excp->type == DOMAIN ? __set_EDOM() : __set_ERANGE();
    }
    return( excp->retval );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?