uc-sdk
Main Page
Related Pages
Modules
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
w_jn.c
Go to the documentation of this file.
1
2
/* @(#)w_jn.c 1.3 95/01/18 */
3
/*
4
* ====================================================
5
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
6
*
7
* Developed at SunSoft, 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
* ====================================================
12
*/
13
14
/*
15
* wrapper jn(int n, double x), yn(int n, double x)
16
* floating point Bessel's function of the 1st and 2nd kind
17
* of order n
18
*
19
* Special cases:
20
* y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal;
21
* y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal.
22
* Note 2. About jn(n,x), yn(n,x)
23
* For n=0, j0(x) is called,
24
* for n=1, j1(x) is called,
25
* for n<x, forward recursion us used starting
26
* from values of j0(x) and j1(x).
27
* for n>x, a continued fraction approximation to
28
* j(n,x)/j(n-1,x) is evaluated and then backward
29
* recursion is used starting from a supposed value
30
* for j(n,x). The resulting value of j(0,x) is
31
* compared with the actual value to correct the
32
* supposed value of j(n,x).
33
*
34
* yn(n,x) is similar in all respects, except
35
* that forward recursion is used for all
36
* values of n>1.
37
*
38
*/
39
40
#include "
fdlibm.h
"
41
42
#ifdef __STDC__
43
double
jn
(
int
n,
double
x)
/* wrapper jn */
44
#else
45
double
jn
(n,x)
/* wrapper jn */
46
double x;
int
n;
47
#endif
48
{
49
#ifdef _IEEE_LIBM
50
return
__ieee754_jn
(n,x);
51
#else
52
double
z;
53
z =
__ieee754_jn
(n,x);
54
if
(
_LIB_VERSION
==
_IEEE_
||
isnan
(x) )
return
z;
55
if
(
fabs
(x)>
X_TLOSS
) {
56
return
__kernel_standard
((
double
)n,x,38);
/* jn(|x|>X_TLOSS,n) */
57
}
else
58
return
z;
59
#endif
60
}
61
62
#ifdef __STDC__
63
double
yn
(
int
n,
double
x)
/* wrapper yn */
64
#else
65
double
yn
(n,x)
/* wrapper yn */
66
double x;
int
n;
67
#endif
68
{
69
#ifdef _IEEE_LIBM
70
return
__ieee754_yn
(n,x);
71
#else
72
double
z;
73
z =
__ieee754_yn
(n,x);
74
if
(
_LIB_VERSION
==
_IEEE_
||
isnan
(x) )
return
z;
75
if
(x <= 0.0){
76
if
(x==0.0)
77
/* d= -one/(x-x); */
78
return
__kernel_standard
((
double
)n,x,12);
79
else
80
/* d = zero/(x-x); */
81
return
__kernel_standard
((
double
)n,x,13);
82
}
83
if
(x>
X_TLOSS
) {
84
return
__kernel_standard
((
double
)n,x,39);
/* yn(x>X_TLOSS,n) */
85
}
else
86
return
z;
87
#endif
88
}
libm
src
w_jn.c
Generated on Fri Nov 15 2013 05:00:19 for uc-sdk by
1.8.4