fixes for host gcc 4.6.1
[zpugcc/jano.git] / toolchain / gcc / newlib / libm / math / w_j0.c
blob2bf663316a22d48d508f6abcbec99ead1664a88c
2 /* @(#)w_j0.c 5.1 93/09/24 */
3 /*
4 * ====================================================
5 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
7 * Developed at SunPro, a Sun Microsystems, Inc. business.
8 * Permission to use, copy, modify, and distribute this
9 * software is freely granted, provided that this notice
10 * is preserved.
11 * ====================================================
15 FUNCTION
16 <<jN>>,<<jNf>>,<<yN>>,<<yNf>>---Bessel functions
18 INDEX
20 INDEX
21 j0f
22 INDEX
24 INDEX
25 j1f
26 INDEX
28 INDEX
29 jnf
30 INDEX
32 INDEX
33 y0f
34 INDEX
36 INDEX
37 y1f
38 INDEX
40 INDEX
41 ynf
43 ANSI_SYNOPSIS
44 #include <math.h>
45 double j0(double <[x]>);
46 float j0f(float <[x]>);
47 double j1(double <[x]>);
48 float j1f(float <[x]>);
49 double jn(int <[n]>, double <[x]>);
50 float jnf(int <[n]>, float <[x]>);
51 double y0(double <[x]>);
52 float y0f(float <[x]>);
53 double y1(double <[x]>);
54 float y1f(float <[x]>);
55 double yn(int <[n]>, double <[x]>);
56 float ynf(int <[n]>, float <[x]>);
58 TRAD_SYNOPSIS
59 #include <math.h>
61 double j0(<[x]>)
62 double <[x]>;
63 float j0f(<[x]>)
64 float <[x]>;
65 double j1(<[x]>)
66 double <[x]>;
67 float j1f(<[x]>)
68 float <[x]>;
69 double jn(<[n]>, <[x]>)
70 int <[n]>;
71 double <[x]>;
72 float jnf(<[n]>, <[x]>)
73 int <[n]>;
74 float <[x]>;
76 double y0(<[x]>)
77 double <[x]>;
78 float y0f(<[x]>)
79 float <[x]>;
80 double y1(<[x]>)
81 double <[x]>;
82 float y1f(<[x]>)
83 float <[x]>;
84 double yn(<[n]>, <[x]>)
85 int <[n]>;
86 double <[x]>;
87 float ynf(<[n]>, <[x]>)
88 int <[n]>;
89 float <[x]>;
91 DESCRIPTION
92 The Bessel functions are a family of functions that solve the
93 differential equation
94 @ifnottex
95 . 2 2 2
96 . x y'' + xy' + (x - p )y = 0
97 @end ifnottex
98 @tex
99 $$x^2{d^2y\over dx^2} + x{dy\over dx} + (x^2-p^2)y = 0$$
100 @end tex
101 These functions have many applications in engineering and physics.
103 <<jn>> calculates the Bessel function of the first kind of order
104 <[n]>. <<j0>> and <<j1>> are special cases for order 0 and order
105 1 respectively.
107 Similarly, <<yn>> calculates the Bessel function of the second kind of
108 order <[n]>, and <<y0>> and <<y1>> are special cases for order 0 and
111 <<jnf>>, <<j0f>>, <<j1f>>, <<ynf>>, <<y0f>>, and <<y1f>> perform the
112 same calculations, but on <<float>> rather than <<double>> values.
114 RETURNS
115 The value of each Bessel function at <[x]> is returned.
117 PORTABILITY
118 None of the Bessel functions are in ANSI C.
122 * wrapper j0(double x), y0(double x)
125 #include "fdlibm.h"
126 #include <errno.h>
128 #ifndef _DOUBLE_IS_32BITS
130 #ifdef __STDC__
131 double j0(double x) /* wrapper j0 */
132 #else
133 double j0(x) /* wrapper j0 */
134 double x;
135 #endif
137 #ifdef _IEEE_LIBM
138 return __ieee754_j0(x);
139 #else
140 struct exception exc;
141 double z = __ieee754_j0(x);
142 if(_LIB_VERSION == _IEEE_ || isnan(x)) return z;
143 if(fabs(x)>X_TLOSS) {
144 /* j0(|x|>X_TLOSS) */
145 exc.type = TLOSS;
146 exc.name = "j0";
147 exc.err = 0;
148 exc.arg1 = exc.arg2 = x;
149 exc.retval = 0.0;
150 if (_LIB_VERSION == _POSIX_)
151 errno = ERANGE;
152 else if (!matherr(&exc)) {
153 errno = ERANGE;
155 if (exc.err != 0)
156 errno = exc.err;
157 return exc.retval;
158 } else
159 return z;
160 #endif
163 #ifdef __STDC__
164 double y0(double x) /* wrapper y0 */
165 #else
166 double y0(x) /* wrapper y0 */
167 double x;
168 #endif
170 #ifdef _IEEE_LIBM
171 return __ieee754_y0(x);
172 #else
173 double z;
174 struct exception exc;
175 z = __ieee754_y0(x);
176 if(_LIB_VERSION == _IEEE_ || isnan(x) ) return z;
177 if(x <= 0.0){
178 #ifndef HUGE_VAL
179 #define HUGE_VAL inf
180 double inf = 0.0;
182 SET_HIGH_WORD(inf,0x7ff00000); /* set inf to infinite */
183 #endif
184 /* y0(0) = -inf or y0(x<0) = NaN */
185 exc.type = DOMAIN; /* should be SING for IEEE y0(0) */
186 exc.name = "y0";
187 exc.err = 0;
188 exc.arg1 = exc.arg2 = x;
189 if (_LIB_VERSION == _SVID_)
190 exc.retval = -HUGE;
191 else
192 exc.retval = -HUGE_VAL;
193 if (_LIB_VERSION == _POSIX_)
194 errno = EDOM;
195 else if (!matherr(&exc)) {
196 errno = EDOM;
198 if (exc.err != 0)
199 errno = exc.err;
200 return exc.retval;
202 if(x>X_TLOSS) {
203 /* y0(x>X_TLOSS) */
204 exc.type = TLOSS;
205 exc.name = "y0";
206 exc.err = 0;
207 exc.arg1 = exc.arg2 = x;
208 exc.retval = 0.0;
209 if (_LIB_VERSION == _POSIX_)
210 errno = ERANGE;
211 else if (!matherr(&exc)) {
212 errno = ERANGE;
214 if (exc.err != 0)
215 errno = exc.err;
216 return exc.retval;
217 } else
218 return z;
219 #endif
222 #endif /* defined(_DOUBLE_IS_32BITS) */