The GSL special functions are each supposed to have two alternative
functional interfaces, a pure one:
double function(x, ...)
and one allowing for full error returns:
int function_e(x, ... gsl_sf_result * result)
But the Mathieu function code doesn't follow this convention.
It doesn't offer the former interface at all and uses the second
convention for all its functions BUT without the '_e' name extension on
its function declarations.
This is quite error prone since it is easy to assume that *gsl_sf_result
is simply a reference to a double when in fact it is a structure that is
longer than this (a library user on Windows made exactly this mistake
and wondered why his code was causing an illegal access exception).
I am doubtful that this is an intentional feature of the Mathieu
function code so I have created the attached patch to update the code to
use the normal conventions of the GSL special functions. (this needs
testing since I have only tried it on WIndows).
If this is adopted, the documentation will need updating as well
(unfortunately I am unable to do this).
with my best regards,
Brian Gladman