/* evaluate a function discarding the status value in a modifiable way */
#define EVAL_RESULT(fn) \
gsl_sf_result result; \
int status = fn; \
if (status != GSL_SUCCESS) { \
GSL_ERROR_VAL(#fn, status, result.val); \
} ; \
return result.val;
#define EVAL_DOUBLE(fn) \
int status = fn; \
if (status != GSL_SUCCESS) { \
GSL_ERROR_VAL(#fn, status, result); \
} ; \
return result;