In /usr/include/__math.h the function asinh fails for
negative arguments because __sgn1 is called before log1p.
The statement should be "return log1p (__y *__y /
(sqrt(__y * __y + 1.0) + 1.0) + __y) * __sgn1(__x);"
A more general problem with this file (or maybe it is the
compiler) is that when function arguments are given as long
double type, they get converted to temporary variables of
double type and then those are loaded onto the FPU. This
can cause loss of precision and overflow.