| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | /*							xtanh.c		*//* hyperbolic tangent check routine *//* this subroutine is used by the exponential function routine *//* by Stephen L. Moshier. */#include "ehead.h"void etanh( x, y )unsigned short *x, *y;{unsigned short e[NE], r[NE], j[NE], xx[NE], m2[NE];short i, n;long lj;emov( x, r );r[NE-1] &= (unsigned short )0x7fff;if( ecmp(r, eone) >= 0 )	{/* tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)) * Note eexp() calls xtanh, but with an argument less than (1 + log 2)/2. */	eexp( r, e );	ediv( e, eone, r );	esub( r, e, xx );	eadd( r, e, j );	ediv( j, xx, y );	return;	}emov( etwo, m2 );eneg( m2 );n = NBITS/8;	/* Number of terms to do in the continued fraction */lj = 2 * n + 1;ltoe( &lj, j );emov( j, e );emul( x, x, xx );/* continued fraction */for( i=0; i<n; i++)	{	ediv( e, xx, r );	eadd( m2, j, j );	eadd( r, j, e );	}ediv( e, x, y );}
 |