From f108799afa9b1d207e7139608c261f5546eb56bf Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 2 Oct 2001 10:45:16 +0000 Subject: Add in some math lib tests --- test/math/etanh.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/math/etanh.c (limited to 'test/math/etanh.c') diff --git a/test/math/etanh.c b/test/math/etanh.c new file mode 100644 index 000000000..c74b4700a --- /dev/null +++ b/test/math/etanh.c @@ -0,0 +1,52 @@ +/* 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