URL:
<https://savannah.gnu.org/bugs/?63519>
Summary: gsl_root_fsolver_set "endpoints do not straddle y=0"
Project: GNU Scientific Library
Submitter: nkr
Submitted: Tue 13 Dec 2022 01:18:16 PM UTC
Category: Performance
Severity: 3 - Normal
Operating System: Debian Testing
Status: None
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Release: 2.7.1
_______________________________________________________
Follow-up Comments:
-------------------------------------------------------
Date: Tue 13 Dec 2022 01:18:16 PM UTC By: Navi <nkr>
Hello,
Root Bracketing Algorithms (bisection, brent, and falsepos) expect that the
sign of f(a) and f(b) be different so that the endpoints do straddle f(x)=0.
gsl_root_fsolver_set returns GSL_SUCCESS when the supplied interval is good
and throws GSL_ERROR ("endpoints do not straddle y=0", GSL_EINVAL);
otherwise.
I've a particular case where I've to split up my complete domain into
subdomains to avoid singularities. My root is an angle and I've to avoid 0,
90, 180, and 360 degrees. So I split my domain into 4 quadrants; only one of
which will be a valid interval. Now I could either test each interval before
calling gsl_root_fsolver_set or redefine gsl's error handler to not "abort()".
Option 1 is a performance issue for me because f(x) is a costly function. On
the one hand gsl_root_fsolver_set expects the user to check beforehand that
the end points do straddle y=0. But it checks again internally the validity of
the same condition. Option 2 is what I do now.
If gsl_root_fsolver_set returns GSL_EINVAL instead of throwing an error it
would give the user an option to handle the error (without redefining gsl's
error handler) and also avoid checking the "endpoints do straddle y=0"
condition twice.
Regards,
Navi
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?63519>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/