## Examples

The following example demonstrates the use of the error handling form of the special functions, in this case to compute the Bessel function @math{J_0(5.0)},

```#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int
main (void)
{
double x = 5.0;
gsl_sf_result result;

double expected = -0.17759677131433830434739701;

int status = gsl_sf_bessel_J0_e (x, &result);

printf("status  = %s\n", gsl_strerror(status));
printf("J0(5.0) = %.18f\n"
"      +/- % .18f\n",
result.val, result.err);
printf("exact   = %.18f\n", expected);
return status;
}
```

Here are the results of running the program,

```\$ ./a.out
status  = success
J0(5.0) = -0.177596771314338292
+/-  0.000000000000000193
exact   = -0.177596771314338292
```

The next program computes the same quantity using the natural form of the function. In this case the error term result.err and return status are not accessible.

```#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int
main (void)
{
double x = 5.0;
double expected = -0.17759677131433830434739701;

double y = gsl_sf_bessel_J0 (x);

printf("J0(5.0) = %.18f\n", y);
printf("exact   = %.18f\n", expected);
return 0;
}
```

The results of the function are the same,

```\$ ./a.out
J0(5.0) = -0.177596771314338292
exact   = -0.177596771314338292
```