12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #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 )
- {
- 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;
- lj = 2 * n + 1;
- ltoe( &lj, j );
- emov( j, e );
- emul( x, x, xx );
- for( i=0; i<n; i++)
- {
- ediv( e, xx, r );
- eadd( m2, j, j );
- eadd( r, j, e );
- }
- ediv( e, x, y );
- }
|