#include "libm.h"
-static const double one = 1.0, huge = 1e300;
-static const double zero = 0.0;
+static const double huge = 1e300;
double atanh(double x)
{
if ((ix | ((lx|-lx)>>31)) > 0x3ff00000) /* |x| > 1 */
return (x-x)/(x-x);
if (ix == 0x3ff00000)
- return x/zero;
- if (ix < 0x3e300000 && (huge+x) > zero) /* x < 2**-28 */
+ return x/0.0;
+ if (ix < 0x3e300000 && (huge+x) > 0.0) /* x < 2**-28 */
return x;
SET_HIGH_WORD(x, ix);
if (ix < 0x3fe00000) { /* x < 0.5 */
t = x+x;
- t = 0.5*log1p(t + t*x/(one-x));
+ t = 0.5*log1p(t + t*x/(1.0-x));
} else
- t = 0.5*log1p((x+x)/(one-x));
+ t = 0.5*log1p((x+x)/(1.0-x));
if (hx >= 0)
return t;
return -t;