⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_tan.c

📁 Newlib 嵌入式 C库 标准实现代码
💻 C
字号:
/* @(#)z_tan.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. ******************************************************************//*FUNCTION        <<tan>>, <<tanf>>---tangentINDEXtanINDEXtanfANSI_SYNOPSIS        #include <math.h>        double tan(double <[x]>);        float tanf(float <[x]>);TRAD_SYNOPSIS        #include <math.h>        double tan(<[x]>)        double <[x]>;        float tanf(<[x]>)        float <[x]>;DESCRIPTION<<tan>> computes the tangent of the argument <[x]>.Angles are specified in radians.<<tanf>> is identical, save that it takes and returns <<float>> values.RETURNSThe tangent of <[x]> is returned.PORTABILITY<<tan>> is ANSI. <<tanf>> is an extension.*//****************************************************************** * Tangent * * Input: *   x - floating point value * * Output: *   tangent of x * * Description: *   This routine calculates the tangent of x. * *****************************************************************/#include "fdlibm.h"#include "zmath.h"#ifndef _DOUBLE_IS_32BITSstatic const double TWO_OVER_PI = 0.63661977236758134308;static const double p[] = { -0.13338350006421960681,                             0.34248878235890589960e-2,                            -0.17861707342254426711e-4 };static const double q[] = { -0.46671683339755294240,                             0.25663832289440112864e-1,                            -0.31181531907010027307e-3,                             0.49819433993786512270e-6 };double_DEFUN (tan, (double),        double x){  double y, f, g, XN, xnum, xden, res;  int N;  /* Check for special values. */  switch (numtest (x))    {      case NAN:        errno = EDOM;        return (x);      case INF:        errno = EDOM;        return (z_notanum.d);    }  y = fabs (x);  /* Check for values that are out of our range. */  if (y > 105414357.0)    {      errno = ERANGE;      return (y);    }  if (x < 0.0)    N = (int) (x * TWO_OVER_PI - 0.5);  else    N = (int) (x * TWO_OVER_PI + 0.5);  XN = (double) N;  f = x - N * __PI_OVER_TWO;  /* Check for values that are too small. */  if (-z_rooteps < f && f < z_rooteps)    {      xnum = f;      xden = 1.0;    }  /* Calculate the polynomial. */   else    {       g = f * f;      xnum = f * ((p[2] * g + p[1]) * g + p[0]) * g + f;      xden = (((q[3] * g + q[2]) * g + q[1]) * g + q[0]) * g + 1.0;    }  if (N & 1)    {      xnum = -xnum;      res = xden / xnum;    }   else    {      res = xnum / xden;    }  return (res);}#endif /* _DOUBLE_IS_32BITS */

⌨️ 快捷键说明

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