## Examples

The following example demonstrates the use of the error handling form of the special functions, in this case to compute the Bessel function 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