Next Previous Contents

3. Error Handling

This section describes how the GSL modules handle errors reported by the GSL library.

The following GSL error codes are defined by the gsl module:

   GSL_EDOM        input domain error, e.g sqrt(-1)
   GSL_ERANGE      output range error, e.g. exp(1e100)
   GSL_EFAULT      invalid pointer
   GSL_EINVAL      invalid argument supplied by user
   GSL_EFAILED     generic failure
   GSL_EFACTOR     factorization failed
   GSL_ESANITY     sanity check failed - shouldn't happen
   GSL_ENOMEM      malloc failed
   GSL_EBADFUNC    problem with user-supplied function
   GSL_ERUNAWAY    iterative process is out of control
   GSL_EMAXITER    exceeded max number of iterations
   GSL_EZERODIV    tried to divide by zero
   GSL_EBADTOL     user specified an invalid tolerance
   GSL_ETOL        failed to reach the specified tolerance
   GSL_EUNDRFLW    underflow
   GSL_EOVRFLW     overflow
   GSL_ELOSS       loss of accuracy
   GSL_EROUND      failed because of roundoff error
   GSL_EBADLEN     matrix, vector lengths are not conformant
   GSL_ENOTSQR     matrix not square
   GSL_ESING       apparent singularity detected
   GSL_EDIVERGE    integral or series is divergent
   GSL_EUNSUP      requested feature is not supported by the hardware
   GSL_EUNIMPL     requested feature not (yet) implemented
   GSL_ECACHE      cache limit exceeded
   GSL_ETABLE      table limit exceeded
   GSL_ENOPROG     iteration is not making progress towards solution
   GSL_ENOPROGJ    jacobian evaluations are not improving the solution
   GSL_ETOLF       cannot reach the specified tolerance in F
   GSL_ETOLX       cannot reach the specified tolerance in X
   GSL_ETOLG       cannot reach the specified tolerance in gradient
   GSL_EOF         end of file

The gsl_set_error_disposition function may be used to indicate how the module is to handle a specified error. It takes two arguments: an error code and a value controlling how the error is to be handled:

    gsl_set_error_disposition (error_code, control_value)
If the control value is 0, the error will be ignored by the module. If the control value is 1, the module will print a warning message when the specified error is encountered. If the control value is -1, the module will generate an exception when the error is encountered. For example,
    gsl_set_error_disposition (GSL_EDOM, -1);
will cause domain errors to generate an exception, whereas
    gsl_set_error_disposition (GSL_EUNDRFLW, 0);
will cause the GSL modules to ignore underflow errors.

Alternatively, the control value may be the reference to a function to be called when the specified error occurs. The function will be passed two arguments: a string whose value is the function name generating the error and the error code itself, e.g.,

    static define edom_callback (fname, err_code)
    {
       vmessage ("%s: domain error.", fname);
    }
    gsl_set_error_disposition (GSL_EDOM, &edom_callback);

    y = log_1plusx (-10);
will result in the message "log_1plusx: domain error.".

By default, all errors will generate exceptions except for the following, which will generate warnings:

   GSL_EDOM
   GSL_ERANGE
   GSL_EUNDRFLW
   GSL_EOVRFLW


Next Previous Contents