* Copyright (c) 1985 Regents of the University of California.
* Use and reproduction of this software are granted in accordance with
* the terms and conditions specified in the Berkeley Software License
* Agreement (in particular, this entails acknowledgement of the programs'
* source, and inclusion of this notice) with the additional understanding
* that 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 "sendbug 4bsd-bugs@BERKELEY", to the authors.
"@(#)atanh.c 1.2 (Berkeley) 8/21/85; 1.3 (ucb.elefunt) %G%";
* RETURN THE HYPERBOLIC ARC TANGENT OF X
* DOUBLE PRECISION (VAX D format 56 bits, IEEE DOUBLE 53 BITS)
* CODED IN C BY K.C. NG, 1/8/85;
* REVISED BY K.C. NG on 2/7/85, 3/7/85, 8/18/85.
* Required kernel function:
* log1p(x) ...return log(1+x)
* atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------)
* atanh(x) is NaN if |x| > 1 with signal;
* atanh(NaN) is that NaN with no signal;
* atanh(+-1) is +-INF with signal.
* atanh(x) returns the exact hyperbolic arc tangent of x nearly rounded.
* In a test run with 512,000 random arguments on a VAX, the maximum
* observed error was 1.87 ulps (units in the last place) at
* x= -3.8962076028810414000e-03.
#if (defined(VAX)||defined(TAHOE))
double copysign(),log1p(),z
;
#if (defined(VAX)||defined(TAHOE))
return(copysign(1.0,z
)*infnan(ERANGE
)); /* sign(x)*INF */