* Copyright (c) 1985 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of California at 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'' without express or implied warranty.
* 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.
static char sccsid
[] = "@(#)atanh.c 5.2 (Berkeley) %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)
#endif /* defined(vax)||defined(tahoe) */
double copysign(),log1p(),z
;
#if defined(vax)||defined(tahoe)
return(copysign(1.0,z
)*infnan(ERANGE
)); /* sign(x)*INF */
#endif /* defined(vax)||defined(tahoe) */