delorie.com/archives/browse.cgi | search |
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-workers-bounces using -f |
From: | Kbwms AT aol DOT com |
Message-ID: | <1eb.12bb4eae.2cdd71ca@aol.com> |
Date: | Fri, 7 Nov 2003 17:08:10 EST |
Subject: | Re: C99 Functions Under Development and Checkout |
To: | djgpp-workers AT delorie DOT com |
MIME-Version: | 1.0 |
X-Mailer: | 8.0 for Windows sub 6021 |
Reply-To: | djgpp-workers AT delorie DOT com |
--part1_1eb.12bb4eae.2cdd71ca_boundary Content-Type: multipart/alternative; boundary="part1_1eb.12bb4eae.2cdd71ca_alt_boundary" --part1_1eb.12bb4eae.2cdd71ca_alt_boundary Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Attached to this email is the C code that implements global variable math_errhandling and associated macros. Noted below are additions to math.h: #define MATH_ERRNO 1 #define MATH_ERREXCEPT 2 extern int math_errhandling; int get_math_errhandling (void); int set_math_errhandling (int); void set_errno (int); int raise_except (int); Here are the headers for the four functions: // ------------------------------------------------------------ // set_math_errhandling - Sets global variable math_errhandling // ------------------------------------------------------------ // --------------------------------------------------------------------- // get_math_errhandling - Returns value of math_errhandling for this run // --------------------------------------------------------------------- // ---------------------------------------------------- // set_errno - Sets global variable errno when required // ---------------------------------------------------- // ------------------------------------------------------------- // raise_except - Raises floating point exceptions when required // ------------------------------------------------------------- I have implemented this feature in 49 C functions. My thanks to all who contributed to this effort. Comments are welcome. Please look the code over and let me know whether there is a gotcha lurking. KB Williams --part1_1eb.12bb4eae.2cdd71ca_alt_boundary Content-Type: text/html; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable <HTML><FONT FACE=3Darial,helvetica><FONT SIZE=3D3 FAMILY=3D"SERIF" FACE=3D"= Georgia" LANG=3D"0">Attached to this email is the C code that implements glo= bal variable math_errhandling and associated macros. Noted below are a= dditions to math.h:<BR> <BR> #define MATH_ERRNO 1<BR> #define MATH_ERREXCEPT 2<BR> extern int math_errhandling;<BR> <BR> <BR> int get_math_errhandling (void);<BR> int set_math_errhandling (int);<BR> void set_errno (int);<BR> int raise_except (int);<BR> <BR> Here are the headers for the four functions:<BR> <BR> // ------------------------------------------------------------<BR> // set_math_errhandling - Sets global variable math_errhandling<BR> // ------------------------------------------------------------<BR> <BR> // ---------------------------------------------------------------------<BR> // get_math_errhandling - Returns value of math_errhandling for this run<BR> // ---------------------------------------------------------------------<BR> <BR> // ----------------------------------------------------<BR> // set_errno - Sets global variable errno when required<BR> // ----------------------------------------------------<BR> <BR> // -------------------------------------------------------------<BR> // raise_except - Raises floating point exceptions when required<BR> // -------------------------------------------------------------<BR> <BR> <BR> I have implemented this feature in 49 C functions. My thanks to all wh= o contributed to this effort.<BR> <BR> <BR> Comments are welcome. Please look the code over and let me know whethe= r there is a gotcha lurking.<BR> <BR> <BR> KB Williams</FONT></HTML> --part1_1eb.12bb4eae.2cdd71ca_alt_boundary-- --part1_1eb.12bb4eae.2cdd71ca_boundary Content-Type: text/plain; name="errhndlr.c" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="errhndlr.c" // ---------- // errhndlr.c // ---------- #include <errno.h> #include <fenv.h> #include <math.h> int=09 math_errhandling; static int LocalMathErrHandling =3D 0; // ------------------------------------------------------------ // set_math_errhandling - Sets global variable math-errhandling // ------------------------------------------------------------ int=09set_math_errhandling(int Value) { if (LocalMathErrHandling =3D=3D 0)=09=09// First Pass? { =09Value &=3D (MATH_ERRNO | MATH_ERREXCEPT);=09// Yes =09if (Value =3D=3D 0) =09{ =09 Value =3D MATH_ERRNO | MATH_ERREXCEPT; =09} =09LocalMathErrHandling =3D Value;=09=09// Set local value } math_errhandling =3D LocalMathErrHandling;=09// (Re)set global value return Value; } // --------------------------------------------------------------------- // get_math_errhandling - Returns value of math_errhandling for this run // --------------------------------------------------------------------- int=09get_math_errhandling(void) { if (LocalMathErrHandling =3D=3D 0)=09=09// First Pass? { =09set_math_errhandling(math_errhandling);=09// Yes. } return LocalMathErrHandling; } // ---------------------------------------------------- // set_errno - Sets global variable errno when required // ---------------------------------------------------- void=09set_errno(int Value) { if (LocalMathErrHandling =3D=3D 0)=09=09// First pass here? { =09set_math_errhandling(math_errhandling);=09// Yes - set control variable } math_errhandling =3D LocalMathErrHandling;=09// Reset control variable if (math_errhandling & MATH_ERRNO)=09=09// Set errno when required { =09errno =3D Value; } } // ------------------------------------------------------------- // raise_except - Raises floating point exceptions when required // ------------------------------------------------------------- int raise_except(int Value) { int Retval =3D -1;=09=09=09// Default Return Value if (LocalMathErrHandling =3D=3D 0)=09=09// First pass here? { =09set_math_errhandling(math_errhandling); // Yes - set control variable } math_errhandling =3D LocalMathErrHandling; // Reset control variable if (math_errhandling & MATH_ERREXCEPT) // Raise exception when requ= ired { =09Retval =3D feraiseexcept(Value); } return Retval; } --part1_1eb.12bb4eae.2cdd71ca_boundary--
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |