gonzui


Format: Advanced Search

t2ex/bsd_source/lib/libc/src_bsd/math/e_atanhf.cbare sourcepermlink (0.01 seconds)

Search this content:

    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: #include "math.h"
   17: #include "math_private.h"
   18: 
   19: static const float one = 1.0, huge = 1e30;
   20: static const float zero = 0.0;
   21: 
   22: float
   23: atanhf(float x)
   24: {
   25:         float t;
   26:         int32_t hx,ix;
   27:         GET_FLOAT_WORD(hx,x);
   28:         ix = hx&0x7fffffff;
   29:         if (ix>0x3f800000)             /* |x|>1 */
   30:             return (x-x)/(x-x);
   31:         if(ix==0x3f800000) 
   32:             return x/zero;
   33:         if(ix<0x31800000&&(huge+x)>zero) return x;     /* x<2**-28 */
   34:         SET_FLOAT_WORD(x,ix);
   35:         if(ix<0x3f000000) {            /* x < 0.5 */
   36:             t = x+x;
   37:             t = (float)0.5*log1pf(t+t*x/(one-x));
   38:         } else 
   39:             t = (float)0.5*log1pf((x+x)/(one-x));
   40:         if(hx>=0) return t; else return -t;
   41: }