2 /* @(#)z_tanhf.c 1.0 98/08/13 */
3 /*****************************************************************
4 * The following routines are coded directly from the algorithms
5 * and coefficients given in "Software Manual for the Elementary
6 * Functions" by William J. Cody, Jr. and William Waite, Prentice
8 *****************************************************************/
9 /******************************************************************
13 * x - floating point value
16 * hyperbolic tangent of x
19 * This routine calculates hyperbolic tangent.
21 *****************************************************************/
27 static const float LN3_OVER2
= 0.5493061443;
28 static const float p
[] = { -0.2059432032,
30 static const float q
[] = { 0.6178299136,
36 float f
, res
, g
, P
, Q
, R
;
40 /* Check if the input is too big. */
44 else if (f
> LN3_OVER2
)
45 res
= 1.0 - 2.0 / (exp (2 * f
) + 1.0);
47 /* Check if the input is too small. */
48 else if (f
< z_rooteps_f
)
51 /* Calculate the Taylor series. */
57 Q
= (g
+ q
[1]) * g
+ q
[0];
69 #ifdef _DOUBLE_IS_32BITS
71 double tanh (double x
)
73 return (double) tanhf ((float) x
);
76 #endif _DOUBLE_IS_32BITS