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

📄 tanh.c

📁 VXWORKS源代码
💻 C
字号:
/* tanh.c - math routines *//* Copyright 1992-1994 Wind River Systems, Inc. *//*modification history--------------------01f,09dec94,rhp  fix man pages for hyperbolic fns.01e,05feb93,jdi  doc changes based on kdl review.01d,02dec92,jdi  doc tweaks.01c,28oct92,jdi  documentation cleanup.01b,20sep92,smb  documentation additions01a,08jul92,smb  documentation.*//*DESCRIPTION* Copyright (c) 1985 Regents of the University of California.* All rights reserved.** Redistribution and use in source and binary forms are permitted* provided that the above copyright notice and this paragraph are* duplicated in all such forms and that any documentation,* advertising materials, and other materials related to such* distribution and use acknowledge that the software was developed* by the University of California, Berkeley.  The name of the* University may not be used to endorse or promote products derived* from this software without specific prior written permission.* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.** All recipients should regard themselves as participants in an ongoing* research project and hence should feel obligated to report their* experiences (good or bad) with these elementary function codes, using* the sendbug(8) program, to the authors.*SEE ALSO: American National Standard X3.159-1989NOMANUAL*/#include "vxWorks.h"#include "math.h"/********************************************************************************* tanh - compute a hyperbolic tangent (ANSI)** This routine returns the hyperbolic tangent of <x> in* double precision (IEEE double, 53 bits).** INTERNAL:* Method:** (1) Reduce <x> to non-negative by:**         tanh(-x) = - tanh(x)** (2)*         0      <  x <=  1.e-10 :  tanh(x) := x**                                               -expm1(-2x)*         1.e-10 <  x <=  1      :  tanh(x) := --------------*                                              expm1(-2x) + 2**                                                       2*         1      <= x <=  22.0   :  tanh(x) := 1 -  ---------------*                                                   expm1(2x) + 2*         22.0   <  x <= INF     :  tanh(x) := 1.**     Note: 22 was chosen so that fl(1.0+2/(expm1(2*22)+2)) == 1.** INCLUDE FILES: math.h** RETURNS:* The double-precision hyperbolic tangent of <x>.** Special cases:*     If <x> is NaN, tanh() returns NaN.** SEE ALSO: mathALib** INTERNAL:* Coded in C by K.C. Ng, 1/8/85;* Revised by K.C. Ng on 2/8/85, 2/11/85, 3/7/85, 3/24/85.*/double tanh    (    double x	/* number whose hyperbolic tangent is required */    )    {	static double one=1.0, two=2.0, small = 1.0e-10, big = 1.0e10;	double expm1(), t, copysign(), sign;	int finite();#if !defined(vax)&&!defined(tahoe)	if(x!=x) return(x);	/* x is NaN */#endif	/* !defined(vax)&&!defined(tahoe) */	sign=copysign(one,x);	x=copysign(x,one);	if(x < 22.0)	    if( x > one )		return(copysign(one-two/(expm1(x+x)+two),sign));	    else if ( x > small )		{t= -expm1(-(x+x)); return(copysign(t/(two-t),sign));}	    else		/* raise the INEXACT flag for non-zero x */		{big+x; return(copysign(x,sign));}	else if(finite(x))	    return (sign+1.0E-37); /* raise the INEXACT flag */	else	    return(sign);	/* x is +- INF */    }

⌨️ 快捷键说明

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