diff packages/language/c/libm/current/src/misc/standard.c @ 3260:77f9d3253c3e

Add: Complex number header and library (single and double precision floating point), port from Newlib. Add: Single precision floating point library, port from Newlib. [ Bugzilla 1001539 ]
author vae
date Sun, 25 Aug 2013 14:38:57 +0000
parents 74dbf4c3f2e1
children
line wrap: on
line diff
--- a/packages/language/c/libm/current/src/misc/standard.c
+++ b/packages/language/c/libm/current/src/misc/standard.c
@@ -1,14 +1,14 @@
 //===========================================================================
 //
-//      signgam.cxx
+//      standard_float.c
 //
-//      Support sign of the gamma*() functions in Math library
+//      Standard conformance (non-IEEE) on exception cases.
 //
 //===========================================================================
 // ####ECOSGPLCOPYRIGHTBEGIN####                                            
 // -------------------------------------------                              
 // This file is part of eCos, the Embedded Configurable Operating System.   
-// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2013 Free Software Foundation, Inc.
 //
 // eCos is free software; you can redistribute it and/or modify it under    
 // the terms of the GNU General Public License as published by the Free     
@@ -39,793 +39,21 @@
 //===========================================================================
 //#####DESCRIPTIONBEGIN####
 //
-// Author(s):   jlarmour
-// Contributors:  jlarmour
-// Date:        1998-02-13
+// Author(s):   ilijak
+// Contributors:  
+// Date:        2013-06-17
 // Purpose:     
-// Description: Contains the accessor functions to get and set the stored sign
-//              of the gamma*() functions in the math library
+// Description: 
+//              
 // Usage:       
 //
 //####DESCRIPTIONEND####
 //
 //===========================================================================
 
-/* @(#)k_standard.c 1.3 95/01/18 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunSoft, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
- * is preserved.
- * ====================================================
- *
- */
-
-// CONFIGURATION
-
-#include <pkgconf/libm.h>   // Configuration header
-
-// Include the Math library?
-#ifdef CYGPKG_LIBM
-
-// INCLUDES
-
-#include <cyg/infra/cyg_type.h>    // Common type definitions and support
-#include <cyg/infra/cyg_trac.h>    // Tracing macros
-
-#include <math.h>                  // Main header for math library
-#include "mathincl/fdlibm.h"       // Internal header for math library
-
-#include <cyg/error/codes.h>       // standard error codes
-
-#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY
-#include <errno.h>
-#else
-static int errno; // this whole file won't be used if we're IEEE only, but
-                  // doing this keeps the compiler happy
-#endif
-
-#ifdef CYGSEM_LIBM_USE_STDERR
-
-#include <stdio.h>
-#define WRITE2(u,v)     fputs(u, stderr)
-
-#else
-
-#define WRITE2(u,v)     0
-
-#endif // ifdef CYGSEM_LIBM_USE_STDERR
-
-
-// GLOBALS
-
-static const double zero = 0.0;
-
-// FUNCTIONS
-
-/* 
- * Standard conformance (non-IEEE) on exception cases.
- * Mapping:
- *      1 -- acos(|x|>1)
- *      2 -- asin(|x|>1)
- *      3 -- atan2(+-0,+-0)
- *      4 -- hypot overflow
- *      5 -- cosh overflow
- *      6 -- exp overflow
- *      7 -- exp underflow
- *      8 -- y0(0)
- *      9 -- y0(-ve)
- *      10-- y1(0)
- *      11-- y1(-ve)
- *      12-- yn(0)
- *      13-- yn(-ve)
- *      14-- lgamma(finite) overflow
- *      15-- lgamma(-integer)
- *      16-- log(0)
- *      17-- log(x<0)
- *      18-- log10(0)
- *      19-- log10(x<0)
- *      20-- pow(0.0,0.0)
- *      21-- pow(x,y) overflow
- *      22-- pow(x,y) underflow
- *      23-- pow(0,negative) 
- *      24-- pow(neg,non-integral)
- *      25-- sinh(finite) overflow
- *      26-- sqrt(negative)
- *      27-- fmod(x,0)
- *      28-- remainder(x,0)
- *      29-- acosh(x<1)
- *      30-- atanh(|x|>1)
- *      31-- atanh(|x|=1)
- *      32-- scalb overflow
- *      33-- scalb underflow
- *      34-- j0(|x|>X_TLOSS)
- *      35-- y0(x>X_TLOSS)
- *      36-- j1(|x|>X_TLOSS)
- *      37-- y1(x>X_TLOSS)
- *      38-- jn(|x|>X_TLOSS, n)
- *      39-- yn(x>X_TLOSS, n)
- *      40-- gamma(finite) overflow
- *      41-- gamma(-integer)
- *      42-- pow(NaN,0.0)
- *      43-- ldexp overflow
- *      44-- ldexp underflow
- */
-
-
-double
-__kernel_standard(double x, double y, int type) 
-{
-        struct exception exc;
+#define CYG_STANDARD_FLOAT_T double
+#define CYGSTR_FLOAT_SUFFIX
+#define MATHERR(__exc_p) matherr(__exc_p)
+#include "standard.inl"
 
-#ifdef CYGSEM_LIBM_USE_STDERR
-        (void) fflush(stdout);
-#endif
-        exc.arg1 = x;
-        exc.arg2 = y;
-        switch(type) {
-            case 1:
-                /* acos(|x|>1) */
-                exc.type = DOMAIN;
-                exc.name = "acos";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("acos: DOMAIN error\n", 19);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 2:
-                /* asin(|x|>1) */
-                exc.type = DOMAIN;
-                exc.name = "asin";
-                exc.retval = zero;
-                if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("asin: DOMAIN error\n", 19);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 3:
-                /* atan2(+-0,+-0) */
-                exc.arg1 = y;
-                exc.arg2 = x;
-                exc.type = DOMAIN;
-                exc.name = "atan2";
-                exc.retval = zero;
-                if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("atan2: DOMAIN error\n", 20);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 4:
-                /* hypot(finite,finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "hypot";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 5:
-                /* cosh(finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "cosh";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 6:
-                /* exp(finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "exp";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 7:
-                /* exp(finite) underflow */
-                exc.type = UNDERFLOW;
-                exc.name = "exp";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 8:
-                /* y0(0) = -inf */
-                exc.type = DOMAIN;      /* should be SING for IEEE */
-                exc.name = "y0";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("y0: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 9:
-                /* y0(x<0) = NaN */
-                exc.type = DOMAIN;
-                exc.name = "y0";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("y0: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 10:
-                /* y1(0) = -inf */
-                exc.type = DOMAIN;      /* should be SING for IEEE */
-                exc.name = "y1";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("y1: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 11:
-                /* y1(x<0) = NaN */
-                exc.type = DOMAIN;
-                exc.name = "y1";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("y1: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 12:
-                /* yn(n,0) = -inf */
-                exc.type = DOMAIN;      /* should be SING for IEEE */
-                exc.name = "yn";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("yn: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 13:
-                /* yn(x<0) = NaN */
-                exc.type = DOMAIN;
-                exc.name = "yn";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("yn: DOMAIN error\n", 17);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 14:
-                /* lgamma(finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "lgamma";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 15:
-                /* lgamma(-integer) or lgamma(0) */
-                exc.type = SING;
-                exc.name = "lgamma";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("lgamma: SING error\n", 19);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 16:
-                /* log(0) */
-                exc.type = SING;
-                exc.name = "log";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("log: SING error\n", 16);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 17:
-                /* log(x<0) */
-                exc.type = DOMAIN;
-                exc.name = "log";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("log: DOMAIN error\n", 18);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 18:
-                /* log10(0) */
-                exc.type = SING;
-                exc.name = "log10";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("log10: SING error\n", 18);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 19:
-                /* log10(x<0) */
-                exc.type = DOMAIN;
-                exc.name = "log10";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = -HUGE;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("log10: DOMAIN error\n", 20);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 20:
-                /* pow(0.0,0.0) */
-                /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID */
-                exc.type = DOMAIN;
-                exc.name = "pow";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() != CYGNUM_LIBM_COMPAT_SVID) exc.retval = 1.0;
-                else if (!matherr(&exc)) {
-                        (void) WRITE2("pow(0,0): DOMAIN error\n", 23);
-                        errno = EDOM;
-                }
-                break;
-            case 21:
-                /* pow(x,y) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "pow";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                  exc.retval = HUGE;
-                  y *= 0.5;
-                  if(x<zero&&rint(y)!=y) exc.retval = -HUGE;
-                } else {
-                  exc.retval = HUGE_VAL;
-                  y *= 0.5;
-                  if(x<zero&&rint(y)!=y) exc.retval = -HUGE_VAL;
-                }
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 22:
-                /* pow(x,y) underflow */
-                exc.type = UNDERFLOW;
-                exc.name = "pow";
-                exc.retval =  zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 23:
-                /* 0**neg */
-                exc.type = DOMAIN;
-                exc.name = "pow";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) 
-                  exc.retval = zero;
-                else
-                  exc.retval = -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("pow(0,neg): DOMAIN error\n", 25);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 24:
-                /* neg**non-integral */
-                exc.type = DOMAIN;
-                exc.name = "pow";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) 
-                    exc.retval = zero;
-                else 
-                    exc.retval = zero/zero;     /* X/Open allow NaN */
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) 
-                   errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("neg**non-integral: DOMAIN error\n", 32);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 25:
-                /* sinh(finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "sinh";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = ( (x>zero) ? HUGE : -HUGE);
-                else
-                  exc.retval = ( (x>zero) ? HUGE_VAL : -HUGE_VAL);
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 26:
-                /* sqrt(x<0) */
-                exc.type = DOMAIN;
-                exc.name = "sqrt";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = zero;
-                else
-                  exc.retval = zero/zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("sqrt: DOMAIN error\n", 19);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 27:
-                /* fmod(x,0) */
-                exc.type = DOMAIN;
-                exc.name = "fmod";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                    exc.retval = x;
-                else
-                    exc.retval = zero/zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("fmod:  DOMAIN error\n", 20);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 28:
-                /* remainder(x,0) */
-                exc.type = DOMAIN;
-                exc.name = "remainder";
-                exc.retval = zero/zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("remainder: DOMAIN error\n", 24);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 29:
-                /* acosh(x<1) */
-                exc.type = DOMAIN;
-                exc.name = "acosh";
-                exc.retval = zero/zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("acosh: DOMAIN error\n", 20);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 30:
-                /* atanh(|x|>1) */
-                exc.type = DOMAIN;
-                exc.name = "atanh";
-                exc.retval = zero/zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("atanh: DOMAIN error\n", 20);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 31:
-                /* atanh(|x|=1) */
-                exc.type = SING;
-                exc.name = "atanh";
-                exc.retval = x/zero;    /* sign(x)*inf */
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                    (void) WRITE2("atanh: SING error\n", 18);
-                  }
-                  errno = EDOM;
-                }
-                break;
-            case 32:
-                /* scalb overflow; SVID also returns +-HUGE_VAL */
-                exc.type = OVERFLOW;
-                exc.name = "scalb";
-                exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 33:
-                /* scalb underflow */
-                exc.type = UNDERFLOW;
-                exc.name = "scalb";
-                exc.retval = copysign(zero,x);
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 34:
-                /* j0(|x|>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "j0";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 35:
-                /* y0(x>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "y0";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 36:
-                /* j1(|x|>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "j1";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 37:
-                /* y1(x>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "y1";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 38:
-                /* jn(|x|>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "jn";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 39:
-                /* yn(x>X_TLOSS) */
-                exc.type = TLOSS;
-                exc.name = "yn";
-                exc.retval = zero;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                        errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                                (void) WRITE2(exc.name, 2);
-                                (void) WRITE2(": TLOSS error\n", 14);
-                        }
-                        errno = ERANGE;
-                }        
-                break;
-            case 40:
-                /* gamma(finite) overflow */
-                exc.type = OVERFLOW;
-                exc.name = "gamma";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                  errno = ERANGE;
-                }
-                break;
-            case 41:
-                /* gamma(-integer) or gamma(0) */
-                exc.type = SING;
-                exc.name = "gamma";
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
-                  exc.retval = HUGE;
-                else
-                  exc.retval = HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = EDOM;
-                else if (!matherr(&exc)) {
-                  if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
-                        (void) WRITE2("gamma: SING error\n", 18);
-                      }
-                  errno = EDOM;
-                }
-                break;
-            case 42:
-                /* pow(NaN,0.0) */
-                /* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID & CYGNUM_LIBM_COMPAT_XOPEN */
-                exc.type = DOMAIN;
-                exc.name = "pow";
-                exc.retval = x;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE ||
-                    cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) exc.retval = 1.0;
-                else if (!matherr(&exc)) {
-                        errno = EDOM;
-                }
-                break;
-            case 43:
-                /* ldexp overflow; SVID also returns +-HUGE_VAL */
-                exc.type = OVERFLOW;
-                exc.name = "ldexp";
-                exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-            case 44:
-                /* ldexp underflow */
-                exc.type = UNDERFLOW;
-                exc.name = "ldexp";
-                exc.retval = copysign(zero,x);
-                if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
-                  errno = ERANGE;
-                else if (!matherr(&exc)) {
-                        errno = ERANGE;
-                }
-                break;
-        }
-        return exc.retval; 
-}
-
-#endif // ifdef CYGPKG_LIBM
-
-// EOF standard.c
+// EOF standard_float.c