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,
34 _DEFUN (tanhf
, (float),
37 float f
, res
, g
, P
, Q
, R
;
41 /* Check if the input is too big. */
45 else if (f
> LN3_OVER2
)
46 res
= 1.0 - 2.0 / (exp (2 * f
) + 1.0);
48 /* Check if the input is too small. */
49 else if (f
< z_rooteps_f
)
52 /* Calculate the Taylor series. */
58 Q
= (g
+ q
[1]) * g
+ q
[0];
70 #ifdef _DOUBLE_IS_32BITS
72 double tanh (double x
)
74 return (double) tanhf ((float) x
);
77 #endif _DOUBLE_IS_32BITS