e_atanhf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       e_atanhf.c (1219B)
       ---
            1 /* e_atanhf.c -- float version of e_atanh.c.
            2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
            3  */
            4 
            5 /*
            6  * ====================================================
            7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
            8  *
            9  * Developed at SunPro, a Sun Microsystems, Inc. business.
           10  * Permission to use, copy, modify, and distribute this
           11  * software is freely granted, provided that this notice
           12  * is preserved.
           13  * ====================================================
           14  */
           15 
           16 #ifndef lint
           17 static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atanhf.c,v 1.6 2002/05/28 17:03:12 alfred Exp $";
           18 #endif
           19 
           20 #include "math.h"
           21 #include "math_private.h"
           22 
           23 static const float one = 1.0, huge = 1e30;
           24 
           25 static const float zero = 0.0;
           26 
           27 float
           28 __ieee754_atanhf(float x)
           29 {
           30         float t;
           31         int32_t hx,ix;
           32         GET_FLOAT_WORD(hx,x);
           33         ix = hx&0x7fffffff;
           34         if (ix>0x3f800000)                 /* |x|>1 */
           35             return (x-x)/(x-x);
           36         if(ix==0x3f800000)
           37             return x/zero;
           38         if(ix<0x31800000&&(huge+x)>zero) return x;        /* x<2**-28 */
           39         SET_FLOAT_WORD(x,ix);
           40         if(ix<0x3f000000) {                /* x < 0.5 */
           41             t = x+x;
           42             t = (float)0.5*log1pf(t+t*x/(one-x));
           43         } else
           44             t = (float)0.5*log1pf((x+x)/(one-x));
           45         if(hx>=0) return t; else return -t;
           46 }