diff options
author | Ondřej Bílka <neleai@seznam.cz> | 2013-10-17 16:03:24 +0200 |
---|---|---|
committer | Ondřej Bílka <neleai@seznam.cz> | 2013-10-17 16:03:24 +0200 |
commit | c5d5d574cbfa96d0f6c1db24d1e072c472627e41 (patch) | |
tree | 83b97e29ee65636dfe1247ea8d2344ca3f0b04b4 /sysdeps/ieee754/dbl-64/s_asinh.c | |
parent | e5c2c2d0c0315ca24cc9cd638cdb1a2d8dcc4b0d (diff) | |
download | glibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.tar.gz glibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.tar.xz glibc-c5d5d574cbfa96d0f6c1db24d1e072c472627e41.zip |
Format floating routines.
Diffstat (limited to 'sysdeps/ieee754/dbl-64/s_asinh.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_asinh.c | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_asinh.c b/sysdeps/ieee754/dbl-64/s_asinh.c index 68e854f5f4..5500746848 100644 --- a/sysdeps/ieee754/dbl-64/s_asinh.c +++ b/sysdeps/ieee754/dbl-64/s_asinh.c @@ -25,33 +25,43 @@ #include <math_private.h> static const double -one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ -ln2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */ -huge= 1.00000000000000000000e+300; + one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ + ln2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */ + huge = 1.00000000000000000000e+300; double -__asinh(double x) +__asinh (double x) { - double w; - int32_t hx,ix; - GET_HIGH_WORD(hx,x); - ix = hx&0x7fffffff; - if(__builtin_expect(ix< 0x3e300000, 0)) { /* |x|<2**-28 */ - if(huge+x>one) return x; /* return x inexact except 0 */ + double w; + int32_t hx, ix; + GET_HIGH_WORD (hx, x); + ix = hx & 0x7fffffff; + if (__builtin_expect (ix < 0x3e300000, 0)) /* |x|<2**-28 */ + { + if (huge + x > one) + return x; /* return x inexact except 0 */ + } + if (__builtin_expect (ix > 0x41b00000, 0)) /* |x| > 2**28 */ + { + if (ix >= 0x7ff00000) + return x + x; /* x is inf or NaN */ + w = __ieee754_log (fabs (x)) + ln2; + } + else + { + double xa = fabs (x); + if (ix > 0x40000000) /* 2**28 > |x| > 2.0 */ + { + w = __ieee754_log (2.0 * xa + one / (__ieee754_sqrt (xa * xa + one) + + xa)); } - if(__builtin_expect(ix>0x41b00000, 0)) { /* |x| > 2**28 */ - if(ix>=0x7ff00000) return x+x; /* x is inf or NaN */ - w = __ieee754_log(fabs(x))+ln2; - } else { - double xa = fabs(x); - if (ix>0x40000000) { /* 2**28 > |x| > 2.0 */ - w = __ieee754_log(2.0*xa+one/(__ieee754_sqrt(xa*xa+one)+xa)); - } else { /* 2.0 > |x| > 2**-28 */ - double t = xa*xa; - w =__log1p(xa+t/(one+__ieee754_sqrt(one+t))); - } + else /* 2.0 > |x| > 2**-28 */ + { + double t = xa * xa; + w = __log1p (xa + t / (one + __ieee754_sqrt (one + t))); } - return __copysign(w, x); + } + return __copysign (w, x); } weak_alias (__asinh, asinh) #ifdef NO_LONG_DOUBLE |