1 /* wf_j0.c -- float version of w_j0.c.
2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3  */
4 
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunPro, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15 
16 /*
17  * wrapper j0f(float x), y0f(float x)
18  */
19 
20 #include "fdlibm.h"
21 #include <errno.h>
22 
23 #ifdef __STDC__
j0f(float x)24 	float j0f(float x)		/* wrapper j0f */
25 #else
26 	float j0f(x)			/* wrapper j0f */
27 	float x;
28 #endif
29 {
30 #ifdef _IEEE_LIBM
31 	return __ieee754_j0f(x);
32 #else
33 	struct exception exc;
34 	float z = __ieee754_j0f(x);
35 	if(_LIB_VERSION == _IEEE_ || isnanf(x)) return z;
36 	if(fabsf(x)>(float)X_TLOSS) {
37 	    /* j0f(|x|>X_TLOSS) */
38             exc.type = TLOSS;
39             exc.name = "j0f";
40 	    exc.err = 0;
41 	    exc.arg1 = exc.arg2 = (double)x;
42             exc.retval = 0.0;
43             if (_LIB_VERSION == _POSIX_)
44                errno = ERANGE;
45             else if (!matherr(&exc)) {
46                errno = ERANGE;
47             }
48 	    if (exc.err != 0)
49 	       errno = exc.err;
50             return (float)exc.retval;
51 	} else
52 	    return z;
53 #endif
54 }
55 
56 #ifdef __STDC__
y0f(float x)57 	float y0f(float x)		/* wrapper y0f */
58 #else
59 	float y0f(x)			/* wrapper y0f */
60 	float x;
61 #endif
62 {
63 #ifdef _IEEE_LIBM
64 	return __ieee754_y0f(x);
65 #else
66 	float z;
67 	struct exception exc;
68 	z = __ieee754_y0f(x);
69 	if(_LIB_VERSION == _IEEE_ || isnanf(x) ) return z;
70         if(x <= (float)0.0){
71 #ifndef HUGE_VAL
72 #define HUGE_VAL inf
73 	    double inf = 0.0;
74 
75 	    SET_HIGH_WORD(inf,0x7ff00000);	/* set inf to infinite */
76 #endif
77 	    /* y0f(0) = -inf  or y0f(x<0) = NaN */
78 	    exc.type = DOMAIN;	/* should be SING for IEEE y0f(0) */
79 	    exc.name = "y0f";
80 	    exc.err = 0;
81 	    exc.arg1 = exc.arg2 = (double)x;
82 	    if (_LIB_VERSION == _SVID_)
83 	       exc.retval = -HUGE;
84 	    else
85 	       exc.retval = -HUGE_VAL;
86 	    if (_LIB_VERSION == _POSIX_)
87 	       errno = EDOM;
88 	    else if (!matherr(&exc)) {
89 	       errno = EDOM;
90 	    }
91 	    if (exc.err != 0)
92 	       errno = exc.err;
93             return (float)exc.retval;
94         }
95 	if(x>(float)X_TLOSS) {
96 	    /* y0f(x>X_TLOSS) */
97             exc.type = TLOSS;
98             exc.name = "y0f";
99 	    exc.err = 0;
100 	    exc.arg1 = exc.arg2 = (double)x;
101             exc.retval = 0.0;
102             if (_LIB_VERSION == _POSIX_)
103                 errno = ERANGE;
104             else if (!matherr(&exc)) {
105                 errno = ERANGE;
106             }
107 	    if (exc.err != 0)
108 	       errno = exc.err;
109             return (float)exc.retval;
110 	} else
111 	    return z;
112 #endif
113 }
114 
115 #ifdef _DOUBLE_IS_32BITS
116 
117 #ifdef __STDC__
j0(double x)118 	double j0(double x)
119 #else
120 	double j0(x)
121 	double x;
122 #endif
123 {
124 	return (double) j0f((float) x);
125 }
126 
127 #ifdef __STDC__
y0(double x)128 	double y0(double x)
129 #else
130 	double y0(x)
131 	double x;
132 #endif
133 {
134 	return (double) y0f((float) x);
135 }
136 
137 #endif /* defined(_DOUBLE_IS_32BITS) */
138