sf_tanh.c

来自「KPIT GNU Tools is a set of GNU developme」· C语言 代码 · 共 78 行

C
78
字号
/* @(#)z_tanhf.c 1.0 98/08/13 *//***************************************************************** * The following routines are coded directly from the algorithms * and coefficients given in "Software Manual for the Elementary * Functions" by William J. Cody, Jr. and William Waite, Prentice * Hall, 1980. *****************************************************************//****************************************************************** * Hyperbolic Tangent * * Input: *   x - floating point value * * Output: *   hyperbolic tangent of x * * Description: *   This routine calculates hyperbolic tangent. * *****************************************************************/#include <float.h>#include "fdlibm.h"#include "zmath.h"static const float LN3_OVER2 = 0.5493061443;static const float p[] = { -0.2059432032,                           -0.0009577527 };static const float q[] = {  0.6178299136,                            0.25 };float_DEFUN (tanhf, (float),        float x){  float f, res, g, P, Q, R;  f = fabsf (x);  /* Check if the input is too big. */   if (f > BIGX)    res = 1.0;   else if (f > LN3_OVER2)    res = 1.0 - 2.0 / (exp (2 * f) + 1.0);  /* Check if the input is too small. */  else if (f < z_rooteps_f)    res = f;  /* Calculate the Taylor series. */  else    {      g = f * f;      P = p[1] * g + p[0];      Q = (g + q[1]) * g + q[0];      R = g * (P / Q);      res = f + f * R;    }  if (x < 0.0)    res = -res;  return (res);}#ifdef _DOUBLE_IS_32BITSdouble tanh (double x){  return (double) tanhf ((float) x);}#endif _DOUBLE_IS_32BITS

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?