#include <sys/cdefs.h>
#if defined(LIBM_SCCS) && !defined(lint)
__RCSID("$NetBSD: e_atanhf.c,v 1.6 1999/07/02 15:37:38 simonb Exp $");
#endif
#include "math.h"
#include "math_private.h"
#warning obsolete
static const float one = 1.0, huge = 1e30;
static const float zero = 0.0;
float atanhf(float x)
{
float t;
int32_t hx,ix;
GET_FLOAT_WORD(hx,x);
ix = hx&0x7fffffff;
if (ix>0x3f800000)
return (x-x)/(x-x);
if(ix==0x3f800000)
return x/zero;
if(ix<0x31800000&&(huge+x)>zero) return x;
SET_FLOAT_WORD(x,ix);
if(ix<0x3f000000) {
t = x+x;
t = (float)0.5*log1pf(t+t*x/(one-x));
} else
t = (float)0.5*log1pf((x+x)/(one-x));
if(hx>=0) return t; else return -t;
}