rgsl/
bessel.rs

1//
2// A rust binding for the GSL library by Guillaume Gomez (guillaume1.gomez@gmail.com)
3//
4
5use crate::{types, Value};
6use std::mem::MaybeUninit;
7
8/// This routine computes the regular modified cylindrical Bessel function of zeroth order, I_0(x)
9#[doc(alias = "gsl_sf_bessel_I0")]
10pub fn I0(x: f64) -> f64 {
11    unsafe { sys::gsl_sf_bessel_I0(x) }
12}
13
14/// This routine computes the regular modified cylindrical Bessel function of zeroth order, I_0(x)
15#[doc(alias = "gsl_sf_bessel_I0_e")]
16pub fn I0_e(x: f64) -> Result<types::Result, Value> {
17    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
18    let ret = unsafe { sys::gsl_sf_bessel_I0_e(x, result.as_mut_ptr()) };
19
20    result_handler!(ret, unsafe { result.assume_init() }.into())
21}
22
23/// This routine computes the regular modified cylindrical Bessel function of first order, I_1(x).
24#[doc(alias = "gsl_sf_bessel_I1")]
25pub fn I1(x: f64) -> f64 {
26    unsafe { sys::gsl_sf_bessel_I1(x) }
27}
28
29/// This routine computes the regular modified cylindrical Bessel function of first order, I_1(x).
30#[doc(alias = "gsl_sf_bessel_I1_e")]
31pub fn I1_e(x: f64) -> Result<types::Result, Value> {
32    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
33    let ret = unsafe { sys::gsl_sf_bessel_I1_e(x, result.as_mut_ptr()) };
34
35    result_handler!(ret, unsafe { result.assume_init() }.into())
36}
37
38/// This routine computes the regular modified cylindrical Bessel function of order n, I_n(x).
39#[doc(alias = "gsl_sf_bessel_In")]
40pub fn In(n: i32, x: f64) -> f64 {
41    unsafe { sys::gsl_sf_bessel_In(n, x) }
42}
43
44/// This routine computes the regular modified cylindrical Bessel function of order n, I_n(x).
45#[doc(alias = "gsl_sf_bessel_In_e")]
46pub fn In_e(n: i32, x: f64) -> Result<types::Result, Value> {
47    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
48    let ret = unsafe { sys::gsl_sf_bessel_In_e(n, x, result.as_mut_ptr()) };
49
50    result_handler!(ret, unsafe { result.assume_init() }.into())
51}
52
53/// This routine computes the values of the regular modified cylindrical Bessel functions I_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
54/// The start of the range nmin must be positive or zero.
55/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
56#[doc(alias = "gsl_sf_bessel_In_array")]
57pub fn In_array(nmin: u32, nmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
58    assert!(nmax - nmin < result_array.len() as _);
59    let ret =
60        unsafe { sys::gsl_sf_bessel_In_array(nmin as _, nmax as _, x, result_array.as_mut_ptr()) };
61    result_handler!(ret, ())
62}
63
64/// This routine computes the scaled regular modified cylindrical Bessel function of zeroth order \exp(-|x|) I_0(x).
65#[doc(alias = "gsl_sf_bessel_I0_scaled")]
66pub fn I0_scaled(x: f64) -> f64 {
67    unsafe { sys::gsl_sf_bessel_I0_scaled(x) }
68}
69
70/// This routine computes the scaled regular modified cylindrical Bessel function of zeroth order \exp(-|x|) I_0(x).
71#[doc(alias = "gsl_sf_bessel_I0_scaled_e")]
72pub fn I0_scaled_e(x: f64) -> Result<types::Result, Value> {
73    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
74    let ret = unsafe { sys::gsl_sf_bessel_I0_scaled_e(x, result.as_mut_ptr()) };
75
76    result_handler!(ret, unsafe { result.assume_init() }.into())
77}
78
79/// This routine computes the scaled regular modified cylindrical Bessel function of first order \exp(-|x|) I_1(x).
80#[doc(alias = "gsl_sf_bessel_I1_scaled")]
81pub fn I1_scaled(x: f64) -> f64 {
82    unsafe { sys::gsl_sf_bessel_I1_scaled(x) }
83}
84
85/// This routine computes the scaled regular modified cylindrical Bessel function of first order \exp(-|x|) I_1(x).
86#[doc(alias = "gsl_sf_bessel_I1_scaled_e")]
87pub fn I1_scaled_e(x: f64) -> Result<types::Result, Value> {
88    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
89    let ret = unsafe { sys::gsl_sf_bessel_I1_scaled_e(x, result.as_mut_ptr()) };
90
91    result_handler!(ret, unsafe { result.assume_init() }.into())
92}
93
94/// This routine computes the scaled regular modified cylindrical Bessel function of order n, \exp(-|x|) I_n(x)
95#[doc(alias = "gsl_sf_bessel_In_scaled")]
96pub fn In_scaled(n: i32, x: f64) -> f64 {
97    unsafe { sys::gsl_sf_bessel_In_scaled(n, x) }
98}
99
100/// This routine computes the scaled regular modified cylindrical Bessel function of order n, \exp(-|x|) I_n(x)
101#[doc(alias = "gsl_sf_bessel_In_scaled_e")]
102pub fn In_scaled_e(n: i32, x: f64) -> Result<types::Result, Value> {
103    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
104    let ret = unsafe { sys::gsl_sf_bessel_In_scaled_e(n, x, result.as_mut_ptr()) };
105
106    result_handler!(ret, unsafe { result.assume_init() }.into())
107}
108
109/// This routine computes the values of the scaled regular cylindrical Bessel functions \exp(-|x|) I_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
110/// The start of the range nmin must be positive or zero.
111/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
112#[doc(alias = "gsl_sf_bessel_In_scaled_array")]
113pub fn In_scaled_array(
114    nmin: u32,
115    nmax: u32,
116    x: f64,
117    result_array: &mut [f64],
118) -> Result<(), Value> {
119    assert!(nmax - nmin < result_array.len() as _);
120    let ret = unsafe {
121        sys::gsl_sf_bessel_In_scaled_array(nmin as _, nmax as _, x, result_array.as_mut_ptr())
122    };
123    result_handler!(ret, ())
124}
125
126/// This routine computes the scaled regular modified spherical Bessel function of zeroth order, \exp(-|x|) i_0(x).
127#[doc(alias = "gsl_sf_bessel_i0_scaled")]
128pub fn i0_scaled(x: f64) -> f64 {
129    unsafe { sys::gsl_sf_bessel_i0_scaled(x) }
130}
131
132/// This routine computes the scaled regular modified spherical Bessel function of zeroth order, \exp(-|x|) i_0(x).
133#[doc(alias = "gsl_sf_bessel_i0_scaled_e")]
134pub fn i0_scaled_e(x: f64) -> Result<types::Result, Value> {
135    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
136    let ret = unsafe { sys::gsl_sf_bessel_i0_scaled_e(x, result.as_mut_ptr()) };
137
138    result_handler!(ret, unsafe { result.assume_init() }.into())
139}
140
141/// This routine computes the scaled regular modified spherical Bessel function of first order, \exp(-|x|) i_1(x).
142#[doc(alias = "gsl_sf_bessel_i1_scaled")]
143pub fn i1_scaled(x: f64) -> f64 {
144    unsafe { sys::gsl_sf_bessel_i1_scaled(x) }
145}
146
147/// This routine computes the scaled regular modified spherical Bessel function of first order, \exp(-|x|) i_1(x).
148#[doc(alias = "gsl_sf_bessel_i1_scaled_e")]
149pub fn i1_scaled_e(x: f64) -> Result<types::Result, Value> {
150    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
151    let ret = unsafe { sys::gsl_sf_bessel_i1_scaled_e(x, result.as_mut_ptr()) };
152
153    result_handler!(ret, unsafe { result.assume_init() }.into())
154}
155
156/// This routine computes the scaled regular modified spherical Bessel function of second order, \exp(-|x|) i_2(x)
157#[doc(alias = "gsl_sf_bessel_i2_scaled")]
158pub fn i2_scaled(x: f64) -> f64 {
159    unsafe { sys::gsl_sf_bessel_i2_scaled(x) }
160}
161
162/// This routine computes the scaled regular modified spherical Bessel function of second order, \exp(-|x|) i_2(x)
163#[doc(alias = "gsl_sf_bessel_i2_scaled_e")]
164pub fn i2_scaled_e(x: f64) -> Result<types::Result, Value> {
165    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
166    let ret = unsafe { sys::gsl_sf_bessel_i2_scaled_e(x, result.as_mut_ptr()) };
167
168    result_handler!(ret, unsafe { result.assume_init() }.into())
169}
170
171/// This routine computes the scaled regular modified spherical Bessel function of order l, \exp(-|x|) i_l(x)
172#[doc(alias = "gsl_sf_bessel_il_scaled")]
173pub fn il_scaled(l: i32, x: f64) -> f64 {
174    unsafe { sys::gsl_sf_bessel_il_scaled(l, x) }
175}
176
177/// This routine computes the scaled regular modified spherical Bessel function of order l, \exp(-|x|) i_l(x)
178#[doc(alias = "gsl_sf_bessel_il_scaled_e")]
179pub fn il_scaled_e(l: i32, x: f64) -> Result<types::Result, Value> {
180    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
181    let ret = unsafe { sys::gsl_sf_bessel_il_scaled_e(l, x, result.as_mut_ptr()) };
182
183    result_handler!(ret, unsafe { result.assume_init() }.into())
184}
185
186/// This routine computes the values of the scaled regular modified cylindrical Bessel functions \exp(-|x|) i_l(x) for l from 0 to lmax inclusive for lmax >= 0, storing the results in the array result_array. The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
187#[doc(alias = "gsl_sf_bessel_il_scaled_array")]
188pub fn il_scaled_array(lmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
189    assert!(lmax < result_array.len() as _);
190    let ret =
191        unsafe { sys::gsl_sf_bessel_il_scaled_array(lmax as _, x, result_array.as_mut_ptr()) };
192    result_handler!(ret, ())
193}
194
195/// This routine computes the regular modified Bessel function of fractional order \nu, I_\nu(x) for x>0, \nu>0.
196#[doc(alias = "gsl_sf_bessel_Inu")]
197pub fn Inu(nu: f64, x: f64) -> f64 {
198    unsafe { sys::gsl_sf_bessel_Inu(nu, x) }
199}
200
201/// This routine computes the regular modified Bessel function of fractional order \nu, I_\nu(x) for x>0, \nu>0.
202#[doc(alias = "gsl_sf_bessel_Inu_e")]
203pub fn Inu_e(nu: f64, x: f64) -> Result<types::Result, Value> {
204    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
205    let ret = unsafe { sys::gsl_sf_bessel_Inu_e(nu, x, result.as_mut_ptr()) };
206
207    result_handler!(ret, unsafe { result.assume_init() }.into())
208}
209
210/// This routine computes the scaled regular modified Bessel function of fractional order \nu, \exp(-|x|)I_\nu(x) for x>0, \nu>0.
211#[doc(alias = "gsl_sf_bessel_Inu_scaled")]
212pub fn Inu_scaled(nu: f64, x: f64) -> f64 {
213    unsafe { sys::gsl_sf_bessel_Inu_scaled(nu, x) }
214}
215
216/// This routine computes the scaled regular modified Bessel function of fractional order \nu, \exp(-|x|)I_\nu(x) for x>0, \nu>0.
217#[doc(alias = "gsl_sf_bessel_Inu_scaled_e")]
218pub fn Inu_scaled_e(nu: f64, x: f64) -> Result<types::Result, Value> {
219    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
220    let ret = unsafe { sys::gsl_sf_bessel_Inu_scaled_e(nu, x, result.as_mut_ptr()) };
221
222    result_handler!(ret, unsafe { result.assume_init() }.into())
223}
224
225/// This routine computes the regular cylindrical Bessel function of zeroth order, J_0(x).
226#[doc(alias = "gsl_sf_bessel_J0")]
227pub fn J0(x: f64) -> f64 {
228    unsafe { sys::gsl_sf_bessel_J0(x) }
229}
230
231/// This routine computes the regular cylindrical Bessel function of zeroth order, J_0(x).
232#[doc(alias = "gsl_sf_bessel_J0_e")]
233pub fn J0_e(x: f64) -> Result<types::Result, Value> {
234    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
235    let ret = unsafe { sys::gsl_sf_bessel_J0_e(x, result.as_mut_ptr()) };
236
237    result_handler!(ret, unsafe { result.assume_init() }.into())
238}
239
240/// This routine computes the regular cylindrical Bessel function of first order, J_1(x).
241#[doc(alias = "gsl_sf_bessel_J1")]
242pub fn J1(x: f64) -> f64 {
243    unsafe { sys::gsl_sf_bessel_J1(x) }
244}
245
246/// This routine computes the regular cylindrical Bessel function of first order, J_1(x).
247#[doc(alias = "gsl_sf_bessel_J1_e")]
248pub fn J1_e(x: f64) -> Result<types::Result, Value> {
249    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
250    let ret = unsafe { sys::gsl_sf_bessel_J1_e(x, result.as_mut_ptr()) };
251
252    result_handler!(ret, unsafe { result.assume_init() }.into())
253}
254
255/// This routine computes the regular cylindrical Bessel function of order n, J_n(x).
256#[doc(alias = "gsl_sf_bessel_Jn")]
257pub fn Jn(n: i32, x: f64) -> f64 {
258    unsafe { sys::gsl_sf_bessel_Jn(n, x) }
259}
260
261/// This routine computes the regular cylindrical Bessel function of order n, J_n(x).
262#[doc(alias = "gsl_sf_bessel_Jn_e")]
263pub fn Jn_e(n: i32, x: f64) -> Result<types::Result, Value> {
264    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
265    let ret = unsafe { sys::gsl_sf_bessel_Jn_e(n, x, result.as_mut_ptr()) };
266
267    result_handler!(ret, unsafe { result.assume_init() }.into())
268}
269
270/// This routine computes the values of the regular cylindrical Bessel functions J_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
271/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
272#[doc(alias = "gsl_sf_bessel_Jn_array")]
273pub fn Jn_array(nmin: u32, nmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
274    assert!(nmax - nmin < result_array.len() as _);
275    let ret =
276        unsafe { sys::gsl_sf_bessel_Jn_array(nmin as _, nmax as _, x, result_array.as_mut_ptr()) };
277    result_handler!(ret, ())
278}
279
280/// This routine computes the regular spherical Bessel function of zeroth order, j_0(x) = \sin(x)/x.
281#[doc(alias = "gsl_sf_bessel_j0")]
282pub fn j0(x: f64) -> f64 {
283    unsafe { sys::gsl_sf_bessel_j0(x) }
284}
285
286/// This routine computes the regular spherical Bessel function of zeroth order, j_0(x) = \sin(x)/x.
287#[doc(alias = "gsl_sf_bessel_j0_e")]
288pub fn j0_e(x: f64) -> Result<types::Result, Value> {
289    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
290    let ret = unsafe { sys::gsl_sf_bessel_j0_e(x, result.as_mut_ptr()) };
291
292    result_handler!(ret, unsafe { result.assume_init() }.into())
293}
294
295/// This routine computes the regular spherical Bessel function of first order, j_1(x) = (\sin(x)/x - \cos(x))/x.
296#[doc(alias = "gsl_sf_bessel_j1")]
297pub fn j1(x: f64) -> f64 {
298    unsafe { sys::gsl_sf_bessel_j1(x) }
299}
300
301/// This routine computes the regular spherical Bessel function of first order, j_1(x) = (\sin(x)/x - \cos(x))/x.
302#[doc(alias = "gsl_sf_bessel_j1_e")]
303pub fn j1_e(x: f64) -> Result<types::Result, Value> {
304    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
305    let ret = unsafe { sys::gsl_sf_bessel_j1_e(x, result.as_mut_ptr()) };
306
307    result_handler!(ret, unsafe { result.assume_init() }.into())
308}
309
310/// This routine computes the regular spherical Bessel function of second order, j_2(x) = ((3/x^2 - 1)\sin(x) - 3\cos(x)/x)/x.
311#[doc(alias = "gsl_sf_bessel_j2")]
312pub fn j2(x: f64) -> f64 {
313    unsafe { sys::gsl_sf_bessel_j2(x) }
314}
315
316/// This routine computes the regular spherical Bessel function of second order, j_2(x) = ((3/x^2 - 1)\sin(x) - 3\cos(x)/x)/x.
317#[doc(alias = "gsl_sf_bessel_j2_e")]
318pub fn j2_e(x: f64) -> Result<types::Result, Value> {
319    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
320    let ret = unsafe { sys::gsl_sf_bessel_j2_e(x, result.as_mut_ptr()) };
321
322    result_handler!(ret, unsafe { result.assume_init() }.into())
323}
324
325/// This routine computes the regular spherical Bessel function of order l, j_l(x), for l >= 0 and x >= 0.
326#[doc(alias = "gsl_sf_bessel_jl")]
327pub fn jl(l: i32, x: f64) -> f64 {
328    unsafe { sys::gsl_sf_bessel_jl(l, x) }
329}
330
331/// This routine computes the regular spherical Bessel function of order l, j_l(x), for l >= 0 and x >= 0.
332#[doc(alias = "gsl_sf_bessel_jl_e")]
333pub fn jl_e(l: i32, x: f64) -> Result<types::Result, Value> {
334    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
335    let ret = unsafe { sys::gsl_sf_bessel_jl_e(l, x, result.as_mut_ptr()) };
336
337    result_handler!(ret, unsafe { result.assume_init() }.into())
338}
339
340/// This routine computes the values of the regular spherical Bessel functions j_l(x) for l from 0 to lmax inclusive for lmax >= 0 and x >= 0, storing the results in the array result_array.
341/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
342#[doc(alias = "gsl_sf_bessel_jl_array")]
343pub fn jl_array(lmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
344    assert!(lmax < result_array.len() as _);
345    let ret = unsafe { sys::gsl_sf_bessel_jl_array(lmax as _, x, result_array.as_mut_ptr()) };
346    result_handler!(ret, ())
347}
348
349/// This routine uses Steed’s method to compute the values of the regular spherical Bessel functions j_l(x) for l from 0 to lmax inclusive for lmax >= 0 and x >= 0, storing the results in the array result_array.
350/// The Steed/Barnett algorithm is described in Comp. Phys. Comm. 21, 297 (1981). Steed’s method is more stable than the recurrence used in the other functions but is also slower.
351#[doc(alias = "gsl_sf_bessel_jl_steed_array")]
352pub fn jl_steed_array(lmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
353    assert!(lmax < result_array.len() as _);
354    let ret = unsafe { sys::gsl_sf_bessel_jl_steed_array(lmax as _, x, result_array.as_mut_ptr()) };
355    result_handler!(ret, ())
356}
357
358/// This routine computes the regular cylindrical Bessel function of fractional order \nu, J_\nu(x).
359#[doc(alias = "gsl_sf_bessel_Jnu")]
360pub fn Jnu(nu: f64, x: f64) -> f64 {
361    unsafe { sys::gsl_sf_bessel_Jnu(nu, x) }
362}
363
364/// This routine computes the regular cylindrical Bessel function of fractional order \nu, J_\nu(x).
365#[doc(alias = "gsl_sf_bessel_Jnu_e")]
366pub fn Jnu_e(nu: f64, x: f64) -> Result<types::Result, Value> {
367    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
368    let ret = unsafe { sys::gsl_sf_bessel_Jnu_e(nu, x, result.as_mut_ptr()) };
369
370    result_handler!(ret, unsafe { result.assume_init() }.into())
371}
372
373/// This function computes the regular cylindrical Bessel function of fractional order \nu, J_\nu(x), evaluated at a series of x values. The array v of length size contains the x values.
374/// They are assumed to be strictly ordered and positive. The array is over-written with the values of J_\nu(x_i).
375#[doc(alias = "gsl_sf_bessel_sequence_Jnu_e")]
376pub fn sequence_Jnu(nu: f64, mode: crate::Mode, v: &mut [f64]) -> Result<(), Value> {
377    let ret =
378        unsafe { sys::gsl_sf_bessel_sequence_Jnu_e(nu, mode.into(), v.len() as _, v.as_mut_ptr()) };
379    result_handler!(ret, ())
380}
381
382/// This routine computes the irregular modified cylindrical Bessel function of zeroth order, K_0(x), for x > 0.
383#[doc(alias = "gsl_sf_bessel_K0")]
384pub fn K0(x: f64) -> f64 {
385    unsafe { sys::gsl_sf_bessel_K0(x) }
386}
387
388/// This routine computes the irregular modified cylindrical Bessel function of zeroth order, K_0(x), for x > 0.
389#[doc(alias = "gsl_sf_bessel_K0_e")]
390pub fn K0_e(x: f64) -> Result<types::Result, Value> {
391    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
392    let ret = unsafe { sys::gsl_sf_bessel_K0_e(x, result.as_mut_ptr()) };
393
394    result_handler!(ret, unsafe { result.assume_init() }.into())
395}
396
397/// This routine computes the irregular modified cylindrical Bessel function of first order, K_1(x), for x > 0.
398#[doc(alias = "gsl_sf_bessel_K1")]
399pub fn K1(x: f64) -> f64 {
400    unsafe { sys::gsl_sf_bessel_K1(x) }
401}
402
403/// This routine computes the irregular modified cylindrical Bessel function of first order, K_1(x), for x > 0.
404#[doc(alias = "gsl_sf_bessel_K1_e")]
405pub fn K1_e(x: f64) -> Result<types::Result, Value> {
406    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
407    let ret = unsafe { sys::gsl_sf_bessel_K1_e(x, result.as_mut_ptr()) };
408
409    result_handler!(ret, unsafe { result.assume_init() }.into())
410}
411
412/// This routine computes the irregular modified cylindrical Bessel function of order n, K_n(x), for x > 0.
413#[doc(alias = "gsl_sf_bessel_Kn")]
414pub fn Kn(n: i32, x: f64) -> f64 {
415    unsafe { sys::gsl_sf_bessel_Kn(n, x) }
416}
417
418/// This routine computes the irregular modified cylindrical Bessel function of order n, K_n(x), for x > 0.
419#[doc(alias = "gsl_sf_bessel_Kn_e")]
420pub fn Kn_e(n: i32, x: f64) -> Result<types::Result, Value> {
421    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
422    let ret = unsafe { sys::gsl_sf_bessel_Kn_e(n, x, result.as_mut_ptr()) };
423
424    result_handler!(ret, unsafe { result.assume_init() }.into())
425}
426
427/// This routine computes the values of the irregular modified cylindrical Bessel functions K_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
428/// The start of the range nmin must be positive or zero. The domain of the function is x>0.
429/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
430#[doc(alias = "gsl_sf_bessel_Kn_array")]
431pub fn Kn_array(nmin: u32, nmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
432    assert!(nmax - nmin < result_array.len() as _);
433    let ret =
434        unsafe { sys::gsl_sf_bessel_Kn_array(nmin as _, nmax as _, x, result_array.as_mut_ptr()) };
435    result_handler!(ret, ())
436}
437
438/// This routine computes the scaled irregular modified cylindrical Bessel function of zeroth order \exp(x) K_0(x) for x>0.
439#[doc(alias = "gsl_sf_bessel_K0_scaled")]
440pub fn K0_scaled(x: f64) -> f64 {
441    unsafe { sys::gsl_sf_bessel_K0_scaled(x) }
442}
443
444/// This routine computes the scaled irregular modified cylindrical Bessel function of zeroth order \exp(x) K_0(x) for x>0.
445#[doc(alias = "gsl_sf_bessel_K0_scaled_e")]
446pub fn K0_scaled_e(x: f64) -> Result<types::Result, Value> {
447    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
448    let ret = unsafe { sys::gsl_sf_bessel_K0_scaled_e(x, result.as_mut_ptr()) };
449
450    result_handler!(ret, unsafe { result.assume_init() }.into())
451}
452
453/// This routine computes the scaled irregular modified cylindrical Bessel function of first order \exp(x) K_1(x) for x>0.
454#[doc(alias = "gsl_sf_bessel_K1_scaled")]
455pub fn K1_scaled(x: f64) -> f64 {
456    unsafe { sys::gsl_sf_bessel_K1_scaled(x) }
457}
458
459/// This routine computes the scaled irregular modified cylindrical Bessel function of first order \exp(x) K_1(x) for x>0.
460#[doc(alias = "gsl_sf_bessel_K1_scaled_e")]
461pub fn K1_scaled_e(x: f64) -> Result<types::Result, Value> {
462    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
463    let ret = unsafe { sys::gsl_sf_bessel_K1_scaled_e(x, result.as_mut_ptr()) };
464
465    result_handler!(ret, unsafe { result.assume_init() }.into())
466}
467
468/// This routine computes the scaled irregular modified cylindrical Bessel function of order n, \exp(x) K_n(x), for x>0.
469#[doc(alias = "gsl_sf_bessel_Kn_scaled")]
470pub fn Kn_scaled(n: i32, x: f64) -> f64 {
471    unsafe { sys::gsl_sf_bessel_Kn_scaled(n, x) }
472}
473
474/// This routine computes the scaled irregular modified cylindrical Bessel function of order n, \exp(x) K_n(x), for x>0.
475#[doc(alias = "gsl_sf_bessel_Kn_scaled_e")]
476pub fn Kn_scaled_e(n: i32, x: f64) -> Result<types::Result, Value> {
477    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
478    let ret = unsafe { sys::gsl_sf_bessel_Kn_scaled_e(n, x, result.as_mut_ptr()) };
479
480    result_handler!(ret, unsafe { result.assume_init() }.into())
481}
482
483/// This routine computes the values of the scaled irregular cylindrical Bessel functions \exp(x) K_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
484/// The start of the range nmin must be positive or zero. The domain of the function is x>0.
485/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
486#[doc(alias = "gsl_sf_bessel_Kn_scaled_array")]
487pub fn Kn_scaled_array(
488    nmin: u32,
489    nmax: u32,
490    x: f64,
491    result_array: &mut [f64],
492) -> Result<(), Value> {
493    assert!(nmax - nmin < result_array.len() as _);
494    let ret = unsafe {
495        sys::gsl_sf_bessel_Kn_scaled_array(nmin as _, nmax as _, x, result_array.as_mut_ptr())
496    };
497    result_handler!(ret, ())
498}
499
500/// The irregular modified spherical Bessel functions k_l(x) are related to the irregular modified Bessel functions of fractional order, k_l(x) = \sqrt{\pi/(2x)} K_{l+1/2}(x).
501/// This routine computes the scaled irregular modified spherical Bessel function of zeroth order, \exp(x) k_0(x), for x>0.
502#[doc(alias = "gsl_sf_bessel_k0_scaled")]
503pub fn k0_scaled(x: f64) -> f64 {
504    unsafe { sys::gsl_sf_bessel_k0_scaled(x) }
505}
506
507/// The irregular modified spherical Bessel functions k_l(x) are related to the irregular modified Bessel functions of fractional order, k_l(x) = \sqrt{\pi/(2x)} K_{l+1/2}(x).
508/// This routine computes the scaled irregular modified spherical Bessel function of zeroth order, \exp(x) k_0(x), for x>0.
509#[doc(alias = "gsl_sf_bessel_k0_scaled_e")]
510pub fn k0_scaled_e(x: f64) -> Result<types::Result, Value> {
511    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
512    let ret = unsafe { sys::gsl_sf_bessel_k0_scaled_e(x, result.as_mut_ptr()) };
513
514    result_handler!(ret, unsafe { result.assume_init() }.into())
515}
516
517/// This routine computes the scaled irregular modified spherical Bessel function of first order, \exp(x) k_1(x), for x>0.
518#[doc(alias = "gsl_sf_bessel_k1_scaled")]
519pub fn k1_scaled(x: f64) -> f64 {
520    unsafe { sys::gsl_sf_bessel_k1_scaled(x) }
521}
522
523/// This routine computes the scaled irregular modified spherical Bessel function of first order, \exp(x) k_1(x), for x>0.
524#[doc(alias = "gsl_sf_bessel_k1_scaled_e")]
525pub fn k1_scaled_e(x: f64) -> Result<types::Result, Value> {
526    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
527    let ret = unsafe { sys::gsl_sf_bessel_k1_scaled_e(x, result.as_mut_ptr()) };
528
529    result_handler!(ret, unsafe { result.assume_init() }.into())
530}
531
532/// This routine computes the scaled irregular modified spherical Bessel function of second order, \exp(x) k_2(x), for x>0.
533#[doc(alias = "gsl_sf_bessel_k2_scaled")]
534pub fn k2_scaled(x: f64) -> f64 {
535    unsafe { sys::gsl_sf_bessel_k2_scaled(x) }
536}
537
538/// This routine computes the scaled irregular modified spherical Bessel function of second order, \exp(x) k_2(x), for x>0.
539#[doc(alias = "gsl_sf_bessel_k2_scaled_e")]
540pub fn k2_scaled_e(x: f64) -> Result<types::Result, Value> {
541    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
542    let ret = unsafe { sys::gsl_sf_bessel_k2_scaled_e(x, result.as_mut_ptr()) };
543
544    result_handler!(ret, unsafe { result.assume_init() }.into())
545}
546
547/// This routine computes the scaled irregular modified spherical Bessel function of order l, \exp(x) k_l(x), for x>0.
548#[doc(alias = "gsl_sf_bessel_kl_scaled")]
549pub fn kl_scaled(l: i32, x: f64) -> f64 {
550    unsafe { sys::gsl_sf_bessel_kl_scaled(l, x) }
551}
552
553/// This routine computes the scaled irregular modified spherical Bessel function of order l, \exp(x) k_l(x), for x>0.
554#[doc(alias = "gsl_sf_bessel_kl_scaled_e")]
555pub fn kl_scaled_e(l: i32, x: f64) -> Result<types::Result, Value> {
556    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
557    let ret = unsafe { sys::gsl_sf_bessel_kl_scaled_e(l, x, result.as_mut_ptr()) };
558
559    result_handler!(ret, unsafe { result.assume_init() }.into())
560}
561
562/// This routine computes the values of the scaled irregular modified spherical Bessel functions \exp(x) k_l(x) for l from 0 to lmax inclusive for lmax >= 0 and x>0, storing the results in the array result_array.
563/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
564#[doc(alias = "gsl_sf_bessel_kl_scaled_array")]
565pub fn kl_scaled_array(lmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
566    assert!(lmax < result_array.len() as _);
567    let ret =
568        unsafe { sys::gsl_sf_bessel_kl_scaled_array(lmax as _, x, result_array.as_mut_ptr()) };
569    result_handler!(ret, ())
570}
571
572/// This routine computes the irregular modified Bessel function of fractional order \nu, K_\nu(x) for x>0, \nu>0.
573#[doc(alias = "gsl_sf_bessel_Knu")]
574pub fn Knu(nu: f64, x: f64) -> f64 {
575    unsafe { sys::gsl_sf_bessel_Knu(nu, x) }
576}
577
578/// This routine computes the irregular modified Bessel function of fractional order \nu, K_\nu(x) for x>0, \nu>0.
579#[doc(alias = "gsl_sf_bessel_Knu_e")]
580pub fn Knu_e(nu: f64, x: f64) -> Result<types::Result, Value> {
581    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
582    let ret = unsafe { sys::gsl_sf_bessel_Knu_e(nu, x, result.as_mut_ptr()) };
583
584    result_handler!(ret, unsafe { result.assume_init() }.into())
585}
586
587/// This routine computes the logarithm of the irregular modified Bessel function of fractional order \nu, \ln(K_\nu(x)) for x>0, \nu>0.
588#[doc(alias = "gsl_sf_bessel_lnKnu")]
589pub fn lnKnu(nu: f64, x: f64) -> f64 {
590    unsafe { sys::gsl_sf_bessel_lnKnu(nu, x) }
591}
592
593/// This routine computes the logarithm of the irregular modified Bessel function of fractional order \nu, \ln(K_\nu(x)) for x>0, \nu>0.
594#[doc(alias = "gsl_sf_bessel_lnKnu_e")]
595pub fn lnKnu_e(nu: f64, x: f64) -> Result<types::Result, Value> {
596    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
597    let ret = unsafe { sys::gsl_sf_bessel_lnKnu_e(nu, x, result.as_mut_ptr()) };
598
599    result_handler!(ret, unsafe { result.assume_init() }.into())
600}
601
602/// This routine computes the scaled irregular modified Bessel function of fractional order \nu, \exp(+|x|) K_\nu(x) for x>0, \nu>0.
603#[doc(alias = "gsl_sf_bessel_Knu_scaled")]
604pub fn Knu_scaled(nu: f64, x: f64) -> f64 {
605    unsafe { sys::gsl_sf_bessel_Knu_scaled(nu, x) }
606}
607
608/// This routine computes the scaled irregular modified Bessel function of fractional order \nu, \exp(+|x|) K_\nu(x) for x>0, \nu>0.
609#[doc(alias = "gsl_sf_bessel_Knu_scaled_e")]
610pub fn Knu_scaled_e(nu: f64, x: f64) -> Result<types::Result, Value> {
611    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
612    let ret = unsafe { sys::gsl_sf_bessel_Knu_scaled_e(nu, x, result.as_mut_ptr()) };
613
614    result_handler!(ret, unsafe { result.assume_init() }.into())
615}
616
617/// This routine computes the irregular cylindrical Bessel function of zeroth order, Y_0(x), for x>0.
618#[doc(alias = "gsl_sf_bessel_Y0")]
619pub fn Y0(x: f64) -> f64 {
620    unsafe { sys::gsl_sf_bessel_Y0(x) }
621}
622
623/// This routine computes the irregular cylindrical Bessel function of zeroth order, Y_0(x), for x>0.
624#[doc(alias = "gsl_sf_bessel_Y0_e")]
625pub fn Y0_e(x: f64) -> Result<types::Result, Value> {
626    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
627    let ret = unsafe { sys::gsl_sf_bessel_Y0_e(x, result.as_mut_ptr()) };
628
629    result_handler!(ret, unsafe { result.assume_init() }.into())
630}
631
632/// This routine computes the irregular cylindrical Bessel function of first order, Y_1(x), for x>0.
633#[doc(alias = "gsl_sf_bessel_Y1")]
634pub fn Y1(x: f64) -> f64 {
635    unsafe { sys::gsl_sf_bessel_Y1(x) }
636}
637
638/// This routine computes the irregular cylindrical Bessel function of first order, Y_1(x), for x>0.
639#[doc(alias = "gsl_sf_bessel_Y1_e")]
640pub fn Y1_e(x: f64) -> Result<types::Result, Value> {
641    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
642    let ret = unsafe { sys::gsl_sf_bessel_Y1_e(x, result.as_mut_ptr()) };
643
644    result_handler!(ret, unsafe { result.assume_init() }.into())
645}
646
647/// This routine computes the irregular cylindrical Bessel function of order n, Y_n(x), for x>0.
648#[doc(alias = "gsl_sf_bessel_Yn")]
649pub fn Yn(n: i32, x: f64) -> f64 {
650    unsafe { sys::gsl_sf_bessel_Yn(n, x) }
651}
652
653/// This routine computes the irregular cylindrical Bessel function of order n, Y_n(x), for x>0.
654#[doc(alias = "gsl_sf_bessel_Yn_e")]
655pub fn Yn_e(n: i32, x: f64) -> Result<types::Result, Value> {
656    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
657    let ret = unsafe { sys::gsl_sf_bessel_Yn_e(n, x, result.as_mut_ptr()) };
658
659    result_handler!(ret, unsafe { result.assume_init() }.into())
660}
661
662/// This routine computes the values of the irregular cylindrical Bessel functions Y_n(x) for n from nmin to nmax inclusive, storing the results in the array result_array.
663/// The domain of the function is x>0.
664/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
665#[doc(alias = "gsl_sf_bessel_Yn_array")]
666pub fn Yn_array(nmin: u32, nmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
667    assert!(nmax - nmin < result_array.len() as _);
668    let ret =
669        unsafe { sys::gsl_sf_bessel_Yn_array(nmin as _, nmax as _, x, result_array.as_mut_ptr()) };
670    result_handler!(ret, ())
671}
672
673/// This routine computes the irregular spherical Bessel function of zeroth order, y_0(x) = -\cos(x)/x.
674#[doc(alias = "gsl_sf_bessel_y0")]
675pub fn y0(x: f64) -> f64 {
676    unsafe { sys::gsl_sf_bessel_y0(x) }
677}
678
679/// This routine computes the irregular spherical Bessel function of zeroth order, y_0(x) = -\cos(x)/x.
680#[doc(alias = "gsl_sf_bessel_y0_e")]
681pub fn y0_e(x: f64) -> Result<types::Result, Value> {
682    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
683    let ret = unsafe { sys::gsl_sf_bessel_y0_e(x, result.as_mut_ptr()) };
684
685    result_handler!(ret, unsafe { result.assume_init() }.into())
686}
687
688/// This routine computes the irregular spherical Bessel function of first order, y_1(x) = -(\cos(x)/x + \sin(x))/x.
689#[doc(alias = "gsl_sf_bessel_y1")]
690pub fn y1(x: f64) -> f64 {
691    unsafe { sys::gsl_sf_bessel_y1(x) }
692}
693
694/// This routine computes the irregular spherical Bessel function of first order, y_1(x) = -(\cos(x)/x + \sin(x))/x.
695#[doc(alias = "gsl_sf_bessel_y1_e")]
696pub fn y1_e(x: f64) -> Result<types::Result, Value> {
697    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
698    let ret = unsafe { sys::gsl_sf_bessel_y1_e(x, result.as_mut_ptr()) };
699
700    result_handler!(ret, unsafe { result.assume_init() }.into())
701}
702
703/// This routine computes the irregular spherical Bessel function of second order, y_2(x) = (-3/x^3 + 1/x)\cos(x) - (3/x^2)\sin(x).
704#[doc(alias = "gsl_sf_bessel_y2")]
705pub fn y2(x: f64) -> f64 {
706    unsafe { sys::gsl_sf_bessel_y2(x) }
707}
708
709/// This routine computes the irregular spherical Bessel function of second order, y_2(x) = (-3/x^3 + 1/x)\cos(x) - (3/x^2)\sin(x).
710#[doc(alias = "gsl_sf_bessel_y2_e")]
711pub fn y2_e(x: f64) -> Result<types::Result, Value> {
712    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
713    let ret = unsafe { sys::gsl_sf_bessel_y2_e(x, result.as_mut_ptr()) };
714
715    result_handler!(ret, unsafe { result.assume_init() }.into())
716}
717
718/// This routine computes the irregular spherical Bessel function of order l, y_l(x), for l >= 0.
719#[doc(alias = "gsl_sf_bessel_yl")]
720pub fn yl(l: i32, x: f64) -> f64 {
721    unsafe { sys::gsl_sf_bessel_yl(l, x) }
722}
723
724/// This routine computes the irregular spherical Bessel function of order l, y_l(x), for l >= 0.
725#[doc(alias = "gsl_sf_bessel_yl_e")]
726pub fn yl_e(l: i32, x: f64) -> Result<types::Result, Value> {
727    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
728    let ret = unsafe { sys::gsl_sf_bessel_yl_e(l, x, result.as_mut_ptr()) };
729
730    result_handler!(ret, unsafe { result.assume_init() }.into())
731}
732
733/// This routine computes the values of the irregular spherical Bessel functions y_l(x) for l from 0 to lmax inclusive for lmax >= 0, storing the results in the array result_array.
734/// The values are computed using recurrence relations for efficiency, and therefore may differ slightly from the exact values.
735#[doc(alias = "gsl_sf_bessel_yl_array")]
736pub fn yl_array(lmax: u32, x: f64, result_array: &mut [f64]) -> Result<(), Value> {
737    assert!(lmax < result_array.len() as _);
738    let ret = unsafe { sys::gsl_sf_bessel_yl_array(lmax as _, x, result_array.as_mut_ptr()) };
739    result_handler!(ret, ())
740}
741
742/// This routine computes the irregular cylindrical Bessel function of fractional order \nu, Y_\nu(x).
743#[doc(alias = "gsl_sf_bessel_Ynu")]
744pub fn Ynu(nu: f64, x: f64) -> f64 {
745    unsafe { sys::gsl_sf_bessel_Ynu(nu, x) }
746}
747
748/// This routine computes the irregular cylindrical Bessel function of fractional order \nu, Y_\nu(x).
749#[doc(alias = "gsl_sf_bessel_Ynu_e")]
750pub fn Ynu_e(nu: f64, x: f64) -> Result<types::Result, Value> {
751    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
752    let ret = unsafe { sys::gsl_sf_bessel_Ynu_e(nu, x, result.as_mut_ptr()) };
753
754    result_handler!(ret, unsafe { result.assume_init() }.into())
755}
756
757/// This routine computes the location of the s-th positive zero of the Bessel function J_0(x).
758#[doc(alias = "gsl_sf_bessel_zero_J0")]
759pub fn zero_J0(s: u32) -> f64 {
760    unsafe { sys::gsl_sf_bessel_zero_J0(s) }
761}
762
763/// This routine computes the location of the s-th positive zero of the Bessel function J_0(x).
764#[doc(alias = "gsl_sf_bessel_zero_J0_e")]
765pub fn zero_J0_e(s: u32) -> Result<types::Result, Value> {
766    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
767    let ret = unsafe { sys::gsl_sf_bessel_zero_J0_e(s, result.as_mut_ptr()) };
768
769    result_handler!(ret, unsafe { result.assume_init() }.into())
770}
771
772/// This routine computes the location of the s-th positive zero of the Bessel function J_1(x).
773#[doc(alias = "gsl_sf_bessel_zero_J1")]
774pub fn zero_J1(s: u32) -> f64 {
775    unsafe { sys::gsl_sf_bessel_zero_J1(s) }
776}
777
778/// This routine computes the location of the s-th positive zero of the Bessel function J_1(x).
779#[doc(alias = "gsl_sf_bessel_zero_J1_e")]
780pub fn zero_J1_e(s: u32) -> Result<types::Result, Value> {
781    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
782    let ret = unsafe { sys::gsl_sf_bessel_zero_J1_e(s, result.as_mut_ptr()) };
783
784    result_handler!(ret, unsafe { result.assume_init() }.into())
785}
786
787/// This routine computes the location of the s-th positive zero of the Bessel function J_\nu(x).
788/// The current implementation does not support negative values of nu.
789#[doc(alias = "gsl_sf_bessel_zero_Jnu")]
790pub fn zero_Jnu(nu: f64, s: u32) -> f64 {
791    unsafe { sys::gsl_sf_bessel_zero_Jnu(nu, s) }
792}
793
794/// This routine computes the location of the s-th positive zero of the Bessel function J_\nu(x).
795/// The current implementation does not support negative values of nu.
796#[doc(alias = "gsl_sf_bessel_zero_Jnu_e")]
797pub fn zero_Jnu_e(nu: f64, s: u32) -> Result<types::Result, Value> {
798    let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
799    let ret = unsafe { sys::gsl_sf_bessel_zero_Jnu_e(nu, s, result.as_mut_ptr()) };
800
801    result_handler!(ret, unsafe { result.assume_init() }.into())
802}