OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libm/] [common/] [s_matherr.c] - Rev 1765

Compare with Previous | Blame | View Log

 
/* @(#)s_matherr.c 5.1 93/09/24 */
/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice 
 * is preserved.
 * ====================================================
 */
 
/*
 
FUNCTION
	<<matherr>>---modifiable math error handler
 
INDEX 
	matherr
 
ANSI_SYNOPSIS
	#include <math.h>
	int matherr(struct exception *<[e]>);
 
TRAD_SYNOPSIS
	#include <math.h>
	int matherr(*<[e]>)
	struct exception *<[e]>;
 
DESCRIPTION
<<matherr>> is called whenever a math library function generates an error.
You can replace <<matherr>> by your own subroutine to customize
error treatment.  The customized <<matherr>> must return 0 if
it fails to resolve the error, and non-zero if the error is resolved.
 
When <<matherr>> returns a nonzero value, no error message is printed
and the value of <<errno>> is not modified.  You can accomplish either
or both of these things in your own <<matherr>> using the information
passed in the structure <<*<[e]>>>.
 
This is the <<exception>> structure (defined in `<<math.h>>'):
.	struct exception {
.	        int type;
.	        char *name;
.	        double arg1, arg2, retval;
.		int err;
.	};
 
The members of the exception structure have the following meanings:
o+
o type
The type of mathematical error that occured; macros encoding error
types are also defined in `<<math.h>>'.
 
o name
a pointer to a null-terminated string holding the
name of the math library function where the error occurred.
 
o arg1, arg2
The arguments which caused the error.
 
o retval
The error return value (what the calling function will return).
 
o err
If set to be non-zero, this is the new value assigned to <<errno>>.
o-
 
The error types defined in `<<math.h>>' represent possible mathematical
errors as follows:
 
o+
o DOMAIN
An argument was not in the domain of the function; e.g. <<log(-1.0)>>.
 
o SING
The requested calculation would result in a singularity; e.g. <<pow(0.0,-2.0)>>
 
o OVERFLOW
A calculation would produce a result too large to represent; e.g.
<<exp(1000.0)>>. 
 
o UNDERFLOW
A calculation would produce a result too small to represent; e.g.
<<exp(-1000.0)>>. 
 
o TLOSS
Total loss of precision.  The result would have no significant digits;
e.g. <<sin(10e70)>>. 
 
o PLOSS
Partial loss of precision.
o-
 
 
RETURNS
The library definition for <<matherr>> returns <<0>> in all cases.
 
You can change the calling function's result from a customized <<matherr>>
by modifying <<e->retval>>, which propagates backs to the caller.
 
If <<matherr>> returns <<0>> (indicating that it was not able to resolve
the error) the caller sets <<errno>> to an appropriate value, and prints
an error message.
 
PORTABILITY
<<matherr>> is not ANSI C.  
*/
 
#include "fdlibm.h"
 
#ifdef __STDC__
	int matherr(struct exception *x)
#else
	int matherr(x)
	struct exception *x;
#endif
{
	int n=0;
	if(x->arg1!=x->arg1) return 0;
	return n;
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.