### 7.33 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_errno.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.177596771314338264
          +/-  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.177596771314338264
    exact   = -0.177596771314338292