Hello Instead of computing 2 times fabs(fn), why not storing it in a variable ?
result->val = fn;
- result->err = GSL_DBL_EPSILON*fabs(fn);
+ result->err = 2.0*GSL_DBL_EPSILON;
+ double factor = fabs(fn);
+ if (factor > 1.0)
+ result->err *= factor;
Have a nice day.
