t2ex/bsd_source/lib/libc/src_bsd/math/e_atanhf.c | bare source | permlink (0.00 seconds) |
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: }