/* * (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * * Author: Ceriel J.H. Jacobs */ /* $Header$ */ #include #include #include "localmath.h" double sinh(double x) { int negx = x < 0; if (negx) { x = -x; } if (x > M_LN_MAX_D) { /* exp(x) would overflow */ if (x >= M_LN_MAX_D + M_LN2) { /* not representable */ x = HUGE_VAL; errno = ERANGE; } else x = exp (x - M_LN2); } else { double expx = exp(x); x = 0.5 * (expx - 1.0/expx); } if (negx) { return -x; } return x; }